Ubuntu

Cómo cambiar el puerto SSH en Ubuntu y ajustar UFW

Aprende a cambiar el puerto SSH en Ubuntu de forma segura, actualizar UFW, comprobar que sshd escucha en el nuevo puerto y evitar quedarte fuera. Incluye comandos y comprobaciones…

2 min aprox. alext0918
TecnoSender Guía técnica
2 min aprox. Lectura

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 OpenSSH o sudo ufw delete allow 22/tcp.
  • Actualiza Fail2ban: modifica las jails que vigilan SSH para añadir el nuevo puerto o marcar port = 2222 en 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 Port no cambia, busca definiciones en /etc/ssh/sshd_config.d/*.conf y 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), ejecuta sudo systemctl daemon-reload despué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)

  1. Backup: sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.
  2. Abrir nuevo puerto en UFW: sudo ufw allow 2222/tcp.
  3. Editar /etc/ssh/sshd_config o crear /etc/ssh/sshd_config.d/20-port.conf con Port 2222. Verificar no haya otra definición en sshd_config.d.
  4. Comprobar si tu sistema usa socket activation: systemctl status ssh.socket.
  5. Si aplica: sudo systemctl daemon-reload y sudo systemctl restart ssh.socket. Si no: sudo systemctl restart ssh.
  6. Probar desde cliente: ssh -p 2222 usuario@host. No cierres la sesión original hasta confirmar.
  7. Eliminar regla antigua: sudo ufw delete allow OpenSSH o sudo ufw delete allow 22/tcp.
  8. 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).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *