Localizar y cerrar puerto abierto en Linux
Localizar y cerrar puerto abierto en Linux

Cómo Localizar y Cerrar un Puerto Abierto en Linux

Localizar y bloquear puertos abiertos no deseados en Linux es una tarea fundamental para todo administrador de red que gestione servidores.

Como administrador de red, es posible que te enfrentes a varias máquinas Linux en tu centro de datos. Si has encontrado un tráfico extraño rebotando en tu red, tu curiosidad seguro se ha despertado. ¿Es posible que el tráfico esté haciendo uso de un puerto abierto en una máquina? Si es así, ¿dónde está el puerto y cómo puedes cerrar ese puerto en Linux de forma segura?

En sistemas Linux, esta tarea es directa. Aquí te mostramos cómo identificar qué puertos están escuchando conexiones y cómo cerrarlos correctamente. Este ejemplo lo realizamos en Parrot OS, pero el procedimiento es válido para la mayoría de distribuciones; lo único que puede cambiar es la herramienta de firewall.

¿Cómo cerrar un puerto en Linux?

Identifica los puertos de escucha en Linux con el comando sudo ss -tulnp.

Analiza la salida para encontrar el puerto y el servicio que deseas bloquear.

Utiliza el firewall para cerrar el puerto específico. Con UFW, el comando es sudo ufw deny PUERTO/PROTOCOLO.

Verifica que la regla del firewall se haya aplicado correctamente.

Lo que necesitarás

Para que esto funcione, todo lo que necesitarás es una instancia de una distribución Linux y una cuenta de usuario con privilegios de sudo.

Diagrama de un firewall Linux gestionando puertos de red
Un firewall bien configurado es la primera línea de defensa para la seguridad de un servidor.

Cómo saber si un puerto está abierto en Linux

Afortunadamente, no tienes que instalar ningún software para que esto funcione. Usaremos el comando ss, que es la herramienta actual y mantenida para inspeccionar sockets en Linux. netstat está obsoleto y no debería usarse en sistemas modernos. Si necesitas técnicas más avanzadas, puedes aprender a escanear puertos abiertos con otras herramientas como Nmap.

Todo esto se hace desde la línea de comandos, así que entra a tu servidor o conéctate por SSH y abre una terminal. Una vez en la terminal, ejecuta el comando con privilegios de administrador para ver qué procesos están escuchando en los puertos:

sudo ss -tulnp

Las opciones son las siguientes:

  • -t Mostrar solo sockets TCP en Linux
  • -u Mostrar solo sockets UDP en Linux
  • -l Mostrar sockets EN escucha (por ejemplo, el puerto TCP 22 es abierto por el servidor SSHD)
  • -p Lista el nombre del proceso que abrió el socket
  • -n No resuelve los nombres de servicio
OpciónSignificado¿Por qué usarla?
-tMuestra sockets TCPPara ver puertos TCP abiertos (como HTTP, SSH, etc.)
-uMuestra sockets UDPPara ver puertos UDP abiertos (como DNS, DHCP, etc.)
-lSolo sockets en escuchaFiltra solo los puertos que están esperando conexiones
-nNo resuelve nombresMuestra números de puerto en vez de nombres (más rápido y claro)
-pMuestra procesosIndica qué proceso está usando cada puerto (requiere sudo)
-wMuestra sockets RAWIrrelevante para puertos abiertos; no se recomienda en este contexto

La salida del comando enumerará solo los puertos de escucha y te permitirá ver cada Linux puerto en uso:

Listar puertos de escucha Linux con tulnp
Listar puertos de escucha Linux

Como puedes ver, solo hay un puñado de puertos de escucha en esta máquina (el puerto 34323 es utilizado por Remote-Touchpad para utilizar tu smartphone como mouse). Esa es una lista bastante corta de puertos.

El archivo /etc/services solo indica asignaciones estándar; no te dice qué demonio real está ocupando un puerto en tu máquina.

No es necesario consultar /etc/services para este proceso. Ese archivo es solo referencial y no indica qué servicio real está usando un puerto en tu sistema.

Listado de servicios y puertos estándar en Linux desde /etc/services
Fragmento del archivo /etc/services en Parrot OS, mostrando asignaciones estándar de puertos TCP y UDP.

Cómo cerrar un puerto en Linux con UFW

Supongamos que estás alojando un servidor web en la máquina pero no quieres que escuche el puerto 8080. En cambio, solo deseas que el tráfico pase por los puertos 80 (HTTP) y 443 (HTTPS). Para cerrar correctamente el puerto 8080, especifica siempre el protocolo. Así evitas reglas ambiguas y problemas futuros:

sudo ufw deny 8080/tcp

Deberías ver que las reglas se han actualizado y el puerto ahora está bloqueado. Si encuentras que el bloqueo de este puerto puede causar problemas con un servicio o aplicación, puedes volver a abrirlo o, en otras palabras, liberar el puerto en Linux con el comando:

sudo ufw allow 8080/tcp

El siguiente ejemplo lo utilizamos para el puerto 34323:

Abrir y cerrar puertos en Linux con comandos ufw
UFW simplifica la gestión de reglas de firewall para denegar o permitir tráfico en puertos específicos.

Y eso es todo lo que hay para localizar y cerrar un puerto de escucha en Linux. Este proceso debería funcionar en la mayoría de las distribuciones, la única advertencia será cómo bloqueas un puerto, ya que no todas las distribuciones usan ufw. Ten en cuenta que muchas distribuciones modernas ya no gestionan reglas directamente con iptables. Hoy es común encontrar nftables o firewalld como capa principal del firewall, y conviene conocer cuál usa tu sistema antes de tocar reglas.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda