This shows you the differences between two versions of the page.
rl:labs:09:contents:10 [2013/12/01 20:24] razvan.deaconescu [10. [10p] Tunel SSH invers] |
rl:labs:09:contents:10 [2024/12/04 17:52] (current) laura.ruse [10. [15p] Trimitere e-mail cu adresă personalizată din linia de comandă] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 10. [10p] Tunel SSH invers ==== | + | ==== 10. [15p] Trimitere e-mail cu adresă personalizată din linia de comandă ==== |
- | 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: | + | La exercițiul anterior, mesajul primit apare ca sosind de la ''bogdan@host''. Nu este foarte elegant și am vrea să schimbăm adresa expeditorului. |
- | * 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ă | + | |
- | 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 a specifica adresa expeditorului vom folosi comanda ''mail'' disponibilă în pachetul ''s-nail'' care permite această opțiune. Este posibil ca pachetul ''s-nail'' să fie deja instalat pe ''host''. Dacă nu este instalat, atunci puteți folosi următoarea comandă pentru a-l instala: |
- | + | <code bash> | |
- | 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.r'':<code bash> | + | root@host:~# apt-get install s-nail |
- | root@red:~# ssh -l $USERNAME fep.grid.pub.ro -R 100XY:localhost:22 | + | Reading package lists... Done |
+ | Building dependency tree | ||
[...] | [...] | ||
- | $USERNAME@fep.grid.pub.ro's password: | + | </code> |
- | Last login: Mon Sep 9 09:55:37 2013 from 141.85.225.214 | + | Odată ce pachetul ''s-nail'' a fost instalat, comanda ''mail'' este furnizată de acest pachet în mod implicit. |
- | [$USERNAME@fep-62-2 ~]$ netstat -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''. | + | |
- | 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''. | + | Trimiteți un mesaj la adresa voastră de e-mail astfel încât expeditorul mesajului să fie ''bogdan.georgescu@rl.cs.pub.ro''. |
- | Argumentul ''-R 100XY:localhost:22'' transmis comenzii ''ssh'' are următoarea semnificație: | + | <note tip> |
- | * ''100XY'' - portul de pe server pe care se vor asculta conexiuni care vor fi tunelate invers; | + | Comanda ''mail'' din pachetul ''s-nail'' are opțiunea ''-r'' cu ajutorul căreia puteți preciza adresa de e-mail sursă care să fie folosită pentru trimiterea e-mail-ului. |
- | * ''localhost'' - stația către care vor fi trimise pachetele primite prin tunel (chiar stația locală); | + | </note> |
- | * ''22'' - portul către care vor fi trimise pachetele primite prin tunel (adică portul SSH local). | + | |
- | 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țiu folosi stația fizică și vă veți conecta conecta pe contul de pe ''fep.grid.pub.ro''. | + | <note tip>Puteți folosi un serviciu precum [[https://temp-mail.org/|Temp Mail]] pentru obținerea unei adrese de mail temporare pe care puteți testa trimiterea de mail-uri în cadrul laboratorului.</note> |
- | <note important> | + | <note> |
- | 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 ''netstat'':<code bash> | + | În forma sa simplă, protocolul SMTP nu face verificarea adresei sursă a utilizatorului. Dacă utilizatorul se conectează la //Mail Transfer Agent// de pe o stație considerată sigură (de exemplu chiar de pe stația locală -- //localhost//), atunci acesta poate folosi orice adresă. Pentru autentificare se folosește SMTP cu suport [[http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer|SASL]], care obligă autentificarea utilizatorului înainte de a folosi serviciul SMTP. |
- | [$USERNAME_COLEG@fep-62-2 ~]$ netstat -tln | grep 100ZT | + | |
- | tcp 0 0 127.0.0.1:100ZT 0.0.0.0:* LISTEN | + | Detalii despre fenomen și prevenirea //e-mail forging/spoofing// găsiți [[http://www.cert.org/tech_tips/email_spoofing.html|aici]]. |
- | tcp 0 0 ::1:100ZT :::* LISTEN | + | |
- | </code> | + | |
- | În output-ul comenzii de mai sus ''100ZT'' este portul deschis de coleg. | + | |
</note> | </note> | ||
- | După conectarea colegului la ''fep'', realizăm o conexiune prin tunelul SSH pe portul ''100ZT'' deschis de coleg:<code bash> | + | <hidden> |
- | [$USERNAME_COLEG@fep-62-2 ~]$ ssh -l root localhost -p 100ZT | + | <solution> |
- | Warning: Permanently added '[localhost]:100ZT' (RSA) to the list of known hosts. | + | Folosim comanda de mai jos pentru a transmite e-mail cu adresa de e-mail sursă schimbată:<code bash> |
- | root@localhost's password: | + | bogdan@host:~$ echo "Un nou e-mail de la RL" | mail -s "Test RL imbunatatit" -r bogdan.georgescu@rl.cs.pub.ro adresa.de.email@gmail.com |
- | [...] | + | |
- | root@red:~# | + | |
</code> | </code> | ||
- | În cadrul conexiunii ni se cere parola utilizatorului ''root'' de pe stația ''red'' (adică parola ''student''). | + | La destinatar, adresa expeditorului va fi afișată ca fiind ''bogdan.georgescu@rl.cs.pub.ro''. |
- | + | </solution> | |
- | Î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. | + | </hidden> |
- | + | ||
- | 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. | + |