Abrir puertos en Linux es una tarea esencial que permite que ciertos servicios o aplicaciones intercambien datos a través de la red.
Los puertos actúan como canales de comunicación, permitiendo el acceso a servicios autorizados y bloqueando las conexiones no deseadas. Una correcta gestión de los puertos es clave para mantener seguridad, rendimiento estable y funcionamiento fiable del sistema.
Los puertos son puntos finales lógicos de comunicación de red, donde los dispositivos envían y reciben información.
Ejemplos comunes:
HTTP usa el puerto 80
HTTPS usa el puerto 443
SSH usa el puerto 22
Un puerto abierto indica que hay un servicio escuchando y aceptando tráfico entrante a través de él. Un puerto cerrado bloquea la comunicación. Gestionar correctamente los puertos abiertos en Linux es fundamental para mantener disponibilidad y seguridad.
Antes de abrir un puerto, conviene verificar qué puertos están actualmente activos. Existen varias herramientas y comandos de Linux para hacerlo.
Ejecuta el siguiente comando para mostrar los puertos abiertos:
netstat -tuln
La opción -tuln limita la salida a puertos TCP y UDP, sin resolver nombres de host.

Nota: si netstat no está instalado:
sudo apt install net-tools
El comando ss es una versión moderna y más rápida de netstat:
ss -tuln

Muestra los puertos en uso y la información de los sockets activos.
Para un análisis más detallado de los puertos abiertos:
nmap localhost
nmap analiza el host especificado (en este caso, localhost) y muestra los puertos accesibles. Es útil para identificar qué servicios están expuestos a la red pública.

Nota: instala nmap con:
sudo apt install nmap
Para permitir el acceso a través de un puerto específico, es necesario modificar las reglas del firewall. Linux ofrece varias herramientas para gestionar esto: iptables, ufw y firewalld.
A continuación, te mostramos cómo usarlas.
iptables es una herramienta potente y de bajo nivel que proporciona control detallado sobre el tráfico de red.
Ejemplo: habilitar acceso HTTP en el puerto 8080:
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
Explicación:
sudo: ejecuta el comando con privilegios de administrador
-A INPUT: agrega la regla a la cadena de entrada (tráfico entrante)
-p tcp: aplica la regla al protocolo TCP
--dport 8080: especifica el puerto 8080
-j ACCEPT: acepta el tráfico que cumpla la regla
Estas reglas no son permanentes: se pierden al reiniciar el sistema.

sudo apt install iptables iptables-persistent
Para hacer que las reglas persistan después del reinicio:
sudo netfilter-persistent save

Esto almacena las reglas actuales para que se apliquen automáticamente al reiniciar.
sudo netfilter-persistent reload

ufw es una interfaz simplificada para iptables que facilita la gestión de reglas del firewall.
sudo ufw enable

Si no está instalado:
sudo apt install ufw
Ejemplo: abrir la puerta 22 (SSH):
sudo ufw allow 22/tcp
Esto permite conexiones TCP entrantes al puerto 22, generalmente usadas para acceso remoto SSH.

Ver el estado del firewall
sudo ufw status
Muestra todas las reglas activas y los puertos abiertos.

firewalld es un servicio de firewall dinámico más flexible y fácil de configurar que iptables.
Ejemplo: abrir la puerta 443 (HTTPS):
sudo firewall-cmd --permanent --add-port=443/tcp

Instala y activa firewalld con:
sudo apt install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld
Recargar las reglas
sudo firewall-cmd --reload

Comprobar si el puerto está abierto
sudo firewall-cmd --list-all
Muestra todas las zonas y reglas activas, incluidas las puertas abiertas.

Después de abrir un puerto, verifica si realmente está accesible.
telnet localhost port_number
Si la conexión se establece, el puerto está abierto y operativo.

nmap -p port_number localhost
Verifica si el puerto especificado está accesible en el host local.

curl localhost:port_number
Si el servicio responde, significa que está activo en esa puerta.

Si el puerto no se abre correctamente:
Verifica las reglas del firewall:
Comprueba el estado del servicio:
Dependiendo del servicio, puede ser necesario usar TCP o UDP.
Ejemplo: permitir tráfico MySQL en el puerto 3306:
sudo ufw allow 3306/tcp

Ejemplo: permitir tráfico SNMP en el puerto 161:
sudo ufw allow 161/udp

UDP proporciona comunicación más rápida y sin conexión, ideal para herramientas de monitoreo.
Restringir el acceso a una IP específica
sudo ufw allow from 192.168.1.100 to any port 22
Esto permite acceso SSH al puerto 22 solo desde esa dirección IP, mejorando la seguridad.

sudo ufw deny 80/tcp
Bloquea el tráfico entrante por el puerto 80 (HTTP).

Comprobar y abrir puertos en Linux es fundamental para optimizar el funcionamiento de red y mantener la seguridad de los servicios. Con herramientas como iptables, ufw y firewalld, puedes controlar el tráfico de forma segura y flexible. Siempre prueba tus configuraciones con nmap, curl o telnet para confirmar que el puerto está correctamente abierto.
Una buena gestión de puertos garantiza servidores estables, conexiones seguras y un rendimiento confiable.