This shows you the differences between two versions of the page.
rl:labs:08:contents:10 [2021/12/05 20:10] laurentiu.botezatu [10. [10p] Capturi de trafic] |
rl:labs:08:contents:10 [2024/10/29 14:41] (current) eduard.dumistracel [10. [10p] Tunel SSH invers] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 10. [10p] Capturi de trafic ==== | + | ==== 10. [10p] Tunel SSH invers ==== |
- | Tcpdump este un utilitar din linia de comanda a Linux-ului, care se ocupa de captura | + | Sunt situații în care dorim ca o stație să fie accesibilă din exterior, dar este dificil să obținem un port în gateway (pentru //port forwarding//): fie din rațiuni administrative, fie din motive de securitate. Pentru a permite totuși o conexiune din exterior, se poate crea un tunel SSH invers. Tunel SSH invers înseamnă următorii pași: |
- | si analiza pachetelor de retea la nivel de interfata. Este deseori folosit pentru trobleshooting | + | * se creează o conexiune SSH de la o stație cu adresă IP privată la un server extern cu adresă IP publică, |
- | sau ca tool de securitate. Este versatil, ofera filtre si poate fi folosit intr-o varietate de cazuri. | + | * se deschide un port pe serverul cu adresă IP publică |
- | Fiind un utilitar de linie de comanda, cel mai des se foloseste in sistemele care nu au GUI, pentru a | + | * traficul către acel port este tunelat prin conexiunea SSH către stația cu adresă IP privată |
- | colecta date, care apoi pot fi mutate si vizualizate cu Wireshark[1] | + | |
+ | Dorim să permitem conectarea la stația ''red'' din Internet pe SSH. Vom crea o conexiune SSH "directă" de la stația ''red'' la contul vostru de pe ''fep.grid.pub.ro''. Prin această conexiune veți tunela invers traficul SSH către ''red'' permițând conexiunea din exterior. | ||
- | Printre optiunile de tcpdump, avem: | + | Pentru început, de pe stația ''red'' creăm o conexiune SSH directă către contul de pe ''fep.grid.pub.ro'' (identic cu cel de pe ''cs.curs.pub.ro''): |
- | * -i: interfata pe care sa asculte | + | <code bash> |
- | * -p: portul destinatie: filtrare dupa portul destinatie al pachetelor | + | root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 100XY:localhost:22 |
- | * -v: verbosity level | + | [...] |
- | * -w: fisierul in care se salveaza datele | + | $USERNAME@fep.grid.pub.ro's password: |
+ | Last login: Mon Sep 9 09:55:37 2013 from 141.85.225.214 | ||
+ | [$USERNAME@fep-62-2 ~]$ ss -tln | grep 100XY | ||
+ | tcp 0 0 127.0.0.1:100XY 0.0.0.0:* LISTEN | ||
+ | tcp 0 0 ::1:100XY :::* LISTEN | ||
+ | </code> unde ''$USERNAME'' este numele contului de pe ''fep.grid.pub.ro''/''cs.curs.pub.ro'', iar ''XY'' este un identificator numeric unic al stației din laborator (dacă nu aveți pe monitorul stației din laborator un identificator discutați cu asistentul). Introduceți parola corespunzătoare contului vostru de pe ''fep.grid.pub.ro''/''cs.curs.pub.ro''. | ||
- | Pentru a vedea grafic ce pachete ajung la masina red, trebuie sa capturati traficul generat catre red intr-un fisier si apoi | + | Observăm că se deschide portul ''100XY'' pe ''fep.grid.pub.ro''. Acest port va fi folosit pentru tunelul invers care ne va duce pe stația ''red''. |
- | trebuie copiat fisierul pe masina fizica, pentru a-l analiza cu wireshark. | + | |
- | Pasii care trebuie urmati sunt: | + | Argumentul ''-R 100XY:localhost:22'' transmis comenzii ''ssh'' are următoarea semnificație: |
- | - Porniti tcpdump pentru interfata ''veth-red'' de pe ''host'' cu optiunea de salvare a output-ului intr-un fisier. | + | * ''100XY'' - portul de pe server pe care se vor asculta conexiuni care vor fi tunelate invers; |
- | - Generati trafic catre red de pe oricare dintre celelalte masini. Puteti folosi orice fel de trafic (ex. ping / ssh / telnet) | + | * ''localhost'' - stația către care vor fi trimise pachetele primite prin tunel (chiar stația locală); |
- | - Folositi scp pentru a muta fisierul de output pe masina de host, apoi pe ''fep.grid.pub.ro'' si pe masina locala | + | * ''22'' - portul către care vor fi trimise pachetele primite prin tunel (adică portul SSH local). |
- | - Deschideti fisierul cu Wireshark. | + | |
- | **Ce fel de pachete ati analizat?** | + | După ce alți colegi rulează comenzile similare vă veți putea conecta pe stația ''red'' a acestora folosind portul deschis de ei; discutați cu alți colegi ca să vă spună ce port au deschis. Pentru aceasta, veți folosi stația fizică și vă veți conecta pe contul de pe ''fep.grid.pub.ro''. |
+ | <note important> | ||
+ | Pe ''fep.grid.pub.ro'' rulează un load balancer pentru SSH. Din acest motiv este posibil să intrați pe "celălalt" sistem. Verificați că numele de host din prompt corespunde cu cel pe care l-ați folosit inițial la crearea tunelului: adică ambele să fie ''fep-62-2'' sau ''fep-62-1''. Pentru siguranță folosim și comanda ''ss'':<code bash> | ||
+ | [$USERNAME_COLEG@fep-62-2 ~]$ ss -tln | grep 100ZT | ||
+ | tcp 0 0 127.0.0.1:100ZT 0.0.0.0:* LISTEN | ||
+ | tcp 0 0 ::1:100ZT :::* LISTEN | ||
+ | </code> | ||
+ | În output-ul comenzii de mai sus ''100ZT'' este portul deschis de coleg. | ||
+ | </note> | ||
- | [1] https://www.wireshark.org/ | + | După conectarea colegului la ''fep'', realizăm o conexiune prin tunelul SSH pe portul ''100ZT'' deschis de coleg:<code bash> |
+ | [$USERNAME_COLEG@fep-62-2 ~]$ ssh -l student localhost -p 100ZT | ||
+ | Warning: Permanently added '[localhost]:100ZT' (RSA) to the list of known hosts. | ||
+ | root@localhost's password: | ||
+ | [...] | ||
+ | root@red:~# | ||
+ | </code> | ||
+ | În cadrul conexiunii ni se cere parola utilizatorului ''root'' de pe stația ''red'' (adică parola ''student''). | ||
+ | |||
+ | În final ați accesat stația ''red'' a colegului, o stația cu adresă IP privată inaccesibilă din exterior. Pentru aceasta ați folosit o altă stație (care ar putea fi din altă rețea) pentru a se conecta la ''fep.grid.pub.ro'' și de acolo la ''red'' prin intermediul tunelului invers creat inițial. | ||
+ | |||
+ | Creați un fișier pe stația ''red'' proaspăt accesată, iar colegul poate verifica faptul că, într-adevăr, ați accesat container-ul său prin tunelul SSH invers pe care l-a creat anterior. |