Cómo abrir puertos y listar puertos abiertos en Linux
Al trabajar con redes en Linux, puede ser necesario abrir o cerrar un puerto de red. La gestión de puertos es esencial para la seguridad: cuantos menos puertos abiertos tenga un sistema, menos vectores de ataque potenciales existen. Además, si un puerto está cerrado, un atacante no puede recopilar información sobre el servicio que se ejecuta en ese puerto específico.
Esta guía explica cómo abrir o cerrar puertos y cómo comprobar los puertos abiertos en distribuciones de Linux como Ubuntu/Debian y CentOS/RHEL utilizando cortafuegos como ufw, firewalld e iptables.
Demostraremos este proceso en dos distribuciones Linux: Ubuntu 22.04 y CentOS 9, ejecutadas en un VPS de Hostman. Todos los comandos proporcionados aquí funcionarán en cualquier distribución basada en Debian o RHEL.
¿Qué es un puerto de red? Copiar enlace
Los puertos se utilizan para acceder a aplicaciones y protocolos específicos. Por ejemplo, un servidor puede alojar tanto un servidor web como una base de datos — los puertos dirigen el tráfico al servicio adecuado. Técnicamente, un puerto de red es un número entero no negativo que va de 0 a 65535.
-
Puertos reservados (0–1023): utilizados por protocolos y servicios de red populares como SSH (puerto 22), FTP (puerto 21), HTTP (puerto 80) y HTTPS (puerto 443).
-
Puertos registrados (1024–49151): pueden ser utilizados por aplicaciones específicas para comunicarse.
- Puertos dinámicos (49152–65535): se usan para conexiones temporales y pueden asignarse dinámicamente a aplicaciones.
Cómo abrir puertos en distribuciones basadas en Debian Copiar enlace
En sistemas basados en Debian (Ubuntu, Debian, Linux Mint, etc.), puedes usar ufw (Uncomplicated Firewall).
ufw viene preinstalado en la mayoría de las distribuciones basadas en APT. Para verificar si está instalado:
ufw versionSi se muestra una versión, ufw está instalado. De lo contrario, instálalo con:
apt update && apt -y install ufwPor defecto, ufw está inactivo, lo que significa que todos los puertos están abiertos. Puedes verificar su estado con:
ufw statusPara activarlo:
ufw enableDeberás confirmar con y. Ten en cuenta que habilitar ufw puede interrumpir las conexiones SSH actuales. Por defecto, ufw bloquea todo el tráfico entrante y permite todo el tráfico saliente.
Para comprobar la política por defecto:
cat /etc/default/ufw
Abrir puertos con ufw Copiar enlace
Para abrir un puerto:
ufw allow <port_number>Ejemplo — abrir el puerto 22 para SSH:
ufw allow 22Puedes abrir varios puertos separándolos con comas y especificando el protocolo (tcp o udp):
ufw allow 80,443,8081,8443/tcp
ufw allow 80,443,8081,8443/udpEn lugar de números de puerto, puedes usar el nombre del servicio (definido en /etc/services).

Ejemplo — abrir Telnet (puerto 23):
ufw allow telnetNota: No puedes especificar varios nombres de servicios a la vez; ufw devolverá un error:

Para abrir un rango de puertos:
ufw allow <start_port>:<end_port>/<protocol>Ejemplo:
ufw allow 8000:8080/tcpCerrar puertos con ufw Copiar enlace
Para cerrar un puerto:
ufw deny <port_number>Ejemplo — cerrar el puerto 80:
ufw deny 80También puedes usar el nombre del servicio. Ejemplo — cerrar FTP (puerto 21):
ufw deny ftpVer puertos abiertos con ufw Copiar enlace
Para listar todos los puertos abiertos y cerrados:
ufw status
O para una vista más detallada:
ufw status verboseCómo abrir un puerto en distribuciones basadas en RHEL Copiar enlace
Las distribuciones basadas en RHEL (CentOS 7+, RHEL 7+, Fedora 18+, OpenSUSE 15+) usan firewalld por defecto.
Abrir puertos con firewalld Copiar enlace
Verifica si firewalld está instalado:
firewall-offline-cmd -VSi se muestra una versión, firewalld está instalado. Si no, instálalo:
dnf install firewalldPor defecto, firewalld está deshabilitado. Verifica su estado:
firewall-cmd --statePara habilitarlo:
systemctl start firewalldAbrir el puerto 8080 para TCP:
firewall-cmd --zone=public --add-port=8080/tcp --permanent--zone=public: especifica la zona de la regla.--add-port=8080/tcp: especifica el puerto y el protocolo.--permanent: guarda la regla de forma permanente.

También puedes abrir un servicio utilizando su nombre, por ejemplo HTTP (puerto 80):
firewall-cmd --zone=public --add-service=http --permanentAplicar los cambios:
firewall-cmd --reloadCerrar puertos con firewalld Copiar enlace
Para cerrar un puerto por número:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
O por nombre del servicio:
firewall-cmd --zone=public --remove-service=http --permanentRecarga siempre después de los cambios:
firewall-cmd --reloadListar puertos abiertos con firewalld Copiar enlace
Para listar todos los puertos abiertos:
firewall-cmd --list-portsGestionar puertos con iptables Copiar enlace
A diferencia de ufw y firewalld, iptables viene preinstalado en muchas distribuciones (Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux).
Abrir puertos con iptables Copiar enlace
Para abrir el puerto 8182 para conexiones entrantes:
iptables -A INPUT -p tcp --dport 8182 -j ACCEPT-A INPUT: agrega una regla a la cadena INPUT.-p tcp: especifica el protocolo.--dport 8182: especifica el puerto a abrir.-j ACCEPT: permite el tráfico a través del puerto.
Para conexiones salientes:
iptables -A OUTPUT -p tcp --dport 8182 -j ACCEPTPara abrir un rango de puertos:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j ACCEPTCerrar puertos con iptables Copiar enlace
Para cerrar un puerto:
iptables -A INPUT -p tcp --dport 8182 -j DROPCerrar un rango de puertos:
iptables -A INPUT -p tcp --match multiport --dports 1024:2000 -j DROPGuardar reglas de iptables Copiar enlace
Por defecto, las reglas de iptables solo son efectivas hasta que se reinicie el servidor. Para guardarlas permanentemente, instala iptables-persistent:
Para sistemas basados en APT:
apt update && apt -y install iptables-persistentPara sistemas basados en DNF:
dnf -y install iptables-persistentGuardar las reglas actuales:
iptables-saveLas reglas se recargarán automáticamente tras el siguiente reinicio.
Ver puertos abiertos con iptables Copiar enlace
Listar todas las reglas y puertos abiertos:
iptables -L -v -nListar solo reglas IPv4:
iptables -SListar reglas IPv6:
ip6tables -SConclusión Copiar enlace
En esta guía hemos mostrado cómo abrir y cerrar puertos de red en Linux y cómo comprobar los puertos abiertos actualmente utilizando tres herramientas diferentes: ufw, firewalld e iptables. Una gestión adecuada de los puertos reduce el riesgo de posibles ataques a la red y ayuda a ocultar información sobre los servicios que utilizan esos puertos.