SSH: Técnicas avanzadas para anonimato y eficiencia en conexiones remotas

El protocolo SSH (Secure Shell) es esencial para administradores de sistemas y desarrolladores que necesitan acceder a servidores de manera segura y eficiente. Sin embargo, el uso convencional de SSH puede ser limitado en ciertos aspectos, como la visibilidad en registros del sistema o las restricciones de conexión. A continuación, se presentan técnicas avanzadas que permiten ocultar la presencia en los servidores, optimizar conexiones y ampliar las funcionalidades de SSH.

Conexión SSH casi invisible

Una de las principales preocupaciones al utilizar SSH es la aparición en comandos como w o who, que muestran usuarios conectados al servidor. Además, el sistema registra las conexiones SSH en el archivo ~/.ssh/known_hosts. Para evitar esto, es posible establecer una conexión sin dejar rastros visibles:

ssh -o UserKnownHostsFile=/dev/null -T [email protected] "bash -i"

Esta configuración oculta al usuario de la mayoría de los registros. Para una experiencia más cómoda, incluyendo colores y un pseudo-terminal (PTY), se puede utilizar el siguiente comando avanzado:

xssh [email protected]

Este script ajusta la terminal remota con un prompt personalizado y evita el registro de comandos y el historial, garantizando mayor privacidad durante la sesión.

Múltiples sesiones SSH con una sola conexión TCP

En algunos casos, es útil mantener una única conexión SSH abierta y reutilizarla para abrir múltiples sesiones o realizar transferencias de archivos sin necesidad de autenticar repetidamente. Esto se logra creando una conexión maestra SSH:

ssh -M -S .sshmux [email protected]

Una vez establecida la conexión maestra, se pueden abrir nuevas sesiones utilizando el mismo canal TCP:

ssh -S .sshmux NONE

Esta técnica es particularmente útil para reducir la sobrecarga en servidores y agilizar las tareas múltiples.

Túneles SSH: Acceso a servidores detrás de firewalls

El uso de túneles SSH es una práctica común para acceder a servicios detrás de firewalls o sistemas con restricciones de red. Un ejemplo clásico es redirigir el tráfico desde una máquina local a un servidor remoto:

ssh -g -L31337:1.2.3.4:80 [email protected]

Con esta configuración, cualquier conexión local al puerto 31337 será reenviada al servidor remoto en el puerto 80, y parecerá provenir del servidor intermedio.

Además, para situaciones donde se necesita dar acceso a un servidor interno que no está en Internet, se puede utilizar un túnel inverso:

ssh -o ExitOnForwardFailure=yes -g -R31338:192.168.0.5:80 [email protected]

Esto permite que cualquier conexión a server.org:31338 se reenvíe al servidor interno 192.168.0.5:80.

Tunelización de tráfico de navegador con SSH SOCKS

A partir de OpenSSH 7.6, se introdujo el soporte para la creación de proxies SOCKS dinámicos mediante SSH. Esta funcionalidad permite que todo el tráfico de un navegador pase a través de un servidor remoto:

ssh -D 1080 [email protected]

Al configurar el navegador para utilizar el proxy SOCKS en 127.0.0.1:1080, todo el tráfico se tunelizará a través del servidor remoto, lo que oculta la dirección IP original del usuario.

Conexión SSH a hosts detrás de NAT

El acceso a servidores detrás de un NAT o firewall puede ser complicado, pero servicios como ssh-j.com ofrecen soluciones para crear túneles reversos. Desde el servidor detrás del NAT, se puede crear un túnel a través de ssh-j.com:

sshj

Este comando genera un ID de túnel único y mantiene la conexión activa, lo que permite acceder al servidor detrás del NAT desde cualquier lugar del mundo.

SSH ProxyJump: Saltando entre múltiples servidores

Cuando se necesita acceder a servidores a través de varios «saltos» intermedios, ProxyJump es una herramienta valiosa. En lugar de iniciar sesión manualmente en cada servidor intermedio, ProxyJump permite una conexión directa:

ssh -J [email protected],[email protected] [email protected]

Esta técnica asegura que la conexión esté cifrada de extremo a extremo y evita exponer credenciales a los servidores intermedios.

Servidor SSH como usuario no root

En ocasiones, es útil iniciar un servidor SSH sin privilegios de root. Esto puede ser útil para tareas de multiplexación o como un servidor temporal para la exfiltración de datos. Como usuario no root, se puede iniciar un servidor SSH de la siguiente manera:

mkdir -p ~/.ssh
ssh-keygen -q -N "" -t ed25519 -f sshd_key
cat sshd_key.pub >>~/.ssh/authorized_keys
$(command -v sshd) -f /dev/null -o HostKey=$(pwd)/sshd_key -o GatewayPorts=yes -p 31337

Este servidor SSH temporal permite conexiones a través del puerto 31337 sin necesidad de alterar la configuración global del sistema.

Conclusión

SSH es una herramienta increíblemente versátil que, más allá de las conexiones remotas básicas, permite la creación de túneles, proxies y conexiones avanzadas que mejoran la eficiencia y privacidad. Utilizando técnicas como túneles inversos, conexiones múltiples sobre un solo TCP y proxies SOCKS, los administradores de sistemas y usuarios avanzados pueden aprovechar SSH para solucionar problemas complejos y acceder a redes restringidas de manera segura.

IMPORTANTE: Recuerda utilizar esta información con responsabilidad y siempre que sepas como hacer uso de ella.

Fuente: GitHub.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio