De vegades necessitem transmetre dades a través d'un socket entre diferents màquines, com ara una connexió Telnet, una descàrrega de fitxers FTP, una consulta SQL o qualsevol altre tipus de transmissió.
Aquestes dades viatgen en cru per la xarxa, de manera insegur, La qual cosa significa que podrien ser interceptats per qualsevol node que es trobi en el camí entre l'origen i la destinació, és a dir, robats.
No podem evitar que aquestes dades siguin capturats, però el que sí podem evitar és que siguin interpretats i entesos per tercers, encriptant la comunicació.
SSH és l'eina que ens permet fer connexions segures entre màquines. El seu ús més habitual és el de connectar-se remotament a un intèrpret de comandaments.
No obstant això, ofereix altres possibilitats, com crear túnels encriptats entre diferents màquines.
Suposem que volem fer una connexió telnet des del host1 cap al host2:
host1$ telnet host2
Aquesta comunicació és totalment oberta i pot ser interceptada. Per protegir-la, redirigirem un port escollit arbitràriament (per exemple 5000) al host 1 cap al port 23 (telnet) de l'host2.
D'aquesta manera aconseguirem que tots les dades enviades a el port 5000 de l'host1 viatgin encriptades pel túnel que ssh li obre a través del port 22 de l'host2 i després siguin redirigits a el port 23 de l'host2, arribant així al seu destí final.
Per fer-ho, cal que coneguem el nom d'usuari i contrasenya de l'host2.
Per obrir el túnel escrivim:
host1$ ssh -R 5000:localhost:23 usuariohost2@host2
o bé:
host1$ ssh -L 5000:host2:23 usuariohost2@host2
Les dues opcions són equivalents. Per establir la connexió telnet, ja no ens referim a l'host2 sinó a port triat en el host1:
host1$ telnet localhost 5000
Amb això convertim qualsevol comunicació a segura, sigui telnet o d'un altre tipus. Investigant una mica més veurem que gràcies a la potència de SSH aquestes redireccions també poden realitzar-se a terceres màquines, el que ens permetria que amb un sol punt d'entrada poguéssim accedir de forma segura des de tota una LAN fins a una altra LAN diferent.
La teoria es veu summament interessant, però encara més ho seria si veiéssim un cas pràctic.
Però la veritat és que, tot i ser curtet em va encantar l'article.
potser veient la wiki t'inspires https://wiki.archlinux.org/index.php/Secure_Shell#Forwarding_other_ports
i el mateix, però l'apartat autossh https://wiki.archlinux.org/index.php/Secure_Shell#Autossh_-_automatically_restarts_SSH_sessions_and_tunnels
en realitat, qualsevol cosa podis enviar per ssh, sigui streaming, coneccions a x host. etc. que per x motiu les vulguis xifrar.
i el securecrt rules
Ús algunes vegades SSH a nivell molt bàsic. El port per defecte és el 22, no?
Llavors, si entenc bé, el meu pc és el host 1 i el que vull connectar el host2, aquest túnel crearia una connexió entre el port 5000 i el seu port 23, per després acabar al port 22?
Per que les raons de canviar de ports? Es pot crear un túnel amb el port 22?
Molt interessant l'article. A l'igual que nano, em quedo amb ganes de més!
Efectivament SSH usa per defecte el port 22 (encara que es pot canviar). Aquest port és el que utilitzaria la comunicació real entre els dos hosts. És el que has de assegurar-te que estigui obert i no t'ho tall cap tallafocs. Però per a l'usuari és totalment transparent. Pots oblidar-te d'ell. En l'exemple, la redirecció es fa entre els ports 5000 i 23. Aquests dos són els únics dels que t'has de preocupar. L'usuari veurà que tot el que mani a el port 5000 del seu sistema principal apareix en el 23 de la host de destinació.
Òbviament, cada usuari pot redirigir els ports que consideri oportú.
Gràcies pels vostres comentaris. Aquest és el meu primer post i les vostres opinions serviran perquè el pròxim sigui millor.
¿Això es pot fer també amb les VPS?
Ok aquest és el meu cas, PC1 té accés a un server, però PC2 no, totes dues es connecten per ssh, vull tenir accés a PC2, però que port de PC1 redireccionó? si en realitat el que vull és arribar a el port de l'server des PC2 i que els paquets tinguin com ip origen a PC1. em faig entendre?
Et fas entendre. En aquest cas necessites que PC1 redirigeixi un port de PC2 a el port 22 de servidor:
PC2 $ ssh -L 5000: Servidor: 22 usuarioPC1 @ PC1
i, mantenint aquesta connexió oberta, des d'un altre terminal:
PC2 $ ssh usuarioServidor @ localhost -p 5000
i ja ets dins.
A la fi una solució funcional !! Gràcies Getafix, m'has donat un món de possibilitats !!
M'alegro!
Excel·lent article. Benvingut a DesdeLinux ????
¿I que fer si tenim el 22 bloquejat? Jajaja ..
Gràcies ILAV.
Si tens el port 22 bloquejat, mmmm, haurem de buscar una alternativa per hackejar el tallafocs XD
I el pitjor de tot (cas hipotètic): que estigui bloquejat pel proveïdor de VPS.
Acabo de fer fa unes hores un examen amb preguntes a l'respecte 😛
Jo no diria que:
host1 $ ssh -R 5000: localhost: 23 usuariohost2 @ host2
és equivalent a l'altra línia de comandaments ... la que té el -L.
Ja que -R indica que el port que s'obre a noves connexions aquesta de la banda remot, és a dir de la banda del teu servidor ssh; mentre que -L obre un port de la banda local, de la banda client per rebre noves connexions.
La traducció de la línia:
host1 $ ssh -R 5000: localhost: 23 usuariohost2 @ host2
seria alguna cosa així: Estant en host1, connectar-me a el servidor ssh (port 22) de l'host2 amb el meu usuari usuariohost2 i reenviar les connexions que es generin al port remot 5000 de l'host2 a port 23 en host1 (el meu localhost)
Si no és així, corriganme! 😉
-
D'altra banda ... si en un servidor tenim bloquejada l'entrada de connexions a el port 22, és a dir no podem connectar-nos remotament a servidor ssh; el que es pot fer és; que des del servidor (2 sysadmin amic darrere de el tallafocs de sistema remot hostXNUMX) es executi una línia de comandes:
host2 $ nohup ssh -fN -R 6000: localhost: 22 usuariohost1 @ host1
-f es va a background
-N no executa cap ordre en el remot
nohup evita que a l'fer logout es talli l'ejecucion de la comanda
host1 $ ssh usuariohost2 @ localhost -p 6000
D'aquesta manera des host1 generem una connexió a localhost (el mateix host1) al port 6000 que ens reexpedís la connexió a port 22 d'sistema remot host2, en el qual loguearemos amb el usuariohost2.
Això permetria (no ho probe, però sona a que funciona) de loguearnos en un server ssh bloquejat per firewal amb una petita ajuda des de dins! 😀
Això últim ho vaig llegir d'una explicació feta a la revista The Geek Stuff
http://www.thegeekstuff.com/2013/11/reverse-ssh-tunnel/
M'agrada molt la seva publicació; els llegeixo seguit!
Salutacions.
Portes raó. Hi ha un error en l'article. Les redireccions no són equivalents. La comanda host1 $ ssh -R 5000: localhost: 23 usuariohost2 @ host2 realitza la redirecció inversa, és a dir que redirigeix el port 5000 remot a l'23 local, el contrari del que fa la comanda amb -L.
Gràcies per la correcció.