Androide

Cómo verificar (escanear) los puertos abiertos en Linux

Escaneo de puertos con Nmap

Escaneo de puertos con Nmap

Tabla de contenido:

Anonim

Si está solucionando 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 el puerto abierto?

Un puerto de escucha es un puerto de red en el que escucha una aplicación. 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 abrirse o cerrarse (filtrarse) usando un firewall.

En términos generales, un puerto abierto es un puerto de red que acepta paquetes entrantes de 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, cualquiera (excepto los ips bloqueados) 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 presentar un riesgo de seguridad ya que los atacantes pueden utilizar cada puerto abierto 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.

Verifique los puertos abiertos con nmap

Nmap es una poderosa herramienta de escaneo de red que puede escanear hosts únicos 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 escaneo de puertos. Además del escaneo de puertos, nmap también puede detectar la dirección Mac, el tipo de sistema operativo, las versiones del kernel y mucho más.

El siguiente comando emitido desde la consola determina qué puertos están escuchando conexiones TCP desde la red:

sudo nmap -sT -p- 10.10.8.8

-sT le dice a nmap que -sT puertos TCP y -p- que -p- todos los puertos 65535. Si no se usa -p- nmap escaneará solo 1000 puertos.

Starting Nmap 7.60 (https://nmap.org) at 2019-07-09 23:10 CEST Nmap scan report for 10.10.8.8 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

El resultado anterior muestra que solo los puertos 22 , 80 y 8069 están abiertos en el sistema de destino.

Para buscar puertos UDP, use -sU 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.

Verifique los puertos abiertos con netcat

Netcat (o 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 la 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

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

La salida se verá más o menos así:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port succeeded!… Connection to 10.10.8.8 80 port succeeded!

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 buscar puertos UDP, pase la opción -u al comando nc :

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

Verifique los puertos abiertos utilizando el pseudo dispositivo Bash

Otra forma de verificar si cierto puerto está abierto o cerrado es utilizando el shell Bash /dev/tcp/.. o /dev/udp/.. pseudo dispositivo.

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

La siguiente instrucción kernel.org verificará si el puerto 443 en kernel.org está abierto:

if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi

Port is open

¿Cómo funciona el código anterior?

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

También puede usar el bucle for para verificar un rango de puertos:

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

La salida se verá más o menos así:

port 22 is open port 80 is open

Conclusión

Le hemos mostrado varias herramientas que puede usar para buscar puertos abiertos. También hay otras utilidades y métodos para verificar puertos abiertos, por ejemplo, puede usar el módulo de socket Python, curl , telnet o wget .

terminal