Cambiar el puerto SSH en CentOS 7 y CentOS 8: guía paso a paso
Cambiar el puerto predeterminado de SSH (22) reduce el ruido de los ataques automatizados, pero por sí solo no constituye una defensa completa. Es una medida básica que debe complementarse con autenticación por clave pública, desactivación del acceso root vía SSH y herramientas como fail2ban para bloquear intentos repetidos. Antes de comenzar, asegúrate de tener acceso root o privilegios sudo y, preferiblemente, acceso a la consola del servidor para evitar quedar bloqueado si algo falla.

Paso 1: Instalar un editor de texto
Para editar el archivo de configuración necesitas un editor sencillo. nano es amigable para principiantes; vim es una alternativa potente si ya lo dominas.
- En CentOS 7:
yum -y install nano - En CentOS 8:
dnf -y install nano(el comandoyumsigue funcionando como capa de compatibilidad, perodnfes el gestor predeterminado). En instalaciones mínimas puede ser necesario usar explícitamentednfsiyumno está presente.
Si prefieres vim, sustituye nano por vim en los comandos anteriores.
Paso 2: Editar la configuración del daemon SSH
Abre el archivo de configuración principal:
nano /etc/ssh/sshd_config
Localiza la línea que comienza con #Port 22, elimina el símbolo de almohadilla y cambia 22 por el número de puerto que deseas usar (por ejemplo, 22666). La línea debe quedar así:
Port 22666
Guarda los cambios y cierra el editor (Ctrl + X, luego Y y Enter en nano).
Paso 3: Configurar SELinux para el nuevo puerto
Cuando SELinux está en modo enforcing, es necesario indicar explícitamente que el nuevo puerto puede ser utilizado por sshd. El comando semanage port pertenece al paquete policycoreutils-python-utils.
Instala el paquete si no está presente:
- CentOS 7:
yum -y install policycoreutils-python-utils - CentOS 8:
dnf -y install policycoreutils-python-utils(en instalaciones mínimas puede ser necesario usardnfdirectamente).
Luego asigna el tipo SELinux adecuado al puerto TCP elegido:
semanage port -a -t ssh_port_t -p tcp 22666
Este comando permite que sshd escuche en el puerto 22666 bajo las políticas de SELinux. Si el comando semanage no se encuentra después de instalar el paquete, verifica que el repositorio BaseOS esté habilitado y repite la instalación.
Paso 4: Abrir el puerto en el firewall
Advertencia: si no utilizas firewalld y gestionas el firewall directamente con iptables o nftables, deberás agregar la regla correspondiente antes de continuar. Las instrucciones siguientes asumen firewalld, el firewall predeterminado en CentOS 7 y 8.
Agrega el puerto a la zona pública y recarga la configuración:
firewall-cmd --permanent --zone=public --add-port=22666/tcp
firewall-cmd --reload
Si usas iptables (por ejemplo, en un servidor sin firewalld), agrega una regla manual:
iptables -A INPUT -p tcp --dport 22666 -j ACCEPT
Y guarda las reglas para que persistan tras un reinicio (por ejemplo, service iptables save o iptables-save > /etc/sysconfig/iptables).
Importante: mantén el puerto 22 abierto temporalmente hasta que verifiques que el nuevo puerto funciona correctamente. Esto evita un bloqueo accidental.
Paso 5: Reiniciar el servicio SSH
Aplica los cambios reiniciando el daemon SSH con systemctl, el método estándar en ambas versiones:
systemctl restart sshd
Los comandos alternativos (service sshd restart o /etc/init.d/sshd restart) aún funcionan, pero systemctl es preferible en sistemas modernos.
Paso 6: Verificar que el puerto está escuchando
Confirma que el servicio SSH está vinculado al nuevo puerto:
ss -tnlp | grep ssh
La salida debería mostrar algo como:
LISTEN 0 128 *:22666 *:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 [::]:22666 [::]:* users:(("sshd",pid=1234,fd=4))
Si ss no está disponible, puedes usar netstat:
netstat -tlnp | grep :22666
Paso 7: Probar la conexión desde una nueva sesión
Antes de cerrar tu sesión SSH actual, abre una nueva terminal y prueba la conexión al nuevo puerto:
ssh -p 22666 tu_usuario@tu_servidor
Si la conexión se establece correctamente, puedes proceder a cerrar la sesión anterior. Si falla, revisa los pasos anteriores: configuración de sshd_config, SELinux, firewall y estado del servicio.
Solo después de verificar el acceso exitoso mediante el nuevo puerto, considera cerrar el puerto 22 en el firewall (si no lo necesitas para otros servicios):
firewall-cmd --permanent --zone=public --remove-port=22/tcp
firewall-cmd --reload
Recuerda que cambiar el puerto es solo una capa adicional. Para una seguridad robusta, combina esta medida con autenticación por clave pública, desactivación del acceso root vía SSH (PermitRootLogin no) y herramientas como fail2ban para bloquear intentos repetidos.
