Escaneo de puertos con Nmap
Tabla de contenido:
- ¿Qué es el puerto abierto?
- Verifique los puertos abiertos con
nmap
- Verifique los puertos abiertos con
netcat
- Verifique los puertos abiertos utilizando el pseudo dispositivo Bash
- Conclusión
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
.
Panel: Los teléfonos abiertos son más vulnerables
La apertura de las plataformas de software móvil generará más peligros, dijeron los ejecutivos de seguridad.
Guarde los cambios en todos los documentos abiertos en ms word a la vez
¿Tienes muchos documentos abiertos de MS Word? Debe guardar los cambios a la vez para evitar problemas. Aquí hay un consejo rápido que le muestra cómo hacerlo.
Cómo verificar los puertos de escucha en Linux (puertos en uso)
Este artículo explica cómo averiguar los puertos en uso y qué servicios están escuchando en qué puertos utilizando los comandos netstat, ss y lsof. Las instrucciones son aplicables para todos los sistemas operativos basados en Linux y Unix como macOS.