Conflictos de Puertos SSH: Cómo Identificar y Cambiar Puertos

Resuelva los frustrantes problemas de conexión SSH causados por conflictos de puertos. Esta guía detalla cómo identificar de forma definitiva el puerto SSH activo utilizando comandos del sistema (`ss`/`netstat`) y proporciona una metodología segura y paso a paso para modificar el archivo de configuración (`sshd_config`) y actualizar cortafuegos para cambiar a un nuevo número de puerto, lo que evita bloqueos.

42 vistas

Conflictos de Puertos SSH: Cómo Identificar y Cambiar Puertos

El protocolo Secure Shell (SSH) es la base del acceso remoto seguro y la gestión de servidores en todo el mundo. Por defecto, SSH opera en el puerto TCP 22. Sin embargo, en entornos de red complejos, configuraciones de múltiples servidores o entornos que priorizan la seguridad mediante la ofuscación, este puerto predeterminado puede ser reasignado. Cuando un sistema intenta conectarse a un servidor SSH que se está ejecutando en un puerto no estándar, o cuando dos servicios diferentes intentan vincularse al mismo puerto, se produce un conflicto de puertos, lo que a menudo resulta en errores frustrantes como "Conexión rechazada" o tiempos de espera agotados.

Esta guía le guiará a través de los pasos esenciales para diagnosticar si un conflicto de puerto SSH es la causa raíz de sus problemas de conectividad. Más importante aún, proporcionamos instrucciones prácticas y aplicables sobre cómo verificar de forma segura el puerto SSH activo actual y cómo cambiarlo dentro del archivo de configuración principal, garantizando una gestión remota fluida y segura.


Entendiendo los Conflictos de Puertos SSH

Un conflicto de puertos surge cuando dos servicios de red distintos intentan escuchar conexiones entrantes en el mismo número de puerto TCP o UDP. Dado que solo un proceso puede vincularse a un puerto específico en una dirección IP en un momento dado, el segundo servicio que intenta iniciarse generalmente fallará o pasará a un puerto diferente si está configurado para hacerlo.

Para SSH, si el puerto predeterminado 22 ya está en uso por otro servicio (aunque es raro en instalaciones de sistemas operativos estándar), el demonio SSH (sshd) no podrá iniciarse, lo que provocará fallos de conexión. A la inversa, si configuró manualmente sshd para usar un puerto personalizado (por ejemplo, 2222) pero sigue intentando conectarse usando el puerto 22, la conexión será rechazada por el firewall o simplemente agotará el tiempo de espera.

Problemas Comunes de Conexión Relacionados con Puertos

Al solucionar problemas de conectividad SSH, los problemas de puertos a menudo se manifiestan como:

  1. Conexión Rechazada: Esto generalmente significa que la máquina de destino es accesible, pero ningún servicio está escuchando activamente en el puerto especificado (o se utilizó el puerto incorrecto o el servicio SSH no se inició).
  2. Tiempo de Espera Agotado de Conexión: Esto a menudo indica que el tráfico destinado a ese puerto está siendo bloqueado por un firewall (ya sea basado en host o basado en red) o que el host en sí no es accesible.

Paso 1: Identificar el Puerto SSH Activo Actual

Antes de realizar cualquier cambio, debe confirmar qué puerto está utilizando realmente el demonio SSH. Esto requiere acceso administrativo (generalmente a través de la consola o una conexión exitosa existente).

A. Revisar el Archivo de Configuración SSH

La ubicación principal de la configuración de SSH es el archivo sshd_config. La directiva Port especifica en qué puerto escucha sshd.

Ubicación: /etc/ssh/sshd_config (Común en sistemas Linux/Unix)

Use un editor de texto como nano o vim para inspeccionar el archivo:

sudo nano /etc/ssh/sshd_config

