This shows you the differences between two versions of the page.
rl:labs:08:contents:09 [2020/09/13 07:05] iulia.florea |
rl:labs:08:contents:09 [2023/11/05 12:57] (current) vlad_iulius.nastase |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 9. [5p] Trafic criptat și necriptat ==== | + | ==== 09. [10p] Configurare persistentă rutare și NAT ==== |
- | 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. | + | Configurările realizate până în acest moment sunt temporare. La repornirea stației ''host'' regulile de NAT se pierd. Dorim să configurăm în mod persistent rutarea și regulile NAT. |
- | Ne propunem să analizăm, din punctul de vedere al criptării traficului, următoarele protocoale/servicii: | + | Pentru a configura în mod persistent rutarea pe stația ''host'', edităm fișierul ''/etc/sysctl.conf'' și decomentăm linia<code> |
- | * telnet (port TCP 23) | + | net.ipv4.ip_forward=1 |
- | * SSH (port TCP 22) | + | </code> Astfel la fiecarea pornire a sistemului, rutarea va fi activată. |
- | * 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''. | + | <note important> |
+ | Rutarea nu se va activa în mod automat după ce decomentați linia din fișier. Trebuie să resetați sistemul sau să rulați comanda<code bash> | ||
+ | sysctl -p | ||
+ | </code> pentru a aplica modificările din fișierul de configurare ''/etc/sysctl.conf''. | ||
+ | </note> | ||
- | Pentru a porni procesul de captură, autentificați-vă ca ''root'' pe stația ''host'' și rulați comanda<code bash> | + | Pentru a salva toate regulile ''iptables'' introduse în sistem se poate folosi comanda ''iptables-save''. În mod implicit aceste reguli sunt afișate pe consolă. Noi le vom salva în ''/etc/iptables-rules'' folosind comanda:<code bash> |
- | root@host:~# dsniff -i veth-green | + | root@host:~# iptables-save > /etc/iptables-rules |
</code> | </code> | ||
- | Pentru comunicație prin telnet, rulați pe stația ''red'' comanda<code bash> | + | Regulile pot fi restaurate folosind comanda ''iptables-restore < /etc/iptables-rules''. Așadar trebuie să configurăm sistemul să execute această comanda la pornire. Modul cel mai uzual pentru a face acest lucru este adăugarea acestei comenzi în fișierul de configurare al interfeței:<code bash> |
- | root@red:~# telnet green | + | root@host:~# cat /etc/network/interfaces |
+ | [...] | ||
+ | # The primary network interface | ||
+ | auto eth0 | ||
+ | iface eth0 inet dhcp | ||
+ | up iptables-restore < /etc/iptables-rules | ||
</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''. | ||
- | <note tip> | + | După ce ați făcut toate configurările, reporniți stația ''host'': |
- | ''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. | + | |
- | </note> | + | |
- | Pentru comunicație prin FTP, rulați pe stația ''red'' comanda<code bash> | ||
- | 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> | + | <code bash> |
- | root@red:~# ssh -l student green | + | Dashboard -> Drop Down in dreptul masinii virtuale -> Soft Reboot Instance |
</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''. | ||
- | Pe stația ''host'', pentru a opri comanda ''dsniff'' folosiți combinația de taste ''Ctrl+c''. | ||
- | <note> | + | În urma repornirii stației ''host'', va trebui sa rerulam scripturile de pregatire a infrastructurii pentru a recrea containerele. Vom vedea aplicată rutarea și regulile de NAT: (in cazul in care rutarea nu este activata, inseamna ca a fost suprascrisa de catre scripturile de pregatire a infrastructurii si va trebui s-o activati din nou)<code bash> |
- | Traficul telnet și FTP este trafic necriptat (în clar), în timp ce traficul SSH este trafic criptat. | + | root@host:~# sysctl net.ipv4.ip_forward |
- | </note> | + | net.ipv4.ip_forward = 1 |
+ | root@host:~# iptables -t nat -L -n -v | ||
+ | Chain PREROUTING (policy ACCEPT 30 packets, 5694 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 | ||
+ | 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20022 to:192.168.2.2:22 | ||
+ | 0 0 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 | ||
+ | |||
+ | Chain INPUT (policy ACCEPT 2 packets, 534 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT 16 packets, 958 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | |||
+ | Chain POSTROUTING (policy ACCEPT 15 packets, 918 bytes) | ||
+ | pkts bytes target prot opt in out source destination | ||
+ | 1 40 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 | ||
+ | </code> |