Differences

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

Link to this comparison view

rl:labs:08:contents:08 [2020/12/01 10:12]
iulia.florea created
rl:labs:08:contents:08 [2023/11/05 12:56] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 6. [5pBlocare servicii necriptate ​====+==== 08. [10pPort forwarding pentru telnet ​====
  
-După cum ați observat la punctul anterior, traficul ​pentru ​protocoalele telnet și FTP este trafic în clarnecriptat, putându-se afla cu ușurință credențialele unui anumit cont și comenzile rulate.+În cadrul exercițiilor anterioare am activat //port forwarding// ​pentru ​serviciul SSH. Dorim ca stațiile ''​red''​''​green'' ​și ''​blue''​ să fie accesibile ​și prin ''​telnet''​ din Internet astfel: 
 +   * ''​red''​ să poată fi accesat folosind portul 10023 
 +   * ''​green''​ să poată fi accesat folosind portul 20023 
 +   * ''​blue''​ să poată fi accesat folosind portul 30023
  
-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''​.+Realizați configurațiile necesare pentru a permite //port forwarding// ​pentru ''​telnet'' ​așa cum este descris mai sus.
  
-<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 a intercepta pachete de rețea în diverse puncte ale trecerii acestora prin nucleu șa efectua acțiuni asupra acestora. Astfel ​de acțiuni sunt+Serviciul ​''​telnet'' ​ascultă în mod implicit conexiuni pe portul ​''​23''​. Puteți observa acest lucru cu ajutorul uneia dintre comenzile ​de mai jos:<​code>​ 
-  * acceptarea pachetului (''​ACCEPT''​) +user@host:​~$ grep -w 'telnet' ​/​etc/​services 
-  * respingerea pachetului (''​REJECT''​) +telnet 23/​tcp 
-  * aruncarea pachetului (''​DROP''​),​ similar cu respingerea dar nu se transmite nici o notificare de respingere către cel care a transmis pachetul inițial+tfido 60177/​tcp #​ fidonet EMSI over telnet
  
-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]]. +user@host:~$ getent services telnet 
- +telnet ​               23/tcp
-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); +</note>
-  * ''​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ț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)+<​note>​ 
-</spoiler>+Exercițiul este academicNu este indicată folosirea ​''​telnet'' ​cu atât mai puțin //port forwarding//​ peste ''​telnet'' ​din rațiuni ​de securitate
 +</note>
  
-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> +Testați de pe ''​fep.grid.pub.ro'' ​folosind ​comanda ''​telnet''​:<code bash> 
-root@host:~# iptables ​-A FORWARD ​-d green -p tcp --dport telnet -j REJECT+mihai.carabas@fep:~# telnet <adresa-ip-vm> <port-redirectat>​
 </​code>​ </​code>​
  
-Pentru ​verifica adăugarea regulii ​de mai sus, rulați ​pe stația ''​host'' ​comanda<​code bash> +unde ''<​adresa-ip-vm>''​ este adresa IP mașinii virtuale vizibilă de pe fep iar ''<​port-redirectat>''​ este portul care face redirectarea ​pe stația ''​host''​ (''​10023''​ sau ''​20023''​ sau ''​30023''​).
-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 afișa informații și despre pachetele prelucrate și interfețele folosite, rulați pe stația ''​host''​ comanda<code bash+<note important
-root@host:​~#​ iptables -L FORWARD -v +Există o latență de circa 10-15 secunde din momentul conectării până la apariția promptului ​''​telnet''​. ​Așteptați să apară promptul ​și apoi autentificați-vă ​cu username ​''​student''​ și parolă ''​student'' ​pentru a valida conectivitatea.
-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>​ +
- +
-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> +
-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>​ +
-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> +
-telnet ​green +
-</​code>​ +
- +
-Vă apare un mesaj de forma<​code>​ +
-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> +
-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 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ăș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>​ <​hidden>​
 <​solution>​ <​solution>​
