This shows you the differences between two versions of the page.
rl:labs:08:contents:10 [2020/12/01 16:04] iulia.florea removed |
rl:labs:08:contents:10 [2024/10/29 14:41] (current) eduard.dumistracel [10. [10p] Tunel SSH invers] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 10. [5p] Ștergere reguli adăugate ==== | + | ==== 10. [10p] Tunel SSH invers ==== |
- | Pentru a permite tot traficul către stația ''green'', ștergeți pe stația ''host'' toate regulile ''iptables'' din lanțul ''FORWARD''. Folosiți opțiunea ''-F'' (//flush//) a comenzii ''iptables''. Practic revenim la situația inițială, fără reguli ''iptables'' pe stația ''host''. Folosiți comanda ''iptables -L FORWARD -n -v'' pentru a valida ștergerea regulilor din lanțul ''FORWARD''. | + | 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: |
+ | * se creează o conexiune SSH de la o stație cu adresă IP privată la un server extern cu adresă IP publică, | ||
+ | * se deschide un port pe serverul cu adresă IP publică | ||
+ | * traficul către acel port este tunelat prin conexiunea SSH către stația cu adresă IP privată | ||
- | <solution> | + | 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. |
+ | |||
+ | 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''): | ||
<code bash> | <code bash> | ||
- | root@host:~# iptables -F FORWARD | + | root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 100XY:localhost:22 |
- | root@host:~# iptables -L FORWARD -n -v | + | [...] |
- | Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | + | $USERNAME@fep.grid.pub.ro's password: |
- | pkts bytes target prot opt in out source destination | + | Last login: Mon Sep 9 09:55:37 2013 from 141.85.225.214 |
- | root@host:~# | + | [$USERNAME@fep-62-2 ~]$ ss -tln | grep 100XY |
- | </code> | + | tcp 0 0 127.0.0.1:100XY 0.0.0.0:* LISTEN |
- | </solution> | + | 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''. | ||
- | După ștergerea regulilor verificați funcționarea serviciilor telnet, FTP, SSH prin conectare de la stația ''red'' la stația ''green''. | + | 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''. |
- | <solution> | + | Argumentul ''-R 100XY:localhost:22'' transmis comenzii ''ssh'' are următoarea semnificație: |
- | <code bash> | + | * ''100XY'' - portul de pe server pe care se vor asculta conexiuni care vor fi tunelate invers; |
- | root@red:~# ftp green | + | * ''localhost'' - stația către care vor fi trimise pachetele primite prin tunel (chiar stația locală); |
- | Connected to green. | + | * ''22'' - portul către care vor fi trimise pachetele primite prin tunel (adică portul SSH local). |
- | 220 (vsFTPd 2.3.5) | + | |
- | Name (green:root): ^C | + | |
- | root@red:~# ssh green | + | 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''. |
- | root@green's password: | + | |
- | root@red:~# telnet green | + | <note important> |
- | Trying 192.168.2.2... | + | 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> |
- | Connected to green. | + | [$USERNAME_COLEG@fep-62-2 ~]$ ss -tln | grep 100ZT |
- | Escape character is '^]'. | + | tcp 0 0 127.0.0.1:100ZT 0.0.0.0:* LISTEN |
- | Ubuntu 12.04.3 LTS | + | tcp 0 0 ::1:100ZT :::* LISTEN |
- | green login: ^CConnection closed by foreign host. | + | |
</code> | </code> | ||
- | </solution> | + | În output-ul comenzii de mai sus ''100ZT'' este portul deschis de coleg. |
+ | </note> | ||
+ | |||
+ | 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. |