Simulazione di routing e filtraggio con iptables Creare nuove VM

Transcript

Simulazione di routing e filtraggio con iptables Creare nuove VM
Simulazione
di routing e filtraggio
con iptables
Creare nuove VM
Da VirtualBox, seguire il procedimento
guidato di creazione di una nuova VM
utilizzare un nome significativo
specificare Linux/Debian come OS
assegnare 96MB di RAM
utilizzare un disco già esistente, specificando
“basedisk.vdi (Immutabile)”
Chiudere tutte le istanze di VirtualBox
Creare nuove VM
Editare ~/.VirtualBox/VirtualBox.xml
individuare nel MachineRegistry il path della nuova VM
creata
Ripetere l'operazione anche per l'HardDisk nel
MediaRegistry
verificare che sia assente il parametro autoreset=true, toglierlo se
presente
Copiare la macchina creata da VirtualBox sulla memoria USB
sarà qualcosa del tipo ”Machines/Nome/Nome.xml”
renderlo analogo a quello delle altre VM, cioè del tipo
”../LAS.VM/Machines/...”
cp -a ~/.VirtualBox/Machines/Nome ~/LAS.VM/Machines
Riavviare VirtualBox e verificare che la macchina sia vista
correttamente (senza avviarla), se va bene rimuoverla dalla
home
rm -rf ~/.VirtualBox/Machines/Nome
Architettura di rete
Ricordiamo che in ogni macchina virtuale desideriamo
avere disponibili quattro interfacce di rete, che vanno prima
di tutto definite in VirtualBox
Selezionare dall'elenco la VM appena creata, e cliccare su
“Network” nel pannello dei dettagli a destra
Adapter 1 va lasciato inalterato (sarà eth0 con indirizzo
10.0.2.15 assegnato automaticamente sulla rete NAT)
Adapter 2 va abilitato e posto sulla internal network “vlan1”
(sarà eth1)
Adapter 3 va abilitato e posto sulla internal network “vlan2”
(sarà eth2)
Adapter 4 va abilitato e posto sulla rete Host-only
“vboxnet0” (sarà eth3 a cui assegneremo staticamente un
indirizzo del tipo 192.168.56.N)
Shared Folders
Se si desidera, analogamente alle altre VM,
avere a disposizione una cartella per
spostare file da host a VM e viceversa
nei settaggi della VM cliccare su “shared
folders”
cliccare l'icona per aggiungere uno shared
folder in alto a destra
indicare come path “/tmp/virtualbox”
indicare come nome “host”
Modifiche al sistema
Il sistema operativo della nuova VM è impostato a valori di
default del disco base, che vanno cambiati
1. sostituire “debian” con il l'hostname desiderato nei file
/etc/hosts ed /etc/hostname
2. svuotare /etc/udev/rules.d/70-persistent-net.rules
(associa MAC errati ai nomi delle interfacce, sarà rigenerato
correttamente al reboot)
3. configurare eth3 in /etc/network/interfaces, inserendo
queste direttive:
auto eth3
iface eth3 inet static
address 192.168.56.20x
netmask 255.255.255.0
Riavviare la VM
Esempio d'utilizzo: filtraggio e NAT
1) Definire una nuova VM Server2 con IP
192.168.56.204 sull'interfaccia eth3
10.9.9.2 sull'interfaccia eth1
2) Server1 e Server2 erogano servizi sulla porta 80 e 25
3) Configurare il Router in modo che
tutto il traffico dal Client ai Server sia mascherato, cioè
appaia come proveniente dall'IP del Router che si trova
dal lato dei Server
il traffico destinato alla porta 25 sia girato a Server1
anche se diretto a Server2
4) Configurare ogni macchina perchè accetti solo il
traffico strettamente necessario.
Layout di rete risultante
eth0 – 10.0.2.15
eth3 - 192.168.56.203
eth0 – 10.0.2.15
eth3 - 192.168.56.204
eth0 – 10.0.2.15
eth3 - 192.168.56.202
Server
Server2
Router
eth1
eth2
10.9.9.1
eth1
eth2
10.9.9.2
eth1
10.9.9.254
eth2
10.1.1.254
10.1.1.1
eth1 eth2
Client
eth0 – 10.0.2.15
eth3 - 192.168.56.201
Punti 1 e 2
Alla luce di quanto visto durante la configurazione della
nuova VM, è possibile agire anche sulle altre 3 per
avviarle sempre con le interfacce eth1 e/o eth2
correttamente configurate?
Lato client e lato server manca comunque qualcosa per
renderli mutuamente raggiungibili?
Sul router non è automaticamente abilitato l'inoltro: si
veda il file /etc/sysctl.conf
Per simulare un servizio utilizzare nc (ed anche per
connettersi a tale servizio dal client)
Punto 3/a
mascherare il traffico che passa dal router:
il cambiamento dell'IP sorgente tipicamente è fatto come ultima
cosa prima di inviare il pacchetto catena POSTROUTING
il target MASQUERADE seleziona automaticamente l'IP
dall'interfaccia
comodo per IP dinamici, ma overhead e ambiguità se sono presenti alias
iptables -t nat -I POSTROUTING -s 10.1.1.0/24 \
-d 10.9.9.0/24 -j SNAT --to-source 10.9.9.254
verificare con Wireshark il funzionamento della direttiva inserita
ora è possibile rimuovere la route statica che sui server
permette di individuare la rete dei client?
Punto 3/b
modificare la destinazione del traffico tcp/25:
il cambiamento dell'IP destinazione viene fatto prima del routing
perchè quest'ultimo meccanismo possa tenerne conto catena
PREROUTING
iptables -t nat -I PREROUTING -p tcp \
-s 10.1.1.0/24 -d 10.9.9.2 --dport 25 \
-j DNAT --to-dest 10.9.9.1
Punto 4
default deny su tutte le macchine:
iptables
iptables
iptables
iptables
iptables
INPUT DROP
OUTPUT DROP
FORWARD DROP
INPUT -i lo -j ACCEPT
OUTPUT -o lo -j ACCEPT
sul client: connessioni verso il server
-P
-P
-P
-I
-I
traffico che ha il client come end point catene INPUT e OUTPUT
pacchetti in entrambe le direzioni, quelli entranti vanno accettati solo se in
risposta a richieste precedentemente generate in uscita:
iptables -I OUTPUT -o eth2 -d 10.9.9.0/24 \
-p tcp -m multiport --dports 25,80 -j ACCEPT
iptables -I INPUT -i eth2 --state \
ESTABLISHED,RELATED -j ACCEPT
sul server? (hint: invertire la direzione)
sul router? (hint: traffico passante catena FORWARD che vale per
entrambe le direzioni: inserire condizioni più dettagliate per distinguerle)