Redirigir ports a través d'SSH

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.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   nano va dir

    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.

    1.    igual va dir

      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

  2.   Tesla va dir

    Ú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!

    1.    Getafix va dir

      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.

  3.   eliotime3000 va dir

    ¿Això es pot fer també amb les VPS?

  4.   caçador va dir

    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?

    1.    Getafix va dir

      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.

      1.    caçador va dir

        A la fi una solució funcional !! Gràcies Getafix, m'has donat un món de possibilitats !!

        1.    Getafix va dir

          M'alegro!

  5.   ILAV va dir

    Excel·lent article. Benvingut a DesdeLinux ????

    ¿I que fer si tenim el 22 bloquejat? Jajaja ..

    1.    Getafix va dir

      Gràcies ILAV.
      Si tens el port 22 bloquejat, mmmm, haurem de buscar una alternativa per hackejar el tallafocs XD

    2.    eliotime3000 va dir

      I el pitjor de tot (cas hipotètic): que estigui bloquejat pel proveïdor de VPS.

  6.   IGA va dir

    Acabo de fer fa unes hores un examen amb preguntes a l'respecte 😛

  7.   Mario va dir

    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.

    1.    Getafix va dir

      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ó.