Abrir el puerto SSH de tu servidor casero a Internet es cómodo y, hecho sin cuidado, una invitación. Esta es la lista que repasamos antes de abrir nada. Cada punto se hace en minutos.
Antes de abrir el puerto
☐ Claves, no contraseñas. Genera un par de claves en tu equipo y cópialo al servidor:
ssh-keygen -t ed25519
ssh-copy-id usuario@servidor
☐ Desactiva el acceso por contraseña y el de root. En /etc/ssh/sshd_config (o en un fichero dentro de sshd_config.d/):
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
Reinicia con sudo systemctl restart ssh y, sin cerrar la sesión actual, comprueba desde otra terminal que puedes entrar.
☐ Limita los usuarios. AllowUsers tuusuario en la misma configuración.
☐ Instala fail2ban. Bloquea durante un tiempo las IP que fallan varias veces:
sudo apt install fail2ban
La configuración por defecto ya protege SSH en Debian y Ubuntu.
☐ Cortafuegos con lo mínimo. Con ufw:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable
En el router
☐ Redirige solo el puerto necesario y solo a la IP del servidor. Nada de DMZ.
☐ Considera otro puerto externo. Redirigir el 2222 externo al 22 interno no es seguridad, pero reduce muchísimo el ruido de bots en los logs.
☐ IP fija en la red local para el servidor (reserva DHCP en el router), o la redirección dejará de funcionar el día que cambie.
Después
☐ Revisa los logs la primera semana: journalctl -u ssh y sudo fail2ban-client status sshd.
☐ Actualizaciones automáticas de seguridad: sudo apt install unattended-upgrades.
☐ Pregúntate si necesitas SSH abierto. Si solo tú accedes, una VPN con WireGuard expone un único puerto UDP que no responde a nadie sin clave. Es lo que acabamos haciendo para todo lo que no sea SSH.
Si tu conexión no tiene IP fija, te hará falta además un nombre que siga a tu IP; eso lo resolvemos con DNS dinámico.

