Conexión SSH a través de tunel socks

Cuando quiero acceder a servicios que están en una red interna sin natear, normalmente solía abrir un tunel SSH creando un puerto local, bindeando el puerto del servicio remoto al puerto local. Como casi nunca me acuerdo de la sintaxis, siempre tiro del post del colega @jovimon que recomiendo a todo el mundo. Básicamente:

$ ssh -L 11111:localhost:8080 ipServidorRemoto

Donde 11111 es el puerto local a usar, y 8080 es el servicio de la máquina donde está el SSH.

Recientemente he descubierto una forma más simple y cómoda de trabajar en redes internas sin tener que bindear cada servicio a un puerto: mediante un tunel socks. Inicialmente usaba el tunel socks para navegar desde la máquina, ya que pensaba que ssh no tenía soporte para decir que tire la conexión hacia el tunel socks. Rebuscando por los internets he visto que si es así. Veamos como:

Creación de tunel socks

$ ssh -D 11111 ipSSHremoto

Con el tunel hecho, vamos a conectarnos a una máquina visible de la red interna del equipo conectado, directamente desde nuestro equipo.

Conexión SSH interno

$ ssh -o ProxyCommand='ncat --proxy-type socks5 --proxy 127.0.0.1:11111 %h %p' usuario@192.168.1.20

Con esto, desde la máquina local, estaríamos conectándonos a una máquina interna por SSH sin necesidad de hacer varios saltos. Esto es bastante útil como “VPN” quick&dirty para trabajar en remoto a una red interna, o en un pentest, para pivotar desde una máquina de salto.

NOTA: depende de la distribución que se use, es posible que se tenga que sustituir ncat por nc.

social