¿Cómo abrir un puerto en CentOS/RHEL?

Publicado 27 de agosto de 2024

Problema: Abrir puertos en CentOS/RHEL

Abrir puertos en sistemas CentOS o RHEL es una tarea para administradores de sistemas y desarrolladores. Es necesario cuando se quiere permitir que cierto tráfico de red pase a través del firewall para llegar a servicios en tu servidor. El proceso puede ser confuso para quienes no están familiarizados con los firewalls de Linux, especialmente en estas distribuciones que usan firewalld por defecto.

Abriendo puertos en CentOS/RHEL

Usando FirewallD para gestionar puertos

FirewallD es la herramienta de firewall predeterminada para CentOS y RHEL. Se encarga de gestionar las reglas del firewall. Sigue estos pasos para abrir puertos con FirewallD:

  1. Verificar el estado de FirewallD:

    sudo firewall-cmd --state
  2. Listar puertos abiertos:

    sudo firewall-cmd --list-ports
  3. Abrir un puerto (por ejemplo, el puerto 80 para HTTP):

    sudo firewall-cmd --add-port=80/tcp --permanent
  4. Recargar las reglas del firewall:

    sudo firewall-cmd --reload

Configurando IPTables para acceso a puertos

IPTables es una herramienta de firewall más antigua. Úsala para abrir puertos:

  1. Verificar las reglas de IPTables:

    sudo iptables -L
  2. Añadir una regla para abrir un puerto (por ejemplo, el puerto 22 para SSH):

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  3. Guardar las nuevas reglas:

    sudo service iptables save
  4. Reiniciar IPTables:

    sudo service iptables restart

Ten cuidado al abrir puertos, ya que puede afectar la seguridad de tu sistema. Abre solo los puertos necesarios y monitorea los logs del firewall con frecuencia.

Verificando puertos abiertos en CentOS

Usando Netstat para listar puertos abiertos

Netstat es una herramienta para verificar puertos abiertos en tu sistema CentOS. Para usar netstat:

  1. Abre una terminal.
  2. Ejecuta este comando:
    sudo netstat -tuln

    Esto muestra todos los puertos TCP y UDP en estado de escucha.

La salida muestra:

  • Protocolo (TCP o UDP)
  • Dirección local y número de puerto
  • Dirección remota y número de puerto
  • Estado de la conexión

Por ejemplo:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

Esto significa que el puerto 22 (SSH) está abierto y escuchando conexiones.

Usando LSOF para verificar puertos en escucha

LSOF (List Open Files) es otra herramienta para identificar puertos abiertos. Para usar LSOF:

  1. Instala LSOF si no está en tu sistema:

    sudo yum install lsof
  2. Ejecuta este comando para ver los puertos en escucha:

    sudo lsof -i -P -n | grep LISTEN

Este comando muestra:

  • El nombre del proceso que usa el puerto
  • El usuario que ejecuta el proceso
  • El número de puerto

Por ejemplo:

sshd    1234    root    3u  IPv4  12345      0t0  TCP *:22 (LISTEN)

Esto muestra que el demonio SSH está escuchando en el puerto 22.

Tanto netstat como LSOF proporcionan información sobre los puertos abiertos en tu sistema CentOS, ayudándote a verificar la configuración de tu firewall.

Métodos alternativos para configurar puertos

Usando la herramienta System-Config-Firewall

System-config-firewall es una herramienta para gestionar la configuración del firewall en CentOS. Ofrece una interfaz visual para quienes prefieren esto sobre las operaciones en línea de comandos.

Para usar system-config-firewall:

  1. Instala la herramienta:

    sudo yum install system-config-firewall
  2. Inicia la aplicación:

    sudo system-config-firewall
  3. En la interfaz, selecciona "Otros puertos" y haz clic en "Añadir".

  4. Elige el protocolo (TCP o UDP) e ingresa el número de puerto.

  5. Haz clic en "Aplicar" para guardar los cambios.

Este método es útil para usuarios que prefieren herramientas visuales.

Gestión de puertos específica para la nube

Cuando ejecutas CentOS en plataformas en la nube, es posible que necesites considerar configuraciones adicionales del firewall para tu proveedor de nube.

Para CentOS alojado en la nube:

  1. Consulta la documentación de tu proveedor de nube para la gestión del firewall.

  2. Usa el panel de control de la plataforma en la nube o herramientas CLI para gestionar grupos de seguridad de red.

  3. Configura tanto el firewall de CentOS como el firewall del proveedor de nube para permitir el tráfico deseado.

  4. Algunos proveedores de nube pueden requerir que abras puertos a nivel de red antes de configurar el firewall a nivel del sistema operativo.

  5. Prueba tu configuración para asegurarte de que tanto el firewall de la nube como el del sistema operativo funcionen correctamente juntos.

Recuerda, los entornos en la nube pueden tener prácticas de seguridad diferentes en comparación con las configuraciones locales. Sigue siempre las pautas de seguridad de tu proveedor de nube al gestionar puertos y reglas de firewall.

Solución de problemas de acceso a puertos en CentOS

Cuando te enfrentas a problemas de acceso a puertos en CentOS, podrías encontrar estos inconvenientes. Aquí hay algunas soluciones para ayudarte a resolverlos:

  1. El puerto no se abre:

    • Verifica las reglas del firewall usando firewall-cmd --list-all
    • Añade el puerto a la zona correcta
    • Recarga el firewall después de hacer cambios
  2. El servicio no inicia:

    • Comprueba si el servicio está en ejecución con systemctl status nombre_del_servicio
    • Revisa los logs del servicio en busca de errores
    • Asegúrate de que el servicio use el puerto correcto
  3. Configuración incorrecta de SELinux:

    • Usa sestatus para verificar si SELinux está activado
    • Ejecuta semanage port -l | grep numero_de_puerto para verificar las etiquetas de puerto de SELinux
    • Si es necesario, añade el contexto SELinux correcto con semanage port -a -t etiqueta_de_puerto_t -p tcp numero_de_puerto
  4. Aplicaciones en conflicto:

    • Usa netstat -tuln o ss -tuln para verificar si otra aplicación está usando el puerto
    • Detén o cambia la aplicación en conflicto si es necesario

Para revisar los logs del firewall en busca de intentos de conexión:

  1. Activa el registro de paquetes denegados:

    sudo firewall-cmd --set-log-denied=all --permanent
    sudo firewall-cmd --reload
  2. Visualiza los logs del firewall:

    sudo journalctl -f -u firewalld
  3. Busca entradas con "FINAL_REJECT" o "FINAL_DROP" que muestren conexiones bloqueadas

  4. Revisa las entradas del log para encontrar la IP de origen, el puerto de destino y el protocolo del tráfico bloqueado