GNU/Linux >> Tutoriales Linux >  >> Linux

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

Ya sea que 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 número de 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 se puede abrir o cerrar (filtrar) 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 usando su navegador. En este caso, ambos 80 y 443 son puertos abiertos.

Los puertos abiertos pueden representar un riesgo para la 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.

Verificar puertos abiertos con nmap #

Nmap es una poderosa 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 debe 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 kernel y mucho más.

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

sudo nmap -sT -p- 10.10.8.8

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

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 se abren 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 demás opciones poderosas de esta herramienta.

Verificar 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, usando 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 opción le dice a nc para escanear solo en busca de puertos abiertos, sin enviar ningún dato y el -v es para información más detallada.

La salida se verá 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 [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

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

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Para buscar puertos UDP, pase -u opción al nc comando:

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

Verificar puertos abiertos usando Bash Pseudo Device #

Otra forma de verificar si un determinado puerto está abierto o cerrado es usando el shell Bash /dev/tcp/.. o /dev/udp/.. pseudo-dispositivo.

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

La siguiente declaración if..else verificará si el puerto 443 en 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?

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

Para verificar un rango de puertos, use 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

La salida se verá así:

port 22 is open
port 80 is open

Conclusión #

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

Si tiene alguna pregunta o comentario, deje un comentario a continuación.


Linux
  1. Cómo verificar la versión de Redhat

  2. Cómo averiguar la lista de todos los puertos abiertos en Linux

  3. Cómo buscar puertos abiertos en Linux con netstat, lsof y nmap

  4. ¿Cómo cerrar puertos en Linux?

  5. Cómo comprobar los puertos de escucha/abiertos con Netstat en Linux

Cómo buscar puertos abiertos en Debian 10

Cómo comprobar que un puerto está abierto en un sistema Linux remoto

Cómo encontrar y cerrar puertos abiertos en Linux

Cómo usar Netcat para escanear puertos abiertos en Linux

Cómo verificar todos los puertos abiertos en su sistema Linux

¿Cómo comprobar los puertos abiertos en Linux?