dimarts, de novembre 23, 2010

SSH invers.


Ho he fet 30 vegades però cada cop he hagut de buscar els passos exactes.. per futura referència i per si pot ajudar a algú.

Escenari: Volem connectar-nos a un equip a
mb connexió a internet però que no té cap port “accessible” i que només port sortir pels ports 53, 80 i 443 Disposem d'un servidor a Internet amb IP pública i que controlem (anomenem-la IP_PÚB_NOSTRE_SERVER)

1. Al servidor que controlem hi creem un usuari per fer la connexió SSH inversa. Per exemple amb l'script “adduser” dels Debian/Ubuntu.

# sudo adduser tmp

2. Per seguretat, i si ens interessa que aquest compte "tmp" que hem creat, i que serà usat al client no pugui obtenir una un cónsola de comandes al servidor, editem l'arxiu /etc/passwd
al servidor ihi canviem el "/bin/bash" del final de la linea de l'usuari "tmp" per /usr/sbin/nologin (o la localització d'aquest nologin... si tenim dubtes, ens assegurem que existeix amb un “locate nologin“)

tmp:x:1001:1001:Temporal,,,:/home/tmp:/usr/sbin/nologin


3. Al servidor editem l'arxiu de configuració del servei ssh a “/etc/ssh/sshd_config” i hi afegim que escolti per algun dels ports que el client pot usar per sortir.. per exemple el 53 (nota: ha de ser un port que estigui “lliure”, és a dir que si tenim per exemple l'apache escoltant pel port 80, no el podrem usar). Cal afegir a sota del Port 22 que hi ha per defecte:

Port 53

4. Reiniciem el servei sshd i anem al client. (p.e. /etc/init.d/ssh restart)


5. Al client fem la comanda del ssh invers pròpiament dit:

# sudo ssh -R 4430:localhost:22 tmp@IP_PÚB_NOSTRE_SERVER -p 53 -N

El primer cop ens demanarà...
The authenticity of host ' IP_PÚB_NOSTRE_SERVER (IP_PÚB_NOSTRE_SERVER)' can't be established. RSA key fingerprint is xx:xx:xx:a1:5f:1a:89:78:90:7b:2e:22:9a:xx:xx:xx. Are you sure you want to continue connecting (yes/no)?

escrivim que sí, i ens demanarà el password de l'usuari “tmp” que hem creat més amunt al server amb l'”adduser” i s'hauria de quedar a l'espera...

6. Només falta que, ara ja des del server, ens connectem al port 4430 del localhost host que realment està redirigit cap al ssh del client:

# ssh USUARI_CLIENT@localhost -p 4430

En aquest exemple, USUARI_CLIENT és un usuari vàlid per fer una connexió ssh al client, i IP_PÚB_NOSTRE_SERVER és la IP pública del nostre servidor, i el port és el 4430 però podria ser qualsevol no tallat.