Cambiar el puerto SSH
Cambiar el puerto SSH predeterminado (22) reduce la exposición a escaneos automatizados y ataques básicos de fuerza bruta, pero no sustituye las medidas de seguridad adecuadas.
Antes de realizar cualquier cambio, asegúrese de tener una sesión SSH activa abierta. No la cierre hasta haber verificado que el nuevo puerto funciona. Si algo sale mal, perderá el acceso al servidor.
Elegir un número de puerto
Elija un número de puerto superior a 1024. Los puertos del rango 49152–65535 tienen menos probabilidades de entrar en conflicto con otros servicios conocidos. Evite alternativas de uso frecuente, como 2222 o 22222, ya que suelen ser objetivos de escáneres automatizados. En esta guía se utiliza 22777 como ejemplo.
Hacer una copia de seguridad del archivo de configuración
Antes de realizar cualquier cambio, cree una copia de seguridad del archivo de configuración de SSH:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Cambiar el puerto SSH en Ubuntu y Debian
A partir de Debian 12 y algunas versiones más recientes de Ubuntu (22.04+), SSH puede utilizar systemd socket activation de forma predeterminada. En este caso, cambiar únicamente la directiva Port en sshd_config a menudo no es suficiente.
Primero, compruebe si la activación mediante socket está activa:
systemctl is-active ssh.socket
Si el comando devuelve active, configure el socket SSH para utilizar el nuevo puerto.
Cree una anulación de systemd para el socket SSH:
systemctl edit ssh.socket
Añada el siguiente contenido:
[Socket] ListenStream= ListenStream=22777
La línea vacía ListenStream= elimina el puerto predeterminado (22). Sin ella, SSH puede escuchar tanto en el puerto 22 como en el nuevo puerto.
Para una mayor fiabilidad, establezca también el puerto en la configuración de SSH. Esto ayuda al generador de systemd y conserva la configuración después de las actualizaciones de OpenSSH:
mkdir -p /etc/ssh/sshd_config.d echo "Port 22777" | tee /etc/ssh/sshd_config.d/10-port.conf
Para una mejor compatibilidad, también puede especificar las direcciones explícitamente:
[Socket] ListenStream= ListenStream=0.0.0.0:22777 ListenStream=[::]:22777
Guarde la configuración y aplique los cambios:
systemctl daemon-reload systemctl restart ssh.socket systemctl restart ssh
Compruebe que el servicio está en ejecución:
systemctl status ssh.socket
En algunos sistemas más recientes, como Ubuntu 24.04+, el generador de systemd puede leer automáticamente el puerto desde sshd_config. En ese caso, puede ser suficiente editar Port directamente y ejecutar systemctl daemon-reload seguido de systemctl restart ssh.socket. El método de anulación descrito anteriormente funciona en todas las versiones.
Versiones anteriores de Ubuntu y Debian
En versiones de Ubuntu anteriores a 22.04 y versiones de Debian anteriores a 12, SSH no se gestiona mediante la activación por socket. Abra el archivo de configuración de SSH:
nano /etc/ssh/sshd_config
Busque la siguiente línea:
Port 22
Quite el comentario y sustituya 22 por el número de puerto que haya elegido:
Port 22777
Guarde el archivo y valide la configuración:
sshd -t
Si no se encuentra el comando, utilice:
/usr/sbin/sshd -t
Si el comando no devuelve ninguna salida, la configuración es válida. Reinicie el servicio SSH:
systemctl restart ssh
Desactivar la activación mediante socket
Si prefiere gestionar SSH mediante el servicio tradicional en lugar del socket, puede desactivar la activación mediante socket:
systemctl disable --now ssh.socket systemctl enable --now ssh
Después de esto, edite sshd_config como se ha descrito anteriormente y reinicie SSH con:
systemctl restart ssh
Cambiar el puerto SSH en AlmaLinux, Rocky Linux y CentOS
Editar el archivo de configuración de SSH
Abra el archivo de configuración de SSH:
nano /etc/ssh/sshd_config
Busque la siguiente línea:
Port 22
Quite el comentario y sustituya 22 por el número de puerto que haya elegido:
Port 22777
Guarde el archivo y valide la configuración:
/usr/sbin/sshd -t
Si el comando no devuelve ninguna salida, la configuración es válida. Reinicie el servicio SSH:
systemctl restart sshd
Compruebe que el servicio está en ejecución:
systemctl status sshd
Permitir el puerto en SELinux
En los sistemas con SELinux habilitado, también debe permitir el nuevo puerto en la política de SELinux. Para comprobar qué puertos están actualmente permitidos para SSH, ejecute:
semanage port -l | grep ssh
A continuación, añada o modifique el nuevo puerto:
semanage port -a -t ssh_port_t -p tcp 22777 || semanage port -m -t ssh_port_t -p tcp 22777
Si semanage no está instalado, instale el paquete necesario:
dnf install policycoreutils-python-utils
Configurar el firewall
Permita siempre el nuevo puerto en el firewall antes de reiniciar SSH. Si reinicia SSH primero, puede perder el acceso al servidor.
UFW
ufw allow 22777/tcp ufw reload ufw status
firewalld
firewall-cmd --permanent --zone=public --add-port=22777/tcp firewall-cmd --reload
iptables
iptables -I INPUT -p tcp --dport 22777 -j ACCEPT iptables-save > /etc/iptables/rules.v4
El comando iptables-save guarda las reglas en un archivo únicamente si iptables-persistent está instalado y configurado en el sistema. Para instalarlo, ejecute:
apt install -y iptables-persistent
Compruebe que su distribución utiliza este archivo antes de confiar en él para la persistencia. Tenga en cuenta que los sistemas modernos pueden utilizar nftables en lugar de iptables. Si utiliza nftables, añada una regla que permita el nuevo puerto en la configuración de nftables.
Configurar Fail2Ban
Si Fail2Ban está configurado en el servidor, actualice el puerto SSH en su configuración. Abra /etc/fail2ban/jail.local o el archivo correspondiente en /etc/fail2ban/jail.d/ y establezca:
port = 22777
Después de actualizar la configuración, reinicie Fail2Ban:
systemctl restart fail2ban
Verificar el nuevo puerto
Compruebe que SSH está escuchando en el nuevo puerto:
ss -tlnp | grep :22777
Como alternativa, puede mostrar todos los listeners relacionados con SSH:
ss -tlnp | grep ssh
En sistemas antiguos, utilice netstat en su lugar:
netstat -tlnp | grep :22777
También puede comprobar directamente el estado del servicio.
En Ubuntu y Debian:
systemctl status ssh.socket
En AlmaLinux, Rocky Linux y CentOS:
systemctl status sshd
Sin cerrar la sesión SSH actual, abra una nueva ventana de terminal y conéctese utilizando el nuevo puerto:
ssh root@YOUR_SERVER_IP -p 22777
Si la conexión se realiza correctamente, puede cerrar la sesión anterior. A continuación, elimine el puerto 22 de las reglas del firewall si ya no es necesario.
Para UFW:
ufw delete allow 22/tcp ufw reload
Para firewalld:
firewall-cmd --permanent --zone=public --remove-port=22/tcp firewall-cmd --reload
No elimine el puerto 22 del firewall antes de verificar que el nuevo puerto funciona. Si la nueva conexión falla, utilice la sesión SSH abierta para solucionar el problema o revertir los cambios:
systemctl revert ssh.socket cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config rm -f /etc/ssh/sshd_config.d/10-port.conf systemctl daemon-reload systemctl restart ssh.socket
Si la activación mediante socket está deshabilitada, sustituya los dos últimos comandos por:
systemctl restart ssh
Conclusión
Cambiar el puerto SSH predeterminado de 22 a un puerto personalizado puede reducir la exposición a escaneos automatizados e intentos básicos de fuerza bruta. Sin embargo, cambiar el puerto debe considerarse una medida de seguridad adicional y no un sustituto de una correcta protección de SSH.
Mantenga siempre abierta la sesión SSH actual hasta que se haya conectado correctamente mediante el nuevo puerto. Una vez verificada la nueva conexión, puede cerrar de forma segura la sesión anterior y eliminar el puerto 22 del firewall si ya no es necesario.