This shows you the differences between two versions of the page.
rl:labs:08:contents:02 [2013/11/20 19:39] razvan.deaconescu [2. Blocare servicii necriptate] |
rl:labs:08:contents:02 [2023/11/05 12:54] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 2. Blocare servicii necriptate ==== | + | ==== 02. [10p] Format de pachete la translatare ==== |
- | După cum ați observat la punctul anterior, traficul pentru protocoalele telnet și FTP este trafic în clar, necriptat, putându-se afla cu ușurință credențialele unui anumit cont și comenzile rulate. | + | Ne propunem să analizăm antetul IP al pachetelor ce sunt generate de stațiile ''red'', ''green'' și ''blue'' și au ca destinație o rețea din Internet. Pentru acest lucru vom folosi utilitarul de captură ''tcpdump''. |
- | Ne propunem să blocăm accesul de la stația ''red'' către stația ''green'' pentru aceste servicii, configurând ruterul dintre cele două stații, adică stația ''host''. Practic vom configura pe stația ''host'' opțiuni de firewall cu ajutorul utilitarului ''iptables''. | + | Pe stația ''red'' pornim comanda ''ping'' către ''8.8.8.8.'':<code bash> |
- | + | root@red:~# ping 8.8.8.8 | |
- | Autentificați-vă prin SSH ca ''root'' pe stația ''host''. Pentru a bloca accesul la serviciul telnet (port 23) destinat stației ''green'', rulați pe stația ''host'' comanda de mai jos. Comanda adaugă regula ''iptables'' corespunzătoare.<code bash> | + | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. |
- | iptables -A FORWARD -d green -p tcp --dport telnet -j REJECT | + | 64 bytes from 8.8.8.8: icmp_req=1 ttl=127 time=42.0 ms |
+ | [...] | ||
</code> | </code> | ||
- | Pentru a verifica adăugarea regulii de mai sus, rulați pe stația ''host'' comanda<code bash> | + | <note> |
- | iptables -L FORWARD | + | Atunci când rulăm comanda ''tcpdump'' secvența de urmat este: |
- | </code> | + | - Se rulează comanda ''tcpdump'' cu opțiunile aferente într-un terminal, activând astfel captura de pachete. Utilitarul ''tcpdump'' așteaptă acum transmiterea de pachete pe interfețele pe care ascultă. |
+ | - Într-un alt terminal se rulează o comandă specifică unui client de rețea care generează trafic. | ||
+ | - Se revine în terminalul în care rulează comanda ''tcpdump'' și se urmăresc pachetele capturate. | ||
+ | - Când nu mai este nevoie de utilitarul ''tcpdump'' se întrerupe captura de pachete folosind combinația de taste ''Ctrl+c''. | ||
+ | </note> | ||
- | Pentru a afișa informații și despre pachetele prelucrate și interfețele folosite, rulați pe stația ''host'' comanda<code bash> | + | Pentru a urmări traficul, pe stația ''host'' rulăm comanda<code bash> |
- | iptables -L FORWARD -v | + | root@host:~# tcpdump -n -i eth0 ip dst host 8.8.8.8 |
+ | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode | ||
+ | listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes | ||
+ | 12:59:20.976707 IP host > 8.8.8.8: ICMP echo request, id 625, seq 6, length 64 | ||
+ | 12:59:21.977708 IP host > 8.8.8.8: ICMP echo request, id 625, seq 7, length 64 | ||
</code> | </code> | ||
- | Pentru a afișa informații în format numeric (pentru nume de stații și nume de porturi), rulați pe stația ''host'' comanda<code bash> | + | <spoiler (click pentru expandare) Detalii rulare masina virtuala VMware local> |
- | iptables -L FORWARD -n -v | + | <note important> |
- | </code> | + | După rularea comenzii de mai sus, probabil vi se va bloca terminalul. În mașina virtuală VMware apare o mini-fereastră care vă indică intrarea plăcii de rețea în modul //promiscuous//. Apăsați pe butonul ''OK'' al ferestrei pentru a debloca mașina virtuală și, astfel, terminalul. |
- | De acum înainte recomandăm folosirea acestor opțiuni (''-n -v'') pentru listarea regulilor ''iptables''. | + | </note> |
+ | </spoiler> | ||
- | Pentru a verifica blocarea traficului telnet către ''green'', rulați pe stația ''red'' comanda<code bash> | + | Observăm că adresa IP sursă este ''host.local'' chiar dacă stația ''red'' este cea care execută comanda ''ping'' și generează pachetele de tip ''ICMP echo request''. |
- | telnet green | + | |
- | </code> | + | |
- | Vă apare un mesaj de forma<code> | + | Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă ''tcpdump'' pe interfața ''veth-red'' în loc de ''eth0'': <code bash> |
- | Trying 192.168.2.2... | + | root@host:~# tcpdump -n -i veth-red ip dst host 8.8.8.8 |
- | </code> semnificând faptul că se încearcă realizarea conexiunii dar nu se reușește. Pentru a anula comanda de conectare folosiți combinația de taste ''Ctrl+c''. | + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode |
- | + | listening on veth-red, link-type EN10MB (Ethernet), capture size 65535 bytes | |
- | Pentru a vedea că regula de blocare a funcționat, rulați din nou pe stația ''host'' comanda<code bash> | + | 13:01:12.557692 IP red > 8.8.8.8: ICMP echo request, id 626, seq 6, length 64 |
- | iptables -L FORWARD -n -v | + | 13:01:13.559726 IP red > 8.8.8.8: ICMP echo request, id 626, seq 7, length 64 |
</code> | </code> | ||
- | Observați, în output-ul comenzii, că există acum valori diferite de 0 în coloana ''pkts'' și ''bytes'', semn că au fost pachete prelucrate de această regulă, deci blocate. | + | Observăm că pe interfața ''veth-red'' adresa IP sursă este adresa stației ''red'', adică așa cum este generat de la început pachetul. Motivul este reprezentat de faptul că pachetele ce intră pe intefața ''veth-red'' sunt capturate înainte de rutare, iar procesul NAT este aplicat **după rutare** (vezi [[rl:labs:09:contents:01|]]. |
- | Pentru a verifica funcționarea în continuare a altor conexiuni (diferite de telnet) de la ''red'' la ''green'', rulați pe stația ''red'' comenzile<code bash> | + | Pentru a vedea modul în care se translatează traficul capturăm traficul pe toate interfețele (cele de interes sunt ''veth-red'' și ''eth0'')<code bash> |
- | ftp green | + | root@host:~# tcpdump -n -i any ip dst host 8.8.8.8 |
- | ssh -l student green | + | tcpdump: verbose output suppressed, use -v or -vv for full protocol decode |
+ | listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes | ||
+ | 10:23:07.632412 IP red > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 | ||
+ | 10:23:07.632430 IP host > 8.8.8.8: ICMP echo request, id 707, seq 237, length 64 | ||
+ | 10:23:08.633936 IP red > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 | ||
+ | 10:23:08.633954 IP host > 8.8.8.8: ICMP echo request, id 707, seq 238, length 64 | ||
</code> | </code> | ||
- | Dorim să blocăm și celălalt serviciu necriptat, FTP. Adăugați o regulă ''iptables'' similară pentru a bloca, pe stația ''host'', traficul FTP destinat stației ''green''. De pe stația ''red'' verificați blocarea traficului. | + | În lista de mai sus observăm atât pachetele care sunt captuarate pe interfața ''veth-red'' (generate de stația ''red'') cât și cele capturate pe interfața ''eth0'' (translatate de stația ''host''). |
- | <note tip> | + | Capturați și pachetele de reply, care au ca **sursă** adresa ''8.8.8.8''. Folosiți șirul de argumente ''ip src host 8.8.8.8'' pentru ''tcpdump''. |
- | Pentru această regulă puteți transmite argumentul ''21'' opțiunii ''<nowiki>--</nowiki>dport'' sau chiar numele ''ftp''. Asocierea între port (număr) și protocol (nume) se găsește în fișierul ''/etc/services''. | + | |
- | </note> | + | |
- | <solution -hidden> | + | Repetați testele de mai sus pentru stația ''green''. |
- | <code bash> | + | |
- | root@host:~# iptables -A FORWARD -d green -p tcp --dport ftp -j DROP | + | |
- | root@host:~# iptables -L FORWARD -n -v | + | |
- | Chain FORWARD (policy ACCEPT 94 packets, 10307 bytes) | + | |
- | pkts bytes target prot opt in out source destination | + | |
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:23 | + | |
- | 0 0 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:21 | + | |
- | root@red:~# ftp green | + | <note> |
- | ^C | + | Întrucât latența DNS poate fi semnificativă, recomandăm folosirea opțiunii ''-n'' a utilitarului ''tcpdump'', opțiune care dezactivează rezolvarea DNS. În exemplele de mai sus, nu am folosit opțiunea ''-n'' a utilitarului ''tcpdump'' pentru a identifica mai ușor numele stațiilor implicate în conversație. |
- | + | </note> | |
- | root@host:~# iptables -L FORWARD -n -v | + | |
- | Chain FORWARD (policy ACCEPT 94 packets, 10307 bytes) | + | |
- | pkts bytes target prot opt in out source destination | + | |
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:23 | + | |
- | 2 120 DROP tcp -- * * 0.0.0.0/0 192.168.2.2 tcp dpt:21 | + | |
- | </code> | + | |
- | </solution> | + |