Qué es y qué vas a conseguir: Esta guía explica cómo cambiar el puerto SSH de un servidor Ubuntu de forma segura y cómo ajustar UFW para no quedarte sin acceso. Aprenderás el flujo recomendado (abrir el puerto en el firewall antes de aplicar cambios, editar la configuración correcta, reiniciar el unit correcto y probar desde un cliente), cómo detectar instalaciones con socket activation y qué limpiar después (reglas antiguas, Fail2ban, security groups en la nube).
cambiar puerto SSH: cuándo y para qué
Cambiar el puerto SSH (por ejemplo de 22 a 2222) no mejora la seguridad criptográfica, pero reduce el ruido de ataques automatizados y facilita reglas de firewall más limpias. No sustituye medidas reales como autenticación por claves, hardening y detección (usa claves y desactiva contraseñas cuando puedas).
Advertencias y preparación
- Mantén la sesión SSH actual abierta hasta comprobar el nuevo acceso (no cierres tu terminal principal).
- Haz copia de seguridad del archivo de configuración antes de editarlo.
- Si el servidor está en la nube, actualiza también los security groups / reglas del proveedor.
- Ten a mano acceso físico o consola serial/virtual (cloud console) por si algo falla.
Requisitos previos
- Acceso sudo al servidor.
- UFW instalado y activo (si lo usas).
- Cliente SSH desde otra máquina para probar la conexión.
Paso 1 — Elegir un puerto válido y evitar conflictos
Escoge un puerto TCP entre 1024 y 65535 (puertos <1024 requieren privilegios y suelen reservarse a servicios del sistema). Evita puertos ya usados por otros servicios (HTTP, DNS, etc.). Anota el puerto elegido; en los ejemplos usaré 2222.
Paso 2 — Permitir el nuevo puerto en UFW antes de tocar sshd_config
Abrir el puerto en UFW primero evita quedarte bloqueado. Ejemplo:
sudo ufw allow 2222/tcp
Si en tu instalación UFW usa el perfil «OpenSSH» que apunta a 22, inspecciónalo con sudo ufw app list y sudo ufw app info OpenSSH antes de eliminarlo. Cuando todo funcione, elimina la regla antigua con:
sudo ufw delete allow OpenSSH
# o si añadiste por puerto:
sudo ufw delete allow 22/tcp
Usar el perfil OpenSSH es habitualmente más claro para configuraciones estándar; para abrir puertos no estándar usa la forma con el número y protocolo. (digitalocean.com
Paso 3 — Cambiar el puerto en /etc/ssh/sshd_config (y en sshd_config.d si aplica)
Por defecto las instalaciones modernas de Ubuntu incluyen los snippets de /etc/ssh/sshd_config.d/*.conf al inicio de /etc/ssh/sshd_config, así que opciones allí pueden anular cambios en el archivo principal. Antes de editar, crea una copia de seguridad:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
O bien crea un fichero modular (recomendado para claridad):
sudo tee /etc/ssh/sshd_config.d/20-port.conf <<'EOF'
Port 2222
EOF
Si prefieres editar el archivo clásico, cambia (o añade) la línea Port 2222 en /etc/ssh/sshd_config. Pero revisa primero si existe una definición en /etc/ssh/sshd_config.d/, porque ese fichero incluido puede prevalecer. (ubuntu.com
Paso 4 — Reiniciar correctamente: socket activation vs servicio clásico
En Ubuntu moderno (a partir de 22.10 y por tanto relevante en 24.04) OpenSSH suele instalarse con systemd socket activation: systemd escucha en el puerto (ssh.socket) y arranca sshd al recibir una conexión. En estos sistemas, cambiar Port en la configuración no hace que automáticamente cambie lo que systemd escucha; debes recargar systemd y reiniciar la unidad de socket. Comprueba qué modelo usa tu máquina:
systemctl is-active ssh.socket && echo 'socket activation: ssh.socket está activo'
# o para ver status
sudo systemctl status ssh.socket
Si el socket está activo usa:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Si no existe ssh.socket y en su lugar controlas el servicio clásico, reinicia el servicio SSH:
sudo systemctl restart ssh
# o, si la unidad es ssh.service:
sudo systemctl restart ssh.service
Comprobar cuál aplicar es fundamental: reiniciar solo sshd en un sistema con socket activation no cambiará el puerto escuchado por systemd. (askubuntu.com
Paso 5 — Comprobar que sshd escucha en el puerto nuevo y probar la conexión
Localmente en el servidor puedes comprobar con:
sudo ss -tuln | grep :2222
sudo ss -tlnp | grep ssh
# o
sudo lsof -iTCP -sTCP:LISTEN -P -n | grep ssh
Desde otra máquina realiza la prueba real de acceso (mantén la sesión original abierta):
ssh -p 2222 usuario@IP_o_hostname
También puedes escanear el puerto desde un host externo con nmap para confirmar accesibilidad. Si la conexión falla, no cierres la sesión existente hasta resolverlo.
Paso 6 — Limpiar reglas antiguas y actualizar otras herramientas
- Si todo funciona, elimina la regla antigua de UFW:
sudo ufw delete allow OpenSSHosudo ufw delete allow 22/tcp. - Actualiza Fail2ban: modifica las jails que vigilan SSH para añadir el nuevo puerto o marcar
port = 2222en la configuración correspondiente. - Si estás en la nube, actualiza security groups / firewall del proveedor para permitir el nuevo puerto; UFW no sustituye esas reglas externas.
Recuerda revisar perfiles de aplicaciones y otros ficheros en /etc/ufw/applications.d/ si usabas perfiles para OpenSSH. (linuxize.com
Solución de problemas comunes
- Cambios ignorados por Include: si tu
Portno cambia, busca definiciones en/etc/ssh/sshd_config.d/*.confy en el archivo principal; las entradas incluidas al inicio pueden sobreescribir lo que pongas más abajo. (ubuntu.com - Puesto no escuchando: en sistemas con socket activation systemd puede estar escuchando en el puerto 22; recarga systemd y reinicia
ssh.socket. Si modificas manualmente la unidad de socket (no recomendado salvo que sepas lo que haces), ejecutasudo systemctl daemon-reloaddespués. (kernelhost.com - Locked out / sin acceso: si te quedas sin acceso, usa la consola del proveedor cloud o acceso físico. Si tienes otra sesión activa, intenta revertir la configuración o abrir un puerto alternativo temporalmente con UFW desde esa sesión.
- Fail2ban sigue bloqueando: añade el nuevo puerto a la configuración de las jails o reinicia Fail2ban tras el cambio.
Checklist final (rápido)
- Backup:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak. - Abrir nuevo puerto en UFW:
sudo ufw allow 2222/tcp. - Editar
/etc/ssh/sshd_configo crear/etc/ssh/sshd_config.d/20-port.confconPort 2222. Verificar no haya otra definición ensshd_config.d. - Comprobar si tu sistema usa socket activation:
systemctl status ssh.socket. - Si aplica:
sudo systemctl daemon-reloadysudo systemctl restart ssh.socket. Si no:sudo systemctl restart ssh. - Probar desde cliente:
ssh -p 2222 usuario@host. No cierres la sesión original hasta confirmar. - Eliminar regla antigua:
sudo ufw delete allow OpenSSHosudo ufw delete allow 22/tcp. - Actualizar Fail2ban y security groups en la nube si procede.
Si quieres reforzar el acceso SSH después del cambio, configura autenticación por claves y desactiva la autenticación por contraseña; nuestra guía de claves públicas explica los pasos y es un complemento natural a este cambio: Cómo configurar acceso SSH con claves públicas en Ubuntu. También puede interesarte profundizar en UFW: UFW en Linux: Aprende a Configurarlo y Usarlo.
Preguntas frecuentes
- ¿Por qué mi cambio de puerto no surte efecto? Porque tu instalación usa systemd socket activation: systemd (ssh.socket) escucha el puerto y puede seguir en 22 hasta que recargues systemd y reinicies el socket. Comprueba
systemctl status ssh.socket. (askubuntu.com - ¿Puedo usar un puerto por debajo de 1024? Técnicamente sí (requieren privilegios), pero no es recomendable: esos puertos suelen reservarse a servicios estándar del sistema.
- ¿Debo actualizar Fail2ban y security groups? Sí: Fail2ban debe vigilar el nuevo puerto y los security groups/cloud firewalls deben permitirlo además de UFW.
Si quieres, puedo generar los comandos adaptados a tu puerto elegido y a la salida concreta de systemctl status ssh.socket en tu servidor (pégame esa salida y te doy los pasos exactos).