Busque la línea que comienza con Port. Si está comentada (comienza con #), utiliza el valor predeterminado 22. Si hay un número presente, ese es el puerto activo.

#Port 22  <-- Por defecto es 22 si no está comentado o si esta línea falta por completo
Port 2222 <-- Este servidor está configurado para usar el puerto 2222

B. Verificar los Sockets de Escucha con netstat o ss

La forma más autorizada de confirmar a qué puerto está actualmente vinculado el servicio es verificando los sockets de escucha de red del sistema operativo. La herramienta moderna es ss, pero netstat todavía está ampliamente disponible.

Usando el comando ss (Recomendado en sistemas modernos):

Este comando muestra todos los escuchas TCP (-t), incluidos los procesos (-p), filtrando por el servicio SSH (grep sshd).

# Mostrar puertos de escucha TCP, incluido el ID de proceso que utiliza el puerto
sudo ss -tlpn | grep sshd

Salida de Ejemplo (Puerto Predeterminado):

LISTEN 0      128    0.0.0.0:22               0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Salida de Ejemplo (Puerto Personalizado 2222):

LISTEN 0      128    0.0.0.0:2222             0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Usando netstat (Alternativa):

sudo netstat -tulpn | grep sshd

Una vez que identifique el puerto (por ejemplo, 2222), debe usar ese número de puerto al conectarse desde un cliente remoto.


Paso 2: Cambiar el Puerto SSH de Forma Segura

Cambiar el puerto SSH es una práctica común de endurecimiento de la seguridad. Es crucial no cambiar el puerto antes de asegurarse de que su nueva configuración funcione, o corre el riesgo de quedarse fuera.

A. La Secuencia Segura para Cambiar Puertos

Siga estos pasos con precisión para evitar perder el acceso:

  1. Verificar Acceso al Firewall: Asegúrese de que el nuevo puerto esté abierto en el firewall basado en host (por ejemplo, ufw o firewalld) antes de reiniciar el servicio SSH.
  2. Editar Configuración: Modifique /etc/ssh/sshd_config al nuevo número de puerto.
  3. Probar Sintaxis de Configuración: Pruebe la sintaxis de configuración antes de reiniciar.
  4. Reiniciar Servicio SSH: Aplique los cambios.
  5. Probar Conexión Remota: Intente conectarse inmediatamente usando el nuevo puerto desde una sesión de terminal separada.
  6. Eliminar Regla de Puerto Antigua (Opcional): Una vez verificado, cierre el puerto antiguo (22) en el firewall.

B. Modificar /etc/ssh/sshd_config

Use su editor preferido para abrir el archivo de configuración:

sudo nano /etc/ssh/sshd_config

Localice la línea Port. Cambie el valor existente o descomente/agregue una nueva directiva Port. Cambiemos de 22 a 2222.

# Cambie esta línea:
Port 2222

Guarde y cierre el archivo.

C. Actualizar Firewalls Basados en Host (Paso Crucial)

Si omite esto, su conexión fallará con un tiempo de espera agotado después de que el servicio se reinicie.

Usando UFW (Ubuntu/Debian):

# 1. Permitir el nuevo puerto
sudo ufw allow 2222/tcp

# 2. Si desea eliminar la regla del puerto antiguo más tarde (después de probar):
# sudo ufw delete allow 22/tcp

sudo ufw status verbose

Usando Firewalld (RHEL/CentOS/Fedora):

# 1. Permitir el nuevo puerto permanentemente
sudo firewall-cmd --permanent --add-port=2222/tcp

# 2. Recargar reglas del firewall
sudo firewall-cmd --reload

D. Probar y Reiniciar el Demonio SSH

Siempre pruebe la sintaxis del archivo de configuración antes de reiniciar el servicio. Esto evita que los errores de sintaxis le bloqueen.

# Probar la sintaxis de configuración (la implementación específica puede variar según la distribución) 
# En sistemas que usan systemd, esto a menudo no es estrictamente necesario si reload funciona, 
# pero un reinicio simple es más seguro si realizó cambios importantes.

sudo systemctl restart sshd

# Comprobar el estado para asegurar que se inició correctamente sin errores
sudo systemctl status sshd

E. Conectar a través del Nuevo Puerto

Desde su máquina cliente, ahora debe especificar explícitamente el nuevo puerto utilizando la bandera -p con el comando ssh:

ssh username@your_server_ip -p 2222

Si la conexión es exitosa, ¡el cambio de puerto fue exitoso! Ahora puede eliminar de forma segura la regla del puerto antiguo de su firewall si es necesario.

⚠️ Advertencia sobre Cambios de Puertos SSH: Si cambia el puerto y no lo abre en el firewall, o si el servicio sshd no se reinicia, se quedará bloqueado. Asegúrese siempre de tener acceso a la consola o acceso administrativo alternativo (como una sesión VNC) al modificar estos servicios de red principales.


Solución de Problemas de Fallos de Conexión Después de Cambiar Puertos

Si recibe un error después de cambiar el puerto, siga esta breve lista de verificación:

Síntoma del Error Causa(s) Probable(s)
Conexión Rechazada 1. sshd no se inició (verifique systemctl status sshd). 2. Especificó el puerto incorrecto en el comando del cliente. 3. El firewall está permitiendo tráfico en el puerto antiguo (22) pero bloqueando el nuevo puerto (2222).
Tiempo de Espera Agotado de Conexión 1. El host está caído. 2. El firewall del host (UFW/firewalld) está descartando activamente paquetes para el nuevo puerto. 3. El firewall de la infraestructura de red está bloqueando el puerto.

Para confirmar que el demonio está escuchando, vuelva a ejecutar sudo ss -tlpn | grep sshd en el lado del servidor.

Conclusión

Los conflictos de puertos SSH, aunque a veces sutiles, se resuelven fácilmente al comprender dónde se encuentra la configuración del servicio (/etc/ssh/sshd_config) y verificar la vinculación del socket activo utilizando herramientas como ss o netstat. Al seguir un enfoque cauteloso y sistemático, especialmente con respecto a las actualizaciones del firewall antes de reiniciar el servicio, puede cambiar de forma segura su puerto SSH para mejorar la seguridad del servidor sin arriesgarse a quedarse bloqueado administrativamente.