Differences

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

Link to this comparison view

rl:labs:08:contents:04 [2020/12/01 10:56]
iulia.florea
rl:labs:08:contents:04 [2023/11/05 12:54] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 4. [5pBlocare completă a traficului ​====+==== 04. [10pConfigurare incorectă a translatării ​====
  
-<spoiler Prezentare scurtă iptables (dați click)>​ +Comanda folosită mai sus pentru ​translatare,​ la [[:rl:​labs:​09:​contents:​01]]are neajunsuri pe care le vom identifica mai jos.
-''​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+
  
-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]]. 
  
-Comanda ​''​iptables'' ​înseamnă lucrul cu reguli de filtrare de la nivelul nucleului. În mod obișnuit se va preciza: +Pe stația ​''​green'' ​capturăm traficul ​pe interfaț''​green-eth0''​ folosind ​comanda ​''​tcpdump''​:<code bash> 
-  * tipul de operație ​pe regulă (adăugare, ștergere, înlocuire, inserare) +root@green:​~#​ tcpdump ​-green-eth0 
-  * punctul din nucleul în care trebuie să se găsească pachetul pentru ​se aplica regula +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
-  * regula în sine +listening on green-eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
- +
-De exemplu, ​comanda ​de mai jos are semnificația descrisă în continuare:<code bash> +
-iptables -A FORWARD ​-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 avea, așadar, o listă de reguli care sunt parcurse secvențial. Partea ​''​-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). +Pe stația ''​red'' ​executăm comanda ​''​ping''​ către stația ''​green''​:<code bash>
-</​spoiler>​ +
- +
-Pentru început verificați ​că stația ''​red'' ​poate accesa alte stații din rețea. Rulați comanda<code bash>+
 root@red:~# ping -c 2 green root@red:~# ping -c 2 green
 PING green (192.168.2.2) 56(84) bytes of data. 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.076 ms +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.067 ms+64 bytes from green (192.168.2.2):​ icmp_req=2 ttl=63 time=0.086 ms 
 +[...] 
 +</​code>​
  
---- green ping statistics --+În acest moment, pe stația ''​green''​ avem captura pachetelor în output-ul comenzii ''​tcpdump'':<​code>​ 
-2 packets transmitted2 received0% packet losstime 999ms +11:​18:​54.535064 IP host > green: ICMP echo requestid 633seq 17length 64 
-rtt min/​avg/​max/​mdev = 0.067/​0.071/​0.076/​0.009 ms+11:18:54.535092 IP green > host: ICMP echo reply, id 633, seq 17, length 64
 </​code>​ </​code>​
  
-Asocierile între porturi și protocoale (''​21'' ​și FTP, ''​22'' ​și SSH, ''​23'' ​și telnet) sunt cele implicite. Acest lucru nu împiedică însă un administrator să configureze un serviciu ​să asculte pe un port diferit ​de cel implicitPentru a preveni transferul de fișiere și conectare de la distanță pe stația ''​red''​ vom bloca accesul la toate porturile. Pentru aceasta vom configura ​stația ''​host''​ pentru ​a bloca **întreg** traficul ​de la stația ''​red''​. ​+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 translatareAstfel ​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ț''​eth0''​. Vom șterge vechea regulă de NAT și vom adăuga o regulă corectă.
  
-<code bash> +Pentru ștergerea vechii reguli de NAT rulăm pe stația ''​host''​ comanda<code bash> 
-root@host:​~#​ iptables -A FORWARD ​-s red -j REJECT +root@host:​~#​ iptables -t nat -D POSTROUTING ​-j MASQUERADE 
-root@host:​~#​ iptables -L FORWARD ​-n -v +</​code>​ 
-Chain FORWARD ​(policy ACCEPT ​packets, ​bytes) +Verificăm faptul că nu mai există comanda<​code bash> 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +root@host:​~#​ iptables ​-t nat -L POSTROUTING ​-n -v 
-    0     0 REJECT ​    ​all ​ --  *      *       ​192.168.1.2 ​         0.0.0.0/​0 ​           reject-with icmp-port-unreachable+Chain POSTROUTING ​(policy ACCEPT ​packets, ​328 bytes) 
 + pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination
 </​code>​ </​code>​
-Comanda blochează întreg traficul **de la** stația ''​red''​ (opțiunea ''​-s''​) pe care stația ''​host''​ l-ar fi rutat (lanțul ''​FORWARD''​). 
  
-Verificați că stația ''​red'' ​nu poate accesa alte stații. Rulați comenzile<code bash> +Adăugăm din nou regula de NAT, dar de data aceasta vom specifica să aplice politica de NAT pachetelor ce ies prin interfaț''​eth0'' ​stației ''​host'':<​code bash> 
-root@red:~# ping -c 2 green +root@host:​~#​ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
-PING green (192.168.2.2) 56(84) bytes of data. +</​code>​ 
-From host (192.168.1.1) icmp_seq=1 Destination Port Unreachable +Verificați că regula a fost inserată:<code bash> 
-From host (192.168.1.1) icmp_seq=2 Destination Port Unreachable+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 
 +</​code>​ 
 +Observăm prezența interfaței ''​eth0''​ în coloana ''​out''​. Înainte apărea caracterul ''​*'',​ adică orice interfață.
  
---- green ping statistics --- +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.
-2 packets transmitted,​ 0 received, +2 errors, 100% packet loss, time 999ms +
- +
-root@red:~# telnet green +
-Trying 192.168.2.2... +
-telnet: Unable to connect to remote host: Connection refused +
- +
-root@red:~# ftp green +
-ftp: connect: Connection refused +
-ftp> exit +
- +
-root@red:~# ssh -l student green +
-ssh: connect to host green port 22: Connection refused +
-</​code>​ +
-Observați că nu mai sosesc pachete ​de răspuns (sunt respinse de stația ​''​host''​), deci traficul de la stația ​''​red'' ​este blocat.+
rl/labs/08/contents/04.1606812996.txt.gz · Last modified: 2020/12/01 10:56 by iulia.florea
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