This shows you the differences between two versions of the page.
rl:labs:08:contents:05 [2020/12/01 10:12] iulia.florea |
rl:labs:08:contents:05 [2023/11/05 12:55] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 5. [5p] Trafic criptat și necriptat ==== | + | ==== 05. [10p] Port forwarding ==== |
- | Traficul generat de servicii se clasifică în **trafic criptat** și **trafic în clar**. Traficul **în clar (necriptat)** poate fi interpretat și înțeles dacă este capturat. Traficul criptat nu poate fi interpretat în absența cheii de criptare; doar transmițătorul și receptorul cunosc cheia pentru a putea comunica. | + | La exercițiile de până acum am folosit NAT pentru a permite stațiilor cu adrese private dintr-o rețea locală să acceseze Internetul. NAT poate fi folosit și pentru a permite unei stații din rețeaua locală să fie accesată din Internet, adică să se inițieze conexiuni din Internet. Acest proces poartă numele de //port forwarding//. |
- | Ne propunem să analizăm, din punctul de vedere al criptării traficului, următoarele protocoale/servicii: | + | Dorim să putem accesa prin SSH, din Internet, stația ''red''. Acest lucru nu este posibil în mod implicit întrucât stația ''red'' are adresă IP privată. Soluția este "deschiderea unui port" pe gateway (adică stația ''host'') și redirectarea acestui port (//port forwarding//) către portul aferent serviciului SSH (portul TCP ''22'') de pe stația ''red''. |
- | * telnet (port TCP 23) | + | |
- | * SSH (port TCP 22) | + | |
- | * FTP (port TCP 21) | + | |
- | Vom folosi ''dsniff'', un utilitar cu ajutorul căruia putem captura în clar pachetele care trec printr-un anumit server, pentru a afișa datele transmise (username, parolă, comenzi). Vom folosi topologia de laborator și ne vom conecta de la stația ''red'' la stația ''green'' prin intermediul stației ''host''. | + | Vom aplica pe stația ''host'' o regulă prin care redirectăm traficul ce vine către ''host'' pe portul ''10022'' către portul ''22'' (SSH) al stației ''red'' (adresa IP ''192.168.1.2''):<code bash> |
+ | root@host:~# iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 | ||
+ | </code> | ||
- | Pentru a porni procesul de captură, autentificați-vă ca ''root'' pe stația ''host'' și rulați comanda<code bash> | + | Verificăm aplicarea regulii prin consultarea lanțului ''PREROUTING'' din tabela NAT:<code bash> |
- | root@host:~# dsniff -i veth-green | + | root@host:~# iptables -t nat -L PREROUTING -n -v |
+ | Chain PREROUTING (policy ACCEPT 1 packets, 474 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10022 to:192.168.1.2:22 | ||
</code> | </code> | ||
- | Pentru comunicație prin telnet, rulați pe stația ''red'' comanda<code bash> | + | Pentru a verifica rezultatul de mai sus, de pe ''fep.grid.pub.ro'' deschidem un nou terminal și ne conectăm prin SSH folosind portul ''10022'' la stația ''host'':<code bash> |
- | root@red:~# telnet green | + | mihai.carabas@fep:~$ ssh -l student $ADRESA_IP_MV -p 10022 |
+ | root@192.168.138.129's password: | ||
+ | [...] | ||
+ | root@red:~# | ||
+ | </code> unde ''$ADRESA_IP_MV'' este adresa IP a masinii virtuale obținută din dashboard-ul OpenStack. | ||
+ | <spoiler Pentru rulare masina virtuala VMware local> | ||
+ | Daca rulați VMware local, ''$ADRESA_IP_MV'' este adresa interfeței ''eth0'' a stației ''host''. | ||
+ | </spoiler> | ||
+ | |||
+ | Observăm că în urma autentificării ne găsim pe stația ''red''. //Port forwarding// a funcționat. | ||
+ | |||
+ | Folosim comanda de conectare SSH la stația ''host'' de pe stația ''green'':<code bash> | ||
+ | root@green:~# ssh -l student host -p 10022 | ||
+ | [...] | ||
+ | root@red:~# | ||
</code> | </code> | ||
- | În urma rulării comenzii ați realizat o conexiune telnet de la stația ''red'' la stația ''green'' prin intermediul stației ''host''. La prompt-ul generat de comandă folosiți username-ul ''student'' și parola ''student''; după aceea rulați comanda ''ls'' și apoi comanda ''exit'' pentru a închide conexiunea. Observați pe stația ''host'' captura credențialelor (username și parolă) transmise prin telnet între stațiile ''red'' și ''green'' => traficul telnet între cele două stații a fost **trafic în clar** și a fost capturat pe stația ''host''. | + | |
+ | Observăm că și de pe stația ''green'' am accesat stația ''red'' prin //port forwarding//. Dorim să limităm //port forwarding// doar pentru conexiuni de la stațiile din Internet. Pentru aceasta trebuie să actualizăm regula de //port forwarding//. | ||
+ | |||
+ | Ștergeți regula de //port forwarding// și adăugați o regulă nouă care să permită **doar** stațiilor din Internet să acceseze prin //port forwarding// stația ''red''. | ||
<note tip> | <note tip> | ||
- | ''dsniff'' capturează traficul de rețea și afișează credențialele doar la încheierea conexiunilor. Trebuie folosite comenzi de tipul ''exit'' pentru a închide conexiunea și pentru ca ''dsniff'' să afișeze credențialele. | + | Aplicați regula doar pentru pachetele ce **sosesc** pe interfața ''eth0''. Adică ''eth0'' este interfața de **intrare**. Folosiți opțiunea ''-i'' a ''iptables'' pentru precizarea interfeței de **intrare**. |
</note> | </note> | ||
- | Pentru comunicație prin FTP, rulați pe stația ''red'' comanda<code bash> | + | Realizați apoi din nou conectare SSH pe portul ''10022'' al stației ''host'' de pe ''fep.grid.pub.ro'' și de pe stația ''green''. Dacă ați configurat corect, nu va merge conexiunea SSH de pe stația ''green'' dar va merge în continuare de pe ''fep.grid.pub.ro''. |
- | root@red:~# ftp green | + | |
- | </code> | + | |
- | În urma rulării comenzii ați realizat o conexiune FTP de la stația ''red'' la stația ''green'' prin intermediul stației ''host''. La prompt-ul generat de comandă folosiți username-ul ''student'' și parola ''student''; după aceea rulați comanda ''ls'' și apoi comanda ''quit'' pentru a închide conexiunea. Observați pe stația ''host'' captura credențialelor (username și parolă) transmise prin FTP între stațiile ''red'' și ''green'' => traficul FTP între cele două stații a fost **trafic în clar** și a fost capturat pe stația ''host''. | + | |
- | Pentru comunicație prin SSH, rulați pe stația ''red'' comanda<code bash> | + | <hidden> |
- | root@red:~# ssh -l student green | + | <solution> |
+ | Ștergem vechea regulă și aplicăm regula nouă, ce ține cont de interfața de intrare:<code bash> | ||
+ | root@host:~# iptables -t nat -D PREROUTING -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 | ||
+ | root@host:~# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10022 -j DNAT --to-destination 192.168.1.2:22 | ||
+ | root@host:~# iptables -t nat -L PREROUTING -n -v | ||
+ | Chain PREROUTING (policy ACCEPT 1 packets, 474 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10022 to:192.168.1.2:22 | ||
</code> | </code> | ||
- | În urma rulării comenzii ați realizat o conexiune SSH de la stația ''red'' la stația ''green'' prin intermediul stației ''host''. În sesiunea de shell deschisă la distanță, rulați comanda ''ls'' și apoi comanda ''exit'' pentru a închide conexiunea. Observați că pe stația ''host'' ''dsniff'' nu afișează informații despre credențialele (username și parolă) transmise între stațiile ''red'' și ''green'' => traficul SSH între cele două stații a fost **trafic criptat** și **nu** a putut fi capturat pe stația ''host''. | + | Verificăm conectarea de la ''fep.grid.pub.ro'' și de la stația ''green''. Prima merge în continuare, dar a doua nu mai merge:<code bash> |
+ | mihai.carabas@fep:~$ ssh $ADRESA_IP_VM -p 10022 | ||
+ | root@host.local's password: | ||
+ | [...] | ||
+ | root@red:~# | ||
- | Pe stația ''host'', pentru a opri comanda ''dsniff'' folosiți combinația de taste ''Ctrl+c''. | + | root@green:~# ssh -l student host -p 10022 |
- | + | ssh: connect to host host port 10022: Connection refused | |
- | <note> | + | </code> |
- | Traficul telnet și FTP este trafic necriptat (în clar), în timp ce traficul SSH este trafic criptat. | + | </solution> |
- | </note> | + | </hidden> |