Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rl:labs:08:contents:02 [2013/11/20 20:58]
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 anteriortraficul 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 
 +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=127 time=42.0 ms 
 +[...
 +</​code>​
  
-<spoiler Prezentare scurtă iptables (dați click)+<note
-''​iptables''​ este un utilitar Linux care oferă și rol de firewall software. ''​iptables'' ​folosește suportul nucleului pentru ​intercepta ​pachete de rețea ​în diverse puncte ale trecerii acestora prin nucleu și a efectua acțiuni asupra acestoraAstfel de acțiuni sunt: +Atunci când rulăm comanda ​''​tcpdump'' ​secvența de urmat este
-  ​* acceptarea pachetului (''​ACCEPT''​) +  - Se rulează comanda ''​tcpdump''​ cu opțiunile aferente într-un terminal, activând astfel captura ​de pacheteUtilitarul ​''​tcpdump''​ așteaptă acum transmiterea de pachete ​pe interfețele pe care ascultă. 
-  ​* respingerea pachetului (''​REJECT''​+  - Într-un alt terminal se rulează o comandă specifică unui client ​de rețea ​care generează trafic
-  * aruncarea pachetului (''​DROP''​), similar cu respingerea dar nu se transmite nici o notificare de respingere către cel care a transmis pachetul inițial+  ​- 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>​
  
-O diagramă a drumului urmat de un pachet de rețea în nucleu este [[http://​upload.wikimedia.org/​wikipedia/​commons/​8/​8f/​Diagrama_linux_netfilter_iptables.gif|aici]]. +Pentru a urmări traficul, pe stația ''​host'' ​rulăcomanda<​code bash> 
- +root@host:​~#​ tcpdump ​--i eth0 ip dst host 8.8.8.8 
-Comanda ​''​iptables'' ​înseamnă lucrul cu reguli de filtrare de la nivelul nucleului. În mod obișnuit se va preciza: +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
-  * tipul de operație pe regulă (adăugare, ștergere, înlocuire, inserare) +listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 
-  * punctul din nucleul în care trebuie să se găsească pachetul pentru a se aplica regula +12:​59:​20.976707 IP host > 8.8.8.8: ICMP echo request, id 625, seq 6, length 64 
-  * regula în sine +12:​59:​21.977708 IP host > 8.8.8.8: ICMP echo request, id 625, seq 7, length 64
- +
-De exemplu, ​comanda ​de mai jos are semnificația descrisă în continuare:<code bash> +
-iptables ​-A FORWARD ​-d green -p tcp --dport telnet -j REJECT+
 </​code>​ </​code>​
-  * ''​-A'':​ se adaugă regulă (este vorba de //append//, se adaugă la finalul listei de reguli); 
-  * ''​FORWARD'':​ regula se aplică pachetelor care vor fi rutate; alte variante sunt ''​INPUT''​ (pachetele primite direct de sistem) și ''​OUTPUT''​ (pachetele care pleacă de la sistem); 
-  * ''​-d green'':​ sunt selectate pachetele care au ca destinație adresa stației ''​green'';​ 
-  * ''​-p tcp'':​ pachetele selectate sunt pachete TCP; 
-  * ''​%%--%%dport telnet'':​ portul TCP destinație este portul specific protocolului telnet (adică portul ''​23'',​ identificat din fișierul ''/​etc/​services''​) 
-  * ''​-j REJECT'':​ pachetul este respins 
  
-În tabela ​de filtrare aferentă ''​iptables''​ vom aveaașadar, listă de reguli care sunt parcurse secvențialPartea ''​-A FORWARD''​ identifică lanțul de reguli, partea ​''​-d green -p tcp %%--%%dport telnet'' ​este partea de **match** (ce pachete fac match pe regulă)iar partea ''​-j REJECT''​ este partea de **acțiune** (ce face regula cu pachetul).+<spoiler (click pentru expandare) Detalii rulare masina virtuala VMware local> 
 +<note important>​ 
 +După rularea comenzii ​de mai susprobabil vi se va bloca terminalul. În mașina virtuală VMware apare 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ă șiastfel, terminalul. 
 +</​note>​
 </​spoiler>​ </​spoiler>​
  
-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țpe stația ''​host''​ comanda ​de mai jos. Comanda adaugă regula ​''​iptables'' ​corespunzătoare.<code bash> +Observăm că adresa IP sursă este ''​host.local'' ​chiar dacă stația ''​red'' ​este cea care execută comanda ​''​ping'' ​șgenerează pachetele ​de tip ''​ICMP echo request''​.
-# iptables -A FORWARD -d green -p tcp --dport telnet -j REJECT +
-</​code>​+
  
-Pentru a verifica adăugarea regulii de mai sus, rulațpe stația ''​host'' ​comanda<code bash> +Pentru a vedea pachetele așa cum sunt generate inițial, rulăm comandă ''​tcpdump'' ​pe interfaț''​veth-red'' ​în loc de ''​eth0'': ​<code bash> 
-iptables ​-L FORWARD +root@host:~tcpdump ​--i veth-red ip dst host 8.8.8.8 
-Chain FORWARD (policy ACCEPT) +tcpdumpverbose output suppressed, use -v or -vv for full protocol decode 
-target ​    prot opt source ​              ​destination ​         +listening on veth-red, link-type EN10MB (Ethernet), capture size 65535 bytes 
-REJECT ​    ​tcp  ​--  ​anywhere ​            ​green ​               tcp dpt:telnet reject-with icmp-port-unreachable+13:​01:​12.557692 IP red > 8.8.8.8: ICMP echo request, id 626, seq 6, length 64 
 +13:​01:​13.559726 IP red > 8.8.8.8: ICMP echo request, id 626, seq 7, length 64
 </​code>​ </​code>​
 +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 afișa informații și despre pachetele prelucrate și interfețele ​folosite, rulațpe stația ​''​host'' ​comanda<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> 
-iptables ​-L FORWARD ​-v +root@host:~tcpdump ​-n -i any ip dst host 8.8.8.8 
-Chain FORWARD ​(policy ACCEPT 0 packetsbytes) +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +listening on any, link-type LINUX_SLL ​(Linux cooked)capture size 65535 bytes 
-    ​0 ​    0 REJECT ​    ​tcp ​ --  any    any     ​anywhere ​            ​green ​               tcp dpt:telnet reject-with icmp-port-unreachable+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>​
  
-Pentru ​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> +În lista de mai sus observăm atât pachetele care sunt captuarate pe interfaț''​veth-red'' ​(generate ​de stația ''​red''​) cât și cele capturate ​pe interfaț''​eth0''​ (translatate de stația ''​host''​).
-# iptables -L FORWARD -v -n +
-Chain FORWARD ​(policy ACCEPT 0 packets, 0 bytes) +
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +
-    0     0 REJECT ​    ​tcp ​ --  *      *       ​0.0.0.0/​0 ​           192.168.2.2 ​         tcp dpt:23 reject-with icmp-port-unreachable +
-</​code>​ +
-De acum înainte recomandăm folosirea acestor opțiuni (''​-v -n''​) ​pentru listarea regulilor ''​iptables''​.+
  
-Pentru a verifica blocarea traficului telnet către ''​green''​, rulați pe stația ​''​red'' ​comanda<​code bash> +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''​.
-telnet green +
-</​code>​+
  
-Vă apare un mesaj de forma<​code>​ +Repetați testele ​de mai sus pentru stația ''​green''​.
-Trying 192.168.2.2... +
-telnet: Unable to connect to remote host: Connection refused +
-</​code>​ semnificând faptul că se încearcă realizarea conexiunii dar conexiunea este respinsă+
  
-Pentru a vedea că regula de blocare a funcționat,​ rulați din nou pe stația ''​host''​ comanda<code bash+<note
-# iptables -L FORWARD -v -n +Î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 susnu am folosit ​opțiunea ''​-n'' ​a utilitarului ​''​tcpdump'' ​pentru a identifica mai ușor numele stațiilor implicate ​în conversație.
-Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) +
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +
-    2   120 REJECT ​    ​tcp ​ --  *      *       ​0.0.0.0/​0 ​           192.168.2.2 ​         tcp dpt:23 reject-with icmp-port-unreachable +
-</​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. +
- +
-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> +
-ftp green +
-ssh -l student green +
-</​code>​ +
- +
-Dorim să blocăm și celălalt serviciu necriptat, FTPAdăugați o regulă ''​iptables''​ similară pentru a blocape stația ''​host'',​ traficul FTP destinat stației ''​green''​. De pe stația ''​red''​ verificați blocarea traficului. +
- +
-<note tip> +
-Pentru această regulă puteți transmite argumentul ''​21'' ​opțiunii ''​%%--%%dport'' ​sau chiar numele ​''​ftp''​. Asocierea între port (număr) ​și protocol (nume) se găsește ​în fișierul ''/​etc/​services''​.+
 </​note>​ </​note>​
- 
-<​solution -hidden> 
-<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 
-^C 
- 
-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>​ 
rl/labs/08/contents/02.1384973925.txt.gz · Last modified: 2013/11/20 20:58 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0