Differences

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

Link to this comparison view

rl:labs:09:contents:01 [2013/11/24 23:18]
razvan.deaconescu [01. Configurarea translatării de adrese (MASQUERADE)]
rl:labs:09:contents:01 [2023/11/05 13:05] (current)
vlad_iulius.nastase
Line 1: Line 1:
-==== 01. Configurarea translatării de adrese (MASQUERADE) ​====+==== 01. [15p] Observare 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 Intern 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ă a ''​iptables''​),​ pentru configurarea firewall-ului vom folosi tabela ''​nat''​. +Pentru a 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 de **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''​. Motivul este reprezentat ​de faptul că nu avem activată rutarea ​pe stația ''​host''​. Pentru a activa rutarea ​pe stația ''​host'' ​rulăm comanda<​code bash> +Pe stația ''​host''​, realizați pașii ​de mai sus pentru UDP: 
-root@host:​~#​ sysctl -w net.ipv4.ip_forward=1 +  * creați un server care ascultă pachete UDP pe portul 2024; 
-net.ipv4.ip_forward = 1 +  * listați serviciile care ascultă pachete UDP pe stația ''​host''​; 
-</​code>​+  * porniți un client UDP și comunicați cu serverul de mai sus.
  
-Intrăm din nou pe stația ''​red''​ și folosim ​''​ping''​ pentru a testa conectivitatea la adresa IP ''​8.8.8.8''​:<code bash> +<note tip> 
-TODO+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''​
 + 
 +La fel, pentru 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''​. 
 +</​note>​ 
 + 
 +<​hidden>​ 
 +<​solution>​ 
 +Pornim serverul:<​code bash> 
 +root@host:​~#​ netcat -u -l 2024 
 +</​code>​ 
 +Afișăm sockeții UDP de la nivelul sistemului:<​code bash> 
 +root@host:​~#​ netstat -ulpn 
 +Proto Recv-Q Send-Q Local Address ​          ​Foreign Address ​        ​State ​      ​PID/​Program name 
 +[...] 
 +udp        0      0 0.0.0.0:​2024 ​           0.0.0.0:​* ​                          ​6088/​netcat ​     
 +[...] 
 +</​code>​ 
 +Pornim un client UDP și comunicăm cu serverul creat anterior:<code bash> 
 +root@host:​~#​ netcat -u localhost 2024
 </​code>​ </​code>​
 +</​solution>​
 +</​hidden>​
rl/labs/09/contents/01.1385327889.txt.gz · Last modified: 2013/11/24 23:18 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