Differences

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

Link to this comparison view

rl:labs:07:contents:06 [2013/11/14 00:21]
razvan.deaconescu
rl:labs:07:contents:06 [2023/11/05 12:44] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 06. [10p] Depanare problemă de configurare adresei IP ====+==== 6. [10p] Blocare servicii necriptate ​==== 
 +<spoiler Prezentare scurtă iptables (dați click)>​ 
 +''​iptables''​ este un utilitar Linux care oferă și rol de firewall software. ''​iptables''​ folosește suportul nucleului pentru a intercepta pachete de rețea în diverse puncte ale trecerii acestora prin nucleu și a efectua acțiuni asupra acestora. Astfel de acțiuni sunt: 
 +  * acceptarea pachetului (''​ACCEPT''​) 
 +  * respingerea pachetului (''​REJECT''​) 
 +  * aruncarea pachetului (''​DROP''​),​ similar cu respingerea dar nu se transmite nici o notificare de respingere către cel care a transmis pachetul inițial
  
-Rulați scriptul ​de pregătire cu argumentul 6:<code bash> +O diagramă a drumului urmat de un pachet de rețea în nucleu este [[https://​commons.wikimedia.org/​wiki/​File:​Diagrama_linux_netfilter_iptables.png|aici]]. 
-# ./rl-lab-07-prepare 6+ 
 +Comanda ''​iptables''​ înseamnă lucrul ​cu reguli de filtrare de la nivelul nucleului. În mod obișnuit se va preciza: 
 +  * tipul de operație pe regulă (adăugare, ștergere, înlocuire, inserare) 
 +  * punctul din nucleul în care trebuie să se găsească pachetul pentru a se aplica regula 
 +  * regula în sine 
 + 
 +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
  
-Scriptul configurează adresa IP ''​7.7.7.1''​ pe interfața ''​veth-red'' ​stației ''​host'' ​și adresa IP ''​7.7.7.2''​ pe interfaț''​eth0''​ a stației ''​red''​. Folosiți comanda:<code bash> +În tabela de filtrare aferentă ''​iptables''​ vom avea, așadar, o 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). 
-ip address show dev INTERFACE+</​spoiler>​ 
 + 
 +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ă 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''​. 
 + 
 +Autentificați-vă prin SSH ca ''​root''​ pe stația ''​host''​. Pentru ​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> 
 +root@host:​~#​ iptables -A FORWARD -d green -p tcp --dport telnet -j REJECT
 </​code>​ </​code>​
-pentru a urmări configurația IP pe interfața ''​INTERFACE''​. 
  
-Folosiți comanda ​''​ping'' ​pentru a testa conectivitatea între cele două adrese IP (''​7.7.7.1''​ și ''​7.7.7.2''​pe cele două stații. Observați ca nu există conectivitate.+Pentru a verifica adăugarea regulii de mai sus, rulați pe stația ​''​host'' ​comanda<​code bash> 
 +root@host:​~#​ iptables -L FORWARD 
 +Chain FORWARD ​(policy ACCEPT) 
 +target ​    prot opt source ​              ​destination ​         
 +REJECT ​    ​tcp ​ --  anywhere ​            ​green ​               tcp dpt:telnet reject-with icmp-port-unreachable 
 +</​code>​
  
-Pentru a depana această problemă, urmărim tabela de rutare ​fiecărei stații:<code bash> +Pentru a afișinformații și despre pachetele prelucrate și interfețele folosite, rulați pe stația ''​host''​ comanda<code bash> 
-TODO+root@host:​~#​ iptables -L FORWARD -v 
 +Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) 
 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         
 +    0     0 REJECT ​    ​tcp ​ --  any    any     ​anywhere ​            ​green ​               tcp dpt:telnet reject-with icmp-port-unreachable
 </​code>​ </​code>​
  
-Observați că rutele sunt rute cu masca ''/​32''​. Asta înseamnă că adresele nu au fost configurate corect: au folosit masca ''/​32''​. Aceasta se întâmplă atunci când nu se precizează masca la configurarea adresei IP folosind suita ''​iproute2''​. Verificați că masca folosită este, într-adevăr, ''​/32'' ​prin afișarea configurației de nivel IP a interfețelor:​<code bash> +Pentru a afișa informații în format numeric (pentru nume de stații șnume de porturi)rulați pe stația ​''​host'' ​comanda<code bash> 
-ip address show dev INTERFACE+root@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>​ </​code>​
-și prin consultarea scriptului folosit ​pentru ​configurare:​<code bash> +De acum înainte recomandăm folosirea acestor opțiuni (''​-v -n''​) ​pentru ​listarea regulilor ''​iptables''​. 
-cat TODO+ 
 +Pentru a verifica blocarea traficului telnet către ''​green'',​ rulați pe stația ''​red''​ comanda<code bash> 
 +telnet green
 </​code>​ </​code>​
  
-<note warning+Vă apare un mesaj de forma<code
-O greșeală relativ frecventă în configurarea adresei IP în Linux este omiterea măștii de rețeaAveți în vedere să nu omiteți masca în momentul în care configurați adrese IP pe interfețe în Linux+Trying 192.168.2.2... 
-</note>+telnet: Unable to connect to remote host: Connection refused 
 +</codesemnificând faptul că se încearcă realizarea conexiunii dar conexiunea este respinsă
  
-<note important+Pentru a vedea că regula de blocare a funcționat,​ rulați din nou pe stația ''​host''​ comanda<code bash
-Listarea tabelei ​de rutare ​unei stații este printre primii pași care trebuie urmați pentru ​depanarea unei probleme de conectivitate.+root@host:​~#​ iptables -L FORWARD -v -n 
 +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 ​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, FTP. Adăugați o regulă ''​iptables''​ similară ​pentru ​a bloca, pe stația ''​host'',​ traficul FTP destinat stației ''​green''​. După adăugarea regulii folosiți ''​iptables -L FORWARD -n -v''​ pentru a valida adăugarea regulii. 
 + 
 +<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>​
  
 +De pe stația ''​red''​ verificați blocarea traficului FTP către stația green folosind comanda<​code bash>
 +ftp green
 +</​code>​
 +
 +<​hidden>​
 +<​solution>​
 +<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>​
 +</​hidden>​
rl/labs/07/contents/06.1384381260.txt.gz · Last modified: 2013/11/14 00:21 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