Cómo configurar un servidor SSH seguro en Linux

Guía paso a paso para configurar y securizar un servidor SSH en cualquier servidor Linux, incluyendo autenticación por clave, fail2ban y mejores prácticas.

Cómo configurar un servidor SSH seguro en Linux

Introducción

SSH (Secure Shell) es el protocolo estándar para la administración remota de servidores Linux. En esta guía configuraremos un servidor SSH seguro aplicando las mejores prácticas de seguridad, con instrucciones para las distribuciones más comunes.

Instalación y verificación

La mayoría de distribuciones incluyen OpenSSH por defecto. Para asegurarnos de que está instalado y activo:

# RHEL/Rocky/Oracle Linux
sudo dnf install openssh-server -y

# Ubuntu/Debian
sudo apt install openssh-server -y

Activar el servicio:

sudo systemctl enable --now sshd
sudo systemctl status sshd

Configuración básica del servidor

Editamos el archivo de configuración principal:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config

Parámetros recomendados

Los parámetros más importantes a configurar:

Port 2222
PermitRootLogin no
MaxAuthTries 3
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
X11Forwarding no
AllowUsers admin deploy

Autenticación por clave pública

Generamos un par de claves en el cliente:

ssh-keygen -t ed25519 -C "admin@tengoping.com"
ssh-copy-id -p 2222 admin@servidor

Verificar la conexión

ssh -p 2222 admin@servidor

Configuración del firewall

Abrimos el nuevo puerto antes de reiniciar SSH para no perder el acceso.

# RHEL/Rocky/Oracle Linux (firewalld)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

# Ubuntu/Debian (ufw)
sudo ufw allow 2222/tcp
sudo ufw delete allow ssh
sudo ufw reload

Instalación de Fail2ban

Fail2ban protege contra ataques de fuerza bruta:

# RHEL/Rocky/Oracle Linux
sudo dnf install epel-release -y
sudo dnf install fail2ban -y

# Ubuntu/Debian
sudo apt install fail2ban -y

Creamos la configuración local:

sudo tee /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = 2222
filter = sshd
backend = systemd
maxretry = 3
bantime = 3600
findtime = 600
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Monitorización de accesos

Revisamos los logs de acceso regularmente:

sudo journalctl -u sshd -f
sudo lastlog
sudo last -n 20

Resumen de seguridad

MedidaDescripción
Cambiar puertoReduce escaneos automáticos
Deshabilitar rootEvita ataques directos a root
Claves públicasMás seguro que contraseñas
Fail2banBloquea IPs maliciosas
AllowUsersLista blanca de usuarios

Conclusión

Con estas configuraciones tendremos un servidor SSH robusto y seguro. Recuerda mantener el sistema actualizado y revisar los logs periódicamente.

La seguridad es un proceso continuo, no un estado. Revisa y actualiza tus configuraciones regularmente. [!NOTE] ✍️ Transparencia: Este artículo ha sido creado con el apoyo de herramientas de inteligencia artificial. Toda la información técnica ha sido revisada y validada por el autor antes de su publicación.

$ curl tengoping.com/rss.xml | subscribe [suscribirse por RSS →]