-<code bash> +Adăugăm cele trei noi reguli pentru redirectarea ''​telnet''​ și validăm adăugarea lor:<code bash> 
-root@host:​~#​ iptables -A FORWARD ​-d green -p tcp --dport ​ftp -j DROP +root@host:​~#​ iptables ​-t nat -A PREROUTING ​-i eth0 -p tcp --dport ​10023 -j DNAT --to-destination 192.168.1.2:​23 
-root@host:​~#​ iptables -L FORWARD ​-n -+root@host:​~#​ iptables ​-t nat -A PREROUTING -i eth0 -p tcp --dport 20023 -j DNAT --to-destination 192.168.2.2:​23 
-Chain FORWARD ​(policy ACCEPT ​94 packets, ​10307 bytes)+root@host:​~#​ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 30023 -j DNAT --to-destination 192.168.3.2:​23 
 +root@host:​~#​ iptables -t nat -L PREROUTING ​-n -vChain PREROUTING ​(policy ACCEPT ​packets, ​bytes)
  pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​          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 ​DNAT       tcp  --  ​eth0         0.0.0.0/​0 ​           0.0.0.0/​0 ​           tcp dpt:10022 to:​192.168.1.2:​22 
-    0     ​0 ​DROP       tcp  --  ​*      ​*       ​0.0.0.0/​0 ​           192.168.2.2 ​         tcp dpt:21+    3   180 DNAT       ​tcp ​ --  eth0   *       ​0.0.0.0/​0 ​           ​0.0.0.0/​0 ​           tcp dpt:20022 to:192.168.2.2:22 
 +    8   480 DNAT       ​tcp ​ --  eth0   ​* ​      ​0.0.0.0/​0 ​           0.0.0.0/​0 ​           ​tcp dpt:30022 to:​192.168.3.2:​22 
 +    0     0 DNAT       ​tcp ​ --  eth0   ​* ​      ​0.0.0.0/​0 ​           0.0.0.0/​0 ​           tcp dpt:10023 to:​192.168.1.2:23 
 +    0     ​0 ​DNAT       tcp  --  ​eth0   *       ​0.0.0.0/​0 ​           ​0.0.0.0/​0 ​           tcp dpt:20023 to:192.168.2.2:23 
 +    0     0 DNAT       ​tcp ​ --  eth0   ​* ​      ​0.0.0.0/​0 ​           0.0.0.0/​0 ​           ​tcp dpt:30023 to:​192.168.3.2:​23 
 +</​code>​
  
-root@red:~# ftp green +Testăm aplicarea celor trei reguli prin folosirea comenzii ''​telnet''​ pe stația fizică către porturile respectiv ''​10023'',​ ''​20023'',​ ''​30023'':<​code bash> 
-^C+razvan@einherjar:~$ telnet $ADRESA_IP_VM 10023 
 +[...] 
 +red login: student 
 +Password:  
 +[...] 
 +student@red:​~$
  
-root@host:~# iptables -L FORWARD -n -v +razvan@einherjar:~$ telnet $ADRESA_IP_VM 20023 
-Chain FORWARD (policy ACCEPT 94 packets, 10307 bytes) +[...
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +green login: student 
-    2   120 DROP       ​tcp ​ --  *      *       0.0.0.0/0            192.168.2.2          tcp dpt:23 +Password:  
-    ​2 ​  120 DROP       ​tcp ​ --  *      *       0.0.0.0/0            192.168.2.2          tcp dpt:21+[...
 +student@green:~$ 
 + 
 +razvan@einherjar:​~$ telnet $ADRESA_IP_VM 30023 
 +[...
 +blue login: student 
 +Password:  
 +[...
 +student@blue:~$
 </​code>​ </​code>​
 </​solution>​ </​solution>​
 </​hidden>​ </​hidden>​
 +
rl/labs/08/contents/08.1606810359.txt.gz · Last modified: 2020/12/01 10:12 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