Cifrado y comunicación segura

SSH (Secure Shell)

Se lee en aproximadamente 5 minutos

Qué es SSH

SSH (Secure Shell) es un protocolo para conectarse de forma segura a computadoras remotas a través de la red. Cifra toda la comunicación, eliminando el riesgo de interceptación de contraseñas y comandos.

Antes de SSH se usaban Telnet y rlogin, que transmitían en texto plano sin cifrado. En 1995, Tatu Ylönen de Finlandia desarrolló SSH, que luego se convirtió en estándar de facto como OpenSSH.

Hoy SSH se usa en administración de servidores, operación de infraestructura cloud, acceso a repositorios Git y pipelines de despliegue automático. El puerto por defecto es 22.

Autenticación por clave pública

El método de autenticación más recomendado en SSH es la autenticación por clave pública. En lugar de contraseña, usa un par de claves matemáticamente relacionadas (pública y privada).

  1. Generación del par de claves: En el cliente, ejecutar ssh-keygen. La clave privada se guarda en el cliente y nunca debe exponerse.
  2. Registro de clave pública: Registrar la clave pública en ~/.ssh/authorized_keys del servidor.
  3. Proceso de autenticación: El servidor envía un desafío aleatorio; el cliente lo firma con la clave privada; el servidor verifica con la clave pública. La clave privada nunca viaja por la red.
Autenticación por contraseña
Fácil de configurar pero vulnerable a fuerza bruta. La contraseña viaja por la red (cifrada, pero se descifra en el servidor).
Autenticación por clave pública
La clave privada no viaja por la red. Fuerza bruta prácticamente imposible. Con passphrase, incluso si se filtra el archivo de clave privada, no se puede usar inmediatamente.

El algoritmo recomendado actualmente es Ed25519. RSA también se usa ampliamente pero se recomienda 4096 bits o más.

Port forwarding

El port forwarding (tunneling) de SSH transfiere comunicaciones de otros protocolos de forma segura a través de la conexión cifrada SSH.

  • Local forwarding: Reenvía conexiones a un puerto local al puerto especificado del servidor remoto vía túnel SSH. Ej: ssh -L 3306:db-server:3306 bastion para conectar a BD a través de bastión. Para servicios inaccesibles directamente por firewall.
  • Remote forwarding: Reenvía conexiones al puerto del servidor remoto hacia el cliente. Para exponer servidores detrás de NAT.
  • Dynamic forwarding: Usa la conexión SSH como proxy SOCKS. ssh -D 1080 server y configurar el navegador con proxy localhost:1080. Protege comunicación en Wi-Fi público.

El port forwarding es útil cuando se necesita conexión segura a un servicio específico sin montar una VPN completa. La conexión SSH multi-hop vía bastión se configura fácilmente con ProxyJump en ~/.ssh/config.

Transferencia de archivos con SCP y SFTP

SCP (Secure Copy Protocol)
Copia archivos con un solo comando: scp file.txt user@server:/path/. Simple pero no permite interrumpir/reanudar ni sincronizar directorios.
SFTP (SSH File Transfer Protocol)
Operaciones interactivas de archivos similares a FTP. Listado de directorios, borrado, renombrado, interrupción/reanudación. Abundantes clientes GUI (WinSCP, FileZilla, Cyberduck). Diferente de FTPS (FTP over TLS).

FTP tradicional transmite contraseñas y archivos en texto plano. Se recomienda encarecidamente migrar a SFTP por seguridad.

Mejores prácticas de seguridad SSH

  • Desactivar autenticación por contraseña: PasswordAuthentication no en /etc/ssh/sshd_config. Solo permitir clave pública. Esto neutraliza la mayoría de ataques de fuerza bruta.
  • Prohibir login como root: PermitRootLogin no. Entrar como usuario normal y escalar con sudo.
  • Cambiar puerto: Cambiar del 22 a otro puerto. No es seguridad fundamental pero reduce drásticamente intentos de escaneo automático.
  • Restringir IPs de origen: Limitar acceso al puerto SSH a IPs específicas con firewall. En cloud, usar security groups.
  • Instalar Fail2ban: Bloquea automáticamente IPs con múltiples fallos de autenticación.
  • Rotación de claves: Renovar claves SSH periódicamente. Eliminar claves de exempleados de authorized_keys inmediatamente.

Conceptos erróneos comunes

SSH es solo para administradores de servidores
Desarrolladores usan SSH para Git (git@github.com:...), pipelines CI/CD para conectar a destinos de despliegue, científicos de datos para trabajar en servidores GPU remotos. Todos los profesionales de TI usan SSH cotidianamente.
Cambiar el puerto SSH garantiza la seguridad
El cambio de puerto reduce escaneos automáticos pero un port scan lo descubre fácilmente. Lo esencial es forzar autenticación por clave pública, desactivar contraseña y restringir IPs de origen.
Una clave SSH creada sirve para siempre
Las claves SSH también deben tener concepto de caducidad. Considerando filtración de claves privadas, empleados que dejan la empresa y obsolescencia de algoritmos, se recomienda rotación y auditoría periódica.
Compartir

Términos relacionados

Artículos relacionados