Comanda folosită mai sus pentru translatare, la 01. [15p] Observare porturi deschise pe o stație, are neajunsuri pe care le vom identifica mai jos.
Pe stația green
capturăm traficul pe interfața green-eth0
folosind comanda tcpdump
:
root@green:~# tcpdump -i green-eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on green-eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
Pe stația red
executăm comanda ping
către stația green
:
root@red:~# ping -c 2 green PING green (192.168.2.2) 56(84) bytes of data. 64 bytes from green (192.168.2.2): icmp_req=1 ttl=63 time=0.155 ms 64 bytes from green (192.168.2.2): icmp_req=2 ttl=63 time=0.086 ms [...]
În acest moment, pe stația green
avem captura pachetelor în output-ul comenzii tcpdump
:
11:18:54.535064 IP host > green: ICMP echo request, id 633, seq 17, length 64 11:18:54.535092 IP green > host: ICMP echo reply, id 633, seq 17, length 64
Observăm că adresa sursă a pachetelor de tip ICMP echo request
este stația host
, nu stația red
. Acest lucru se întâmplă din cauză că atunci când am activat NAT nu am specificat pentru ce tip de trafic să aplice politica de translatare. Astfel stația host
aplică politica de NAT pentru tot traficul care o tranzitează. Dorim să aplicăm politica doar pentru pachetele ce ies în Internet, adică cele ale căror interfață de ieșire este interfața eth0
. Vom șterge vechea regulă de NAT și vom adăuga o regulă corectă.
Pentru ștergerea vechii reguli de NAT rulăm pe stația host
comanda
root@host:~# iptables -t nat -D POSTROUTING -j MASQUERADE
Verificăm faptul că nu mai există comanda
root@host:~# iptables -t nat -L POSTROUTING -n -v Chain POSTROUTING (policy ACCEPT 1 packets, 328 bytes) pkts bytes target prot opt in out source destination
Adăugăm din nou regula de NAT, dar de data aceasta vom specifica să aplice politica de NAT pachetelor ce ies prin interfața eth0
a stației host
:
root@host:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Verificați că regula a fost inserată:
root@host:~# iptables -t nat -L POSTROUTING -n -v Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Observăm prezența interfaței eth0
în coloana out
. Înainte apărea caracterul *
, adică orice interfață.
Repetați testul de la începutul exercițiului și arătați că pachetele trimise de la red
către green
au adresele IP sursă/destinație nemodificate (nu mai fac trecerea prin NAT), în vreme ce pachetele ce ies în Internet sunt translatate.