Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
32
B 192.168.8.18 10.0.0.34
C 192.168.8.3 10.0.0.5 RETE p-p: 10.0.0.4
D 192.168.8.4 10.0.0.6
ESERCITAZIONE 1
Parte 1: IP FORWARDING
C
A si stacca dalla rete 192.168.8.0:
A: sudo ifconfig eth1 down A B
B deve diventare il default gateway di A in modo da reindirizzare i pacchetti verso C. A tal fine,
l’host A imposta una nuova entry nella propria tabella.
A: sudo route add –net 192.168.8.0 netmask 255.255.255.0 gw 10.0.0.34
dev eth0
–net 192.168.8.0 vogliamo raggiungere la rete (net) 192.168.8.0
gw 10.0.0.34 il gateway (B) dev’essere raggiunto con la rete punto-punto
dev eth0 la rete punto-punto è appannaggio dell’interfaccia eth0
C vuole rispondere a 10.0.0.33 ma non sa come trovarlo, quindi dovrà trovare il modo di spedirlo
a B per potervi accedere.
C: sudo route add –host 10.0.0.33 gw 192.168.8.18 dev eth1
–host 10.0.0.33 vogliamo raggiungere l’host 10.0.0.33
gw 192.168.8.18 il gateway è B
dev eth1 questa volta dobbiamo affidarci alla eth1
A B C D
D manda giù eth1 (è isolato rispetto alla rete “grande”) e aggiunge due entry nella route table,
l’una per poter pingare B e l’altra per raggiungere A.
D: sudo ifconfig eth1 down
D: sudo route add –net 192.168.8.0 netmask 255.255.255.0 gw 10.0.0.5 dev
eth0
–net 192.168.8.0 per raggiungere un qualsiasi PC della rete grande (ad esempio B)
gw 10.0.0.5 D vuole usare C
dev eth0 e per farlo usa l’interfaccia eth0 (collegamento p-p)
D: sudo route add –net 10.0.0.32 netmask 255.255.255.252 gw 10.0.0.5 dev
eth0
–net 10.0.0.32 per raggiungere un qualsiasi PC della rete piccola (B, oppure A)
gw 10.0.0.5 D vuole usare C
dev eth0 e per farlo usa l’interfaccia eth0 (collegamento p-p)
B trova il modo di collegarsi a D (o, meglio, alla rete di D) utilizzando C come gateway
B: sudo route add –net 10.0.0.4 gw 192.168.8.3 dev eth1
–net 10.0.0.4 per raggiungere un qualsiasi PC della rete piccola (C, oppure D)
gw 192.168.8.3 B vuole usare C
dev eth0 e per farlo usa l’interfaccia eth0 (collegamento p-p)
Parte 3: proxy-ARP
C vuole sapere il MAC di A con l’illusione che quest’ultimo faccia parte della sua rete (altrimenti
non si potrebbe fare l’ARP). In realtà è B, punto di riferimento per l’instradamento, che darà il
MAC a C cosicché, se quest’ultimo vuole parlare con A, passerà attraverso B!
A B
L’host A deve fare lo stesso e darsi il .202, ovvero l’altro indirizzo disponibile della rete piccolina:
A: sudo ifconfig eth0 192.168.8.202 netmask 255.255.255.252 broadcast
192.168.8.203
eth0 il nuovo indirizzo fa riferimento all’interfaccia eth0
192.168.8.202 ecco il nuovo indirizzo di A
broadcast 192.168.8.203 indirizzo di broadcast della nuova rete “inventata” per A e B
In più, A butta giù la eth1, perché non deve essere direttamente in collegamento con C:
A: sudo ifconfig eth1 down
E tutto funziona!
A 192.168.8.17 10.0.0.33 RETE p-p: 10.0.0.32
B 192.168.8.18 10.0.0.34
C 192.168.8.3 10.0.0.5 RETE p-p: 10.0.0.4
D 192.168.8.4 10.0.0.6
ESERCITAZIONE 2
sudo iptables -L
Punto 2. Impostare IPTABLES per scartare (DROP) i pacchetti ICMP in ingresso e verificarne il
comportamento.
Punto 3. Impostare IPTABLES per rifiutare (REJECT) i pacchetti ICMP in ingresso e verificarne
il comportamento
Punto 4. Impostare a DROP la policy di default per i pacchetti in transito e abilitare l’inoltro del
traffico ssh. Verificarne il comportamento.
Ora C può passare attraverso B per fare l’SSH su A (dopo aver modificato la tabella di routing, v.
esercitazioni precedenti):
C: ssh nomeutente@192.168.8.17
Punto 5. Impostare ad ACCEPT la policy di default per i pacchetti in transito e bloccare l’inoltro
di tutti i pacchetti TCP dalla rete 192.168.8.0/24 alla 10.0.0.x/30 tranne quelli diretti alla porta 80.
Verificarne il comportamento.
Per provare:
telnet 10.0.0.5 80
A questo punto A può fare il ping verso l’esterno: con wireshark si può verificare che la eth1 di B
“comunica” fra il .202 e il .5 (cioè C) e viceversa, mentre la eth0 fa da intermediario fra la .33 (di A)
e il .5 (sempre C).
8. Impostare IPTABLES per realizzare il port forwarding verso la porta ssh di un host sulla rete
interna.
A B
B riceve qualcosa dalla rete esterna (tipo da C) sulla porta 22, e lo interpreta inoltrandolo tutto
quanto verso A (che nel frattempo ha staccato eth1).
B: sudo iptables –t nat –A PREROUTING –d 192.168.8.18 –p tcp --dport 22
–j DNAT -–to-destination 10.0.0.33
-t nat specifica una regola per il NAT
–A PREROUTING per quanto riguarda la chain prerouting (da fuori a dentro
la rete)
–d 192.168.8.18 e per tutti i pacchetti che vanno verso 192.168.8.18 (cioè B)
–p tcp con protocollo TCP
--dport 22 e sono diretti alla porta 22 (sempre di B)
–j DNAT --to-destination fai destination-NAT (ovvero, ciò che recapiti alla porta 22
va consegnato ad un PC che sta nella rete privata)
10.0.0.33 il PC al quale devi consegnare tutto è A (10.0.0.33)
Punto 9
B e C abilitano il forwarding.
D ora può comunicare con l’esterno, ma non riceve risposta perché dobbiamo impostare lo stateful.
C: sudo iptables -I FORWARD 1 -m state --state ESTABLISHED -j ACCEPT
ESERCITAZIONE 3
Impostare il tagging 802.1Q sulle interfacce punto-punto di due host scegliendo un VLAN ID
tra 2 e 254. Assegnare alle sub-interfacce appena create un IP della rete 172.16.X.0/24, dove X =
VLAN ID:
• verificare la connettività tra i due host
• analizzare il traffico tra i due host sia sull’interfaccia principale che sulla sub-interfaccia
Anzitutto dobbiamo creare la LAN, in due passi: prima creiamo le sub-interfacce, dopodiché vi
assegniamo gli indirizzi IP.
A: sudo vconfig add eth0 200
B: sudo vconfig add eth0 200
A: sudo ifconfig eth0.200 up
B: sudo ifconfig eth0.200 up
A: sudo ifconfig eth0.200 172.16.200.2/24
B: sudo ifconfig eth0.200 172.16.200.1/24
Eliminiamo la sub-interfaccia:
B: sudo vconfig rem eth0.200
A questo punto, facendo opportuni tentativi, ci accorgiamo che la perdita di connettività è totale!
A 192.168.8.17 10.0.0.33 RETE p-p: 10.0.0.32
B 192.168.8.18 10.0.0.34
C 192.168.8.3 10.0.0.5 RETE p-p: 10.0.0.4
D 192.168.8.4 10.0.0.6
ESERCITAZIONE 4
La chiave a 2048 bit è chiaramente più difficile da creare, dunque il calcolatore impiega più tempo
per farlo.
A B C D
conn net-to-net
left=192.168.8.18 (pubblico di B)
leftnexthop=192.168.8.3 (pubblico di C)
leftsubnet=10.0.0.32/30 (sottorete p-p di A e B)
right=192.168.8.3 (pubblico di C)
rightnexthop=192.168.8.18 (pubblico di B)
rightsubnet=10.0.0.4/30 (sottorete p-p di C e D)
…
leftrsasigkey= [chiave di B]
rightrsasigkey= [chiave di C]
B
A C D
B fa solamente il router (quindi abilità il forwarding, come C), ora il left (host) è A.
A C D
B
A butta giù eth1 e imposta B come default gateway; B, a sua volta, abilita il forwarding.
A e C creano le loro chiavi:
sudo ipsec newhostkey --bits 1024 --output /etc/ipsec.secrets
…
nat_trasversal = yes
…
conn host-to-net
left=10.0.0.33
leftnexthop=10.0.0.34
leftid=@left-peer
right=192.168.8.3
rightsubnet=10.0.0.4/30
rightnexthop=192.168.8.18
righted=@right-peer
…
leftrsasigkey= [chiave di A]
rightrsasigkey= [chiave di C]
Modifiche di C sul proprio file di configurazione ipsec (questa volta i due file sono diversi!):
…
nat_trasversal = yes
…
conn host-to-net
left=%any
leftsubnet=10.0.0.32/30
leftnexthop=10.0.0.34
leftid=@left-peer
right=192.168.8.3
rightsubnet=10.0.0.4/30
rightnexthop=192.168.8.18
righted=@right-peer
…
leftrsasigkey= [chiave di A]
rightrsasigkey= [chiave di C]
B effettua il NAT:
iptables -t NAT -A POSTROUTING -s 10.0.0.33/32 -j SNAT --to-source
192.168.8.18