ya sea que esté resolviendo problemas de conectividad de red o configurando un firewall, una de las primeras cosas que debe verificar es qué puertos están realmente abiertos en su sistema.

Este artículo describe varios enfoques para averiguar qué puertos están abiertos al exterior en su sistema Linux.

Qué es Open Port #

un puerto de escucha es un puerto de red en el que una aplicación escucha., Puede obtener una lista de los puertos de escucha en su sistema consultando la pila de red con comandos como ss, netstat o lsof. Cada puerto de escucha puede ser abierto o cerrado (filtrado) usando un firewall.

en términos generales, un puerto abierto es un puerto de red que acepta paquetes entrantes desde ubicaciones remotas.,

por ejemplo, si está ejecutando un servidor web que escucha en los puertos 80 y 443 y esos puertos están abiertos en su firewall, cualquier persona (excepto las IP bloqueadas) podrá acceder a los sitios web alojados en su servidor web utilizando su navegador. En este caso, tanto 80 como 443 son puertos abiertos.

Los puertos abiertos pueden suponer un riesgo de seguridad, ya que cada puerto abierto puede ser utilizado por los atacantes para explotar una vulnerabilidad o realizar cualquier otro tipo de ataque., Debe exponer solo los puertos necesarios para la funcionalidad de su aplicación y cerrar todos los demás puertos.

compruebe los puertos abiertos con nmap #

Nmap es una potente herramienta de escaneo de red que puede escanear hosts individuales y redes grandes. Se utiliza principalmente para auditorías de seguridad y pruebas de penetración.

si está disponible, nmap debería ser su primera herramienta cuando se trata de escanear puertos. Además del escaneo de puertos, nmap también puede detectar la dirección Mac , el tipo de sistema operativo , las versiones del núcleo y mucho más.,

El siguiente comando emitido desde la consola determina que los puertos están escuchando para las conexiones TCP de la red:

sudo nmap -sT -p- 10.10.8.8

El -sT dice nmap escanear los puertos TCP y -p- escanear para todos los 65535 puertos. Si no se usa -p- nmap escaneará solo los 1000 puertos más populares.

El resultado anterior muestra que sólo los puertos 22, 80 y 8069 se abrió en el sistema de destino.,

para buscar puertos UDP use -sU en lugar de -sT:

sudo nmap -sU -p- 10.10.8.8

para obtener más información, visite la página de manual de nmap y lea sobre todas las otras opciones poderosas de esta herramienta.

compruebe los puertos abiertos con netcat #

Netcat (or nc) es una herramienta de línea de comandos que puede leer y escribir datos a través de conexiones de red, utilizando los protocolos TCP o UDP.

Con netcat puede escanear un solo puerto o un rango de puertos.,

por ejemplo, para buscar puertos TCP abiertos en una máquina remota con dirección IP 10.10.8.8 en el rango 20-80 usaría el siguiente comando:

nc -z -v 10.10.8.8 20-80

el -z le dice a nc que busque solo puertos abiertos, sin enviar ningún dato y el -v es para obtener información más detallada.,

la salida se verá algo como esto:

si desea que solo se impriman en la pantalla las líneas con los puertos abiertos, filtre los resultados con el comando grep.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port succeeded!Connection to 10.10.8.8 80 port succeeded!

Para escaneo de puertos UDP pasar el -u la opción nc comando:

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
2>&1 construir redirigir el error estándar a la salida estándar.,

comprobar los puertos abiertos utilizando el Pseudo dispositivo Bash #

otra forma de comprobar si un determinado puerto está abierto o cerrado es mediante el shell Bash /dev/tcp/.. o /dev/udp/.. pseudo-dispositivo.

al ejecutar un comando en un pseudo-dispositivo /dev/$PROTOCOL/$HOST/$IP, Bash abrirá una conexión TCP o UDP al host especificado en el puerto especificado.

el siguiente si..,otra declaración que se compruebe si el puerto 443 en el kernel.org está abierto:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'then echo "Port is open"else echo "Port is closed"fi
Port is open

¿Cómo funciona el código anterior funciona?

cuando se conecta a un puerto utilizando un pseudo-dispositivo, el tiempo de espera predeterminado es enorme, por lo que estamos utilizando el comando timeout para eliminar el comando de prueba después de 5 segundos. Si se establece la conexión a kernel.org port 443 el comando test devolverá true.,

comprobar para un rango de puertos utilizar el bucle for :

for PORT in {20..80}; do timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"done

El resultado será algo parecido a esto:

port 22 is openport 80 is open

Conclusión #

Hemos mostrado varias herramientas que puede utilizar para escanear los puertos abiertos. También hay otros servicios públicos y los métodos para comprobar los puertos abiertos, por ejemplo, puede utilizar el Python socket módulo, curl , telnet o wget .