SSH es el servicio más atacado de cualquier servidor público, y también el más fácil de cerrar bien. Casi todo el riesgo viene de una sola cosa: las contraseñas. Quítalas y los intentos seguirán, pero dejarán de importar.

La configuración

# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers sara deploy

sudo sshd -t && sudo systemctl reload ssh
Antes de recargar: ten una clave que funcione y una segunda terminal ya conectada. Pon PasswordAuthentication no sin una clave instalada y te habrás dejado fuera de tu propio servidor; la consola del proveedor será entonces el único camino de vuelta.

Línea por línea

  • PermitRootLogin no: trabaja como un usuario con nombre, usando sudo. Consulta Usuarios, sudo y no trabajar nunca como root.
  • PasswordAuthentication no: con diferencia, la línea más valiosa de esta lista.
  • KbdInteractiveAuthentication no: cierra la segunda vía de contraseña que la gente olvida y que mantiene las contraseñas funcionando en silencio.
  • AllowUsers: una lista explícita. Una cuenta de sistema nueva creada por un paquete no puede entrar.

Limita desde dónde responde

sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
sudo ufw deny 22/tcp

Si no es posible una dirección fija de oficina, Fail2ban es el recurso de reserva; consulta Qué detiene Fail2ban. Cambiar el puerto es cosmético; consulta Cambiar el puerto de SSH.

Comprueba con qué te has quedado

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|allowusers'
sshd -T imprime la configuración efectiva, incluido lo que se haya definido en un archivo Include más abajo. Es la única lectura que tiene en cuenta que una distribución deje un archivo en sshd_config.d y te pase por encima.