This shows you the differences between two versions of the page.
rl:labs:08:contents:01 [2013/09/18 09:48] razvan.deaconescu |
rl:labs:08:contents:01 [2023/11/05 12:53] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 1. Trafic criptat și necriptat ==== | + | ==== 01. [10p] Configurare translatare de adrese (MASQUERADE) ==== |
- | Traficul generat de servicii se clasifică în trafic criptat și trafic în clar. Traficul în clar (necriptat) poate fi interpretat și înțeles dacă este capturat. Traficul criptat nu poate fi interpretat în absența cheii de criptare; doar transmițătorul și receptorul cunosc cheia pentru a putea comunica. | + | Epuizarea adreselor IPv4 în cadrul rețelelor curente a condus la folosirea de adrese IP din clase private (de ex. ''192.168.0.0/24''). Pe lângă comunicația dintre stațiile unei rețele, dorim și accesul la Internet al acestora. De aceea s-a introdus conceptul de translatare de adrese (NAT: //Network Address Translation//) prin care mai multe stații dispun de acces la Internet folosind aceeași adresă IP rutabilă: adresa gateway-ului. Activarea translatării de adrese (NAT) pe gateway conduce la înlocuirea perechii <adresă IP sursă, port sursă> (aparținând stației) cu perechea <adresa IP gateway, port disponibil>. |
- | Ne propunem să analizăm, din punctul de vedere al criptării traficului, următoarele protocoale/servicii: | + | Configurarea NAT pe Linux se realizează tot prin intermediul comenzii ''iptables'', la fel ca în cazul configurării firewall-ului. Dacă pentru configurarea firewall-ului foloseam tabela ''filter'' (tabela implicită a ''iptables''), pentru configurarea translatării de adrese vom folosi tabela ''nat''. |
- | * telnet (port TCP 23) | + | |
- | * SSH (port TCP 22) | + | |
- | * FTP (port TCP 21) | + | |
- | Vom folosi ''dsniff'', un utilitar cu ajutorul căruia putem captura toate pachetele în clar ce trec printr-un anumit server, afișând datele trimise (user, parola, comenzi). Vom considera topologia laboratorului, în care ne vom conecta de la stația "red" la stația "green" prin intermediul stației "host". | + | Astfel, pentru a activa NAT pe un server Linux executăm comanda<code bash> |
+ | root@host:~# iptables -t nat -A POSTROUTING -j MASQUERADE | ||
+ | </code> | ||
+ | În comanda de mai sus: | ||
+ | * ''-t'' specifică tabela pe care se aplică regula, în cazul nostru tabela ''nat''. | ||
+ | * ''-A'' înseamnă adăugarea unei reguli la sfârșitul listei de reguli. | ||
+ | * ''POSTROUTING'' se referă la momentul când va fi realizat procesul de translatare de adrese: după rutare. | ||
+ | * În nomenclatura ''iptables'' acesta se numește și **lanț (chain)**. | ||
+ | * [[https://www.netfilter.org/documentation/HOWTO/netfilter-hacking-HOWTO-3.html|Exemple de alte lanțuri: ''INPUT'', ''OUTPUT'', ''FORWARD'', ''PREROUTING'']]. | ||
+ | * ''-j'' este acțiunea ce va fi luată, iar în acest caz este ''MASQUERADE'' (acțiune simplă de translatare de adrese). | ||
- | Pentru a declanșa captura, autentificați-vă ca root pe stația "host" și rulați comanda<code bash> | + | Pentru a verifica și valida regula, afișăm intrările din lanțul ''POSTROUTING'' din tabela ''nat'' folosind comanda<code bash> |
- | dsniff -i eth0 | + | 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 -- * * 0.0.0.0/0 0.0.0.0/0 | ||
</code> | </code> | ||
- | Pentru comunicație prin telnet, rulați pe stația "red" comanda<code bash> | + | Vrem să verificăm configurarea corectă a NAT. Pentru acesta vom trimite de pe stația ''red'' un pachet către ''8.8.8.8''. Pachetul va trece prin gateway (adică stația ''host'') și va fi translatat. Pe stația ''red'' rulăm comanda<code bash> |
- | telnet green | + | root@red:~# ping -c 2 8.8.8.8 |
+ | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
+ | From 192.168.1.2 icmp_seq=1 Destination Host Unreachable | ||
+ | From 192.168.1.2 icmp_seq=2 Destination Host Unreachable | ||
+ | |||
+ | --- 8.8.8.8 ping statistics --- | ||
+ | 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms | ||
</code> | </code> | ||
- | Folosiți utilizatorul ''student'' și parola ''student''; executați ''ls'', după care ''exit''. Observați pe stația "host" captura credențialelor trasmise între "red" și "green"; traficul între **trafic în clar**. | ||
- | Pentru comunicație prin FTP, rulați pe stația "red" comanda<code bash> | + | Observăm că nu există conectivitate de la stația ''red'' către adresa IP ''8.8.8.8''. Consultăm întreaga tabelă ''nat'':<code bash> |
- | ftp green | + | root@host:~# iptables -t nat -L -n -v |
+ | Chain PREROUTING (policy ACCEPT 2 packets, 168 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | |||
+ | Chain INPUT (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | |||
+ | Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 0 0 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0 | ||
+ | </code> | ||
+ | Observăm că pachetele ajung în lanțul ''PREROUTING'' (înainte de rutare), dar nu ajung în lanțul ''POSTROUTING'' (după rutare). Ne gândim că este posibil să fie o problemă cu rutarea pe gateway. Verificăm dacă rutarea este activată:<code bash> | ||
+ | root@host:~# sysctl net.ipv4.ip_forward | ||
+ | net.ipv4.ip_forward = 0 | ||
</code> | </code> | ||
- | Folosiți utilizatorul ''student'' și parola ''student''; executați ''ls'', după care ''quit''. Observați pe stația "host" captura credențialelor trasmise între "red" și "green"; traficul FTP **trafic în clar**. | ||
- | Pentru comunicație prin FTP, rulați pe stația "red" comanda<code bash> | + | Într-adevăr, rutarea nu este activată. Pentru a activa rutarea pe stația ''host'' rulăm comanda<code bash> |
- | ssh -l student green | + | root@host:~# sysctl -w net.ipv4.ip_forward=1 |
+ | net.ipv4.ip_forward = 1 | ||
+ | </code> | ||
+ | |||
+ | Intrăm din nou pe stația ''red'' și folosim ''ping'' pentru a testa conectivitatea la adresa IP ''8.8.8.8'':<code bash> | ||
+ | root@red:~# ping -c 2 8.8.8.8 | ||
+ | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
+ | 64 bytes from 8.8.8.8: icmp_req=1 ttl=61 time=92.9 ms | ||
+ | 64 bytes from 8.8.8.8: icmp_req=2 ttl=61 time=81.2 ms | ||
+ | |||
+ | --- 8.8.8.8 ping statistics --- | ||
+ | 2 packets transmitted, 2 received, 0% packet loss, time 1001ms | ||
+ | rtt min/avg/max/mdev = 81.272/87.094/92.917/5.829 ms | ||
+ | </code> | ||
+ | Acum există conectivitate, lucru certificat și de prezența unor pachete în lista prelucrată pe lanțul ''POSTROUTING'':<code bash> | ||
+ | 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 | ||
+ | 2 168 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0 | ||
</code> | </code> | ||
- | Folosiți utilizatorul ''student'' și parola ''student''; executați ''ls'', după care ''exit''. Observați că pe stația "host", dsniff nu afișează informații desppre credențialele transmise între "red" și "green"; traficul SSH este **trafic criptat**. |