Introducción
El protocolo SSH es una herramienta fundamental para la administración remota de servidores, pero si no se configura adecuadamente, puede convertirse en un punto vulnerable para accesos no autorizados. Este capítulo está diseñado para administradores de sistemas y profesionales de TI que desean fortalecer la seguridad de sus servidores SSH.
Objetivos
Esta sección tiene como propósito:
- Reconocer los potenciales puntos de falla en un servidor ssh.
- Reducir los riesgos y proteger el acceso remoto de manera robusta.
Incrementar la Seguridad de un servidor SSH
Uso de Llaves
El uso de llaves SSH en lugar de contraseñas mejora significativamente la seguridad del servidor. Las llaves públicas y privadas permiten una autenticación más robusta, reduciendo el riesgo de ataques de fuerza bruta.
Crear el archivo para guardar las llaves y definir permisos:
mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Algoritmos recomendados:
| Tipo de Clave | Tamaño de Clave | Velocidad (Firma/Verificación) | Nivel de Seguridad | Uso Recomendado | Notas | Comando |
|---|---|---|---|---|---|---|
| RSA | 2048–4096 bits | Más lenta | Moderado–Alto | Compatibilidad/Legado | Muy compatible, claves grandes | ssh-keygen -t rsa -b 4096 |
| ED25519 | 256 bits | Muy rápida | Alto (~128 bits) | Uso moderno de SSH | Pequeñas, rápidas, muy seguras | ssh-keygen -t ed25519 |
| ED448 | 456 bits | Rápida | Muy alto (~224 bits) | Entornos de alta seguridad | Más nueva, menos soporte en sistemas | ssh-keygen -t ed448 |
Generar las llaves:
ssh-keygen -t ed448Enter file in which to save the key (/home/student/.ssh/id_ed448): ssh_key Enter passphrase (empty for no passphrase): Enter same passphrase again:
Copiar la llave pública a la configuración ssh.
cat ssh_key.pub >> ~/.ssh/authorized_keys
sudo vi /etc/ssh/sshd_configPubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
Reiniciar el servicio:
sudo systemctl restart ssh
Verificar que la conexión funcione correctamente desde el cliente:
ssh -i <ssh_key.priv> <USUARIO>@<IP>
Si funciona correctamente eliminar la configuración anterior:
sudo vi /etc/ssh/sshd_configPasswordAuthentication no PermitEmptyPasswords no
Reiniciar el servicio:
sudo systemctl restart ssh
Deshabilitar Root Login
En la gran mayoría de casos se debería limitar la conexión a su usuario asignado, y especialmente bloquear el acceso a Root. Esto se puede hacer fácilmente desde la configuración:
sudo vi /etc/ssh/sshd_configPermitRootLogin no
Reiniciar el servicio:
sudo systemctl restart ssh
Deshabilitar Protocolos Viejos de SSH
*Solo en sistemas modernos
Ess recomendable deshabilitar algoritmos criptográficos obsoletos para reforzar la seguridad del servidor SSH. Al especificar algoritmos seguros como curve25519-sha256 para el intercambio de claves, aes256-gcm para cifrado y hmac-sha2-256 para integridad, se reducen las vulnerabilidades frente a ataques criptográficos conocidos.
sudo vi /etc/ssh/sshd_configKexAlgorithms curve25519-sha256@libssh.org Ciphers aes256-gcm@openssh.com,aes256-ctr MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-256
Reiniciar el servicio:
sudo systemctl restart ssh
Activar Logging
Para poder monitorear intentos de acceso sospechosos y potencialmente bloquear IPs de forma manual, se puede activar logging dentro de la configuración de ssh.
sudo vi /etc/ssh/sshd_configSyslogFacility AUTH LogLevel INFO
Definir permisos:
chmod 640 /var/log/secure
Reiniciar el servicio:
sudo systemctl restart ssh
Limitar a usuarios y/o IPs
Si se trata de un servidor para uso dentro de una empresa o un equipo conocido, se recomienda limitar el servidor a únicamente permitir conexiones con usuarios dentro de la misma red IP, o IPs fijas si se encuentran en redes distintas y se conocen.
Esto reduce la flexibilidad pero drásticamente mejora la seguridad.
Alternativamente se pueden implementar otras herramientas como fail2ban, demostrándose posteriormente.
Limitar desde la configuración
- Limitar a usuarios
>>>
sudo vi /etc/ssh/sshd_configAllowUsers <user1> <user2> # etc... - Limitar a usuarios en IP fija
>>>
sudo vi /etc/ssh/sshd_configAllowUsers <user1>@<IP1> <user2>@<IP2> # etc...
sudo systemctl restart ssh
Limitar utilizando la Firewall
sudo firewall-cmd --state
sudo firewall-cmd --list-all
Permitir acceso las máquinas en la subred 192.168.1.x * Agregar los protocolos (puertos) deseados: * Protocolo ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept'
Ignorar el cualquier otro tráfico entrante:
sudo firewall-cmd --set-default-zone=drop
Aplicar los cambios:
sudo firewall-cmd --reload
Verificar:
sudo firewall-cmd --list-all --zone=drop
Herramienta de Monitoreo Fail2ban
Fail2ban es una herramienta de seguridad que protege el servidor contra ataques de fuerza bruta y accesos no autorizados mediante el monitoreo de archivos de registro. Cuando detecta múltiples intentos fallidos de inicio de sesión, bloquea automáticamente la dirección IP atacante utilizando reglas de firewall. Es principalmente útil si el servidor esta expuesto y no está limitado a un set de IPs.
en ciertos sistemas es necesario instalar: sudo dnf install epel-release
*si aún no es posible intentar:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
dnf repolist
sudo dnf install fail2ban -y
-
Usar configuración por defecto *(recomendado):
Copiar la configuración:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localBuscar
[sshd]y agregar la lineaenabled = true:sudo vi /etc/fail2ban/jail.local[sshd] enabled = true -
Usar configuración por personalizada:
Crear archivo de configuración:
Definir la configuración.sudo touch /etc/fail2ban/jail.localsudo vi /etc/fail2ban/jail.local[DEFAULT] ignoreip = 127.0.0.1/8 ::1 bantime = 10m findtime = 10m maxretry = 5 backend = systemd [sshd] enabled = true port = ssh logpath = %(sshd_log)s
sudo systemctl enable --now fail2ban
Verificar estado:
fail2ban-client status
| - Number of Jail: 1
` - Jail list: sshd
Más detalle:
fail2ban-client status sshd
Ver logs:
sudo tail -f /var/log/fail2ban.log
Conclusión
SSH es una herramienta ampliamente utilizada y de gran utilidad. Para su uso y configuración correcta se han abordado prácticas esenciales para mitigar riesgos, como el uso de llaves en lugar de contraseñas, la desactivación del acceso root, la eliminación de protocolos antiguos, la habilitación de registros de auditoría, la restricción por usuarios o direcciones IP, y la integración de herramientas de monitoreo como Fail2ban.
Además de estas medidas, se recomienda aplicar técnicas adicionales de hardening, como la modificación del puerto por defecto de SSH y el remapeo de puertos expuestos, lo cual puede reducir significativamente la exposición a escanéos automatizados y ataques por fuerza bruta.