Differences

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

Link to this comparison view

rl:labs:09:contents:01 [2019/11/25 04:02]
octavian.grigorescu
rl:labs:09:contents:01 [2023/11/05 13:05] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 01. [10pConfigurare translatare de adrese (MASQUERADE) ​====+==== 01. [15pObservare porturi deschise pe o stație ​====
  
-Epuizarea adreselor IPv4 în cadrul rețelelor curente a condus la folosirea de adrese IP din clase private (de ex. ''​192.168.0.0/​24''​)Pe lângă comunicația dintre stațiile unei rețeledorim și accesul la Internet al acestora. De aceea s-a introdus conceptul ​de translatare de adrese (NAT: //Network Address Translation//​) prin care mai multe stații dispun de acces la Internet folosind aceeași adresă IP rutabilă: adresa gateway-ului. Activarea translatării de adrese (NAT) pe gateway conduce la înlocuirea perechii <adresă IP sursă, port sursă> (aparținând stației) cu perechea <adresa IP gateway, port disponibil>​.+Utilitarul ​''​netcat'' ​este folosit pentru a crea conexiuni server-clientAcesta poate îndeplini atât rolul de servercât și de client.
  
-Configurarea NAT pe Linux se realizează tot prin intermediul comenzii ''​iptables'',​ la fel ca în cazul configurării firewall-ului. Dacă pentru configurarea firewall-ului foloseam tabela ''​filter''​ (tabela implicită ​''​iptables''​),​ pentru configurarea translatării de adrese vom folosi tabela ​''​nat''​+Pentru ​crea un server care ascultă conexiuni pe portul TCP ''​2024'' ​rulăm comanda<​code bash> 
- +root@host:​~# ​netcat ​-l 2024
-Astfel, pentru a activa NAT pe un server Linux executăm comanda<​code bash> +
-root@host:​~# ​iptables -t nat -A POSTROUTING ​-j MASQUERADE+
 </​code>​ </​code>​
-În comanda de mai sus: 
-  * ''​-t''​ specifică tabela pe care se aplică regula, în cazul nostru tabela ''​nat''​. 
-  * ''​-A''​ înseamnă adăugarea unei reguli la sfârșitul listei de reguli. 
-  * ''​POSTROUTING''​ se referă la momentul când va fi realizat procesul de translatare de adrese: după rutare. 
-    * În nomenclatura ''​iptables''​ acesta se numește și **lanț (chain)**. 
-    * Exemple de alte lanțuri: ''​INPUT'',​ ''​OUTPUT'',​ ''​FORWARD'',​ ''​PREROUTING''​. 
-  * ''​-j''​ este acțiunea ce va fi luată, iar în acest caz este ''​MASQUERADE''​ (acțiune simplă de translatare de adrese). 
  
-Pentru a verifica ​și valida regula, afișăm intrările din lanțul ''​POSTROUTING'' ​din tabela ​''​nat'' ​folosind ​comanda<​code bash> +Parametrul ''​-l''​ înseamnă că ''​netcat''​ este în modul //listen// (//​server//​),​ iar ''​2024''​ este portul pe care ascultă: ''​netcat''​ va crea un socket de tip server ​și va aștepta conexiuni pe portul ''​2024''​. Terminalul va rămâne în așteptare, pentru ca un client să se conecteze serverul deschis cu ''​netcat''​. **NU** închideți terminalul. 
-root@host:​~# ​iptables ​-t nat -L POSTROUTING -n -v + 
-Chain POSTROUTING ​(policy ACCEPT 0 packets, 0 bytes+Dorim să verificăm faptul că pe stația ''​host'' ​un serviciu ascultă pe portul ​''​2024''​. Deschidem un nou terminal către stația ''​host''​ și rulăm ​comanda<​code bash> 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination +root@host:​~# ​netstat ​-tlnp 
-    0     0 MASQUERADE ​ all  ​--  ​* ​     *       0.0.0.0/0            ​0.0.0.0/​0+Active Internet connections ​(only servers
 +Proto Recv-Q Send-Q Local Address ​          ​Foreign Address ​        ​State ​      ​PID/Program name 
 +[...] 
 +tcp        0      0 0.0.0.0:2024            ​0.0.0.0:*               ​LISTEN ​     4958/netcat 
 +[...]
 </​code>​ </​code>​
  
-Vrem să verificăm configurarea corectă a NAT. Pentru acesta vom trimite de pe stația ''​red'' ​un pachet către ''​8.8.8.8''​. ​Pachetul va trece prin gateway (adică stația ''​host''​) și va fi translatat. Pe stația ''​red'' ​rulăm comanda<​code bash> +Comanda ''​netstat''​ afișează serviciile TCP care așteaptă conexiuni ​pe stația ​locală. Observăm că programul ​''​netcat'' ​ascultă pe portul ​''​2024''​. ​Opțiunile comenzii ​''​netstat'' ​sunt: 
-root@red:~# ping -c 2 8.8.8.8 +  * ''​t''​ - afișează conexiuni TCP 
-PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. +  * ''​l''​ - afișează serviciile care **așteaptă** (//listen//conexiuni 
-From 192.168.1.2 icmp_seq=1 Destination Host Unreachable +  * ''​n''​ - dezactivează rezolvare de nume pentru adrese IP și porturi; de obicei dezactivăm rezolvarea numelor pentru a elimina latența procesului de rezolvare;​ 
-From 192.168.1.2 icmp_seq=2 Destination Host Unreachable+  * ''​p'' ​- afișează numele și PID-ul procesului de tip serviciu de rețea care așteaptă conexiuni pe portul dat
 +În afișare construcția ''​0.0.0.0:​2024''​ din coloana ''​Local Address''​ înseamnă că serviciul ascultă conexiuni pe toate adresele IP/​interfețele disponibile sistemului pe portul ''​2024''​.
  
---- 8.8.8.8 ping statistics --- +În terminalul nou deschis către stația ''​host''​ conectați-vă la serviciul prospăt creatFolosiți pentru aceasta tot comanda ''​netcat''​ în modul client:<​code bash> 
-2 packets transmitted,​ 0 received, +2 errors, 100% packet loss, time 999ms+root@host:​~#​ netcat localhost 2024
 </​code>​ </​code>​
 +Comanda a creat un socket de tip client și s-a conectat la serviciul de mai sus (conexiune TCP pe portul ''​2024''​). În continuare comanda așteaptă intrare de la utilizator. Mesajele pe care le scriem vor fi transmise serverului care le va afișa la ieșirea standard. Scrieți câteva linii și observați afișarea acestora pe partea serverului. Închideți folosind combinația de taste ''​Ctrl+d''​. Se închide și serverul.
  
-Observăm că nu există conectivitate de la stația ''​red'' ​către adresa IP ''​8.8.8.8''​. Consultăm întreaga tabelă ''​nat''​:<code bash> +Pe stația ''​host''​, realizați pașii de mai sus pentru UDP: 
-root@host:​~#​ iptables -t nat -L -n -v +  * creați un server care ascultă pachete UDP pe portul 2024; 
-Chain PREROUTING (policy ACCEPT 2 packets, 168 bytes) +  * listați serviciile care ascultă pachete UDP pe stația ​''​host''​; 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​        +  * porniți un client UDP și comunicați cu serverul de mai sus.
  
-Chain INPUT (policy ACCEPT 0 packets, 0 bytes) +<note tip> 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​        +Pentru a afla ce opțiune trebuie transmisă comenzii ''​netcat''​ pentru a porni un server sau client UDP, consultați pagina de manual a comenzii și căutați șirul ''​UDP''​.
  
-Chain OUTPUT (policy ACCEPT 0 packets0 bytes) +La felpentru a afla ce opțiune trebuie transmisă comenzii ''​netstat''​ pentru a afișa sockeții UDP, consultați pagina de manual a comenzii și căutați șirul ''​udp''​. 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​        +</​note>​
  
-Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) +<​hidden>​ 
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +<​solution>​ 
-    ​0 ​    0 MASQUERADE ​ all  ​--  ​* ​     *       ​0.0.0.0/​0 ​           0.0.0.0/​0 ​+Pornim serverul:<​code bash> 
 +root@host:​~#​ netcat ​--l 2024
 </​code>​ </​code>​
-Observăm că pachetele ajung în lanțul ''​PREROUTING''​ (înainte ​de rutare), dar nu ajung în lanțul ''​POSTROUTING''​ (după rutare). Ne gândim că este posibil să fie o problemă cu rutarea pe gateway. Verificăm dacă rutarea este activată:<code bash> +Afișăm sockeții UDP de la nivelul sistemului:<code bash> 
-root@host:​~# ​sysctl net.ipv4.ip_forward +root@host:​~# ​netstat ​-ulpn 
-net.ipv4.ip_forward = 0 +Proto Recv-Q Send-Q Local Address ​          ​Foreign Address ​        ​State ​      PID/Program name 
-</​code>​ +[...] 
- +udp        0      0 0.0.0.0:2024            0.0.0.0:*                           ​6088/​netcat ​     
-Într-adevăr, rutarea nu este activată. Pentru a activa rutarea pe stația ''​host''​ rulăm comanda<​code bash> +[...]
-root@host:​~#​ sysctl ​-w net.ipv4.ip_forward=1 +
-net.ipv4.ip_forward = 1 +
-</code> +
- +
-Intrăm din nou pe stația ''​red''​ și folosim ''​ping''​ pentru a testa conectivitatea la adresa IP ''​8.8.8.8'':<​code bash> +
-root@red:~# ping -c 2 8.8.8.+
-PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. +
-64 bytes from 8.8.8.8icmp_req=1 ttl=61 time=92.9 ms +
-64 bytes from 8.8.8.8icmp_req=2 ttl=61 time=81.2 ms +
- +
---- 8.8.8.8 ping statistics --- +
-2 packets transmitted,​ 2 received, 0% packet loss, time 1001ms +
-rtt min/​avg/​max/​mdev = 81.272/​87.094/​92.917/​5.829 ms+
 </​code>​ </​code>​
-Acum există conectivitate,​ lucru certificat ​și de prezența unor pachete în lista prelucrată pe lanțul ''​POSTROUTING''​:<code bash> +Pornim un client UDP și comunicăm cu serverul creat anterior:<code bash> 
-root@host:​~# ​iptables -t nat -L POSTROUTING -n -v +root@host:​~# ​netcat ​-u localhost 2024
-Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) +
- pkts bytes target ​    prot opt in     ​out ​    ​source ​              ​destination ​         +
-    2   168 MASQUERADE ​ all  - ​* ​     *       ​0.0.0.0/​0 ​           0.0.0.0/0+
 </​code>​ </​code>​
 +</​solution>​
 +</​hidden>​
rl/labs/09/contents/01.1574647377.txt.gz · Last modified: 2019/11/25 04:02 by octavian.grigorescu
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