Introducción
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 cómo usar Nmap y Bash Pseudo Device para averiguar qué puertos están abiertos al exterior en el sistema Linux.
Un puerto de escucha es un puerto de red en el que escucha una aplicación. Puede obtener una lista de 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.
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, esos puertos están abiertos en su firewall, cualquier persona (excepto ips bloqueados) podrá acceder a los sitios web alojados en el servidor web a través de su navegador. En este caso, ambos puertos 80 y 443 están abiertos.
Los puertos abiertos pueden representar un riesgo para la seguridad, ya que los atacantes pueden utilizar cualquier puerta abierta para aprovechar una vulnerabilidad o realizar cualquier otro tipo de ataque. Debe exponer solo los puertos necesarios para la funcionalidad de la aplicación y cerrar todos los demás puertos.
Compruebe si hay puertos abiertos con nmap
Nmap es una poderosa herramienta de escaneo de redes 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 de buscar puertos nmap, también puede detectar la dirección Mac, el tipo de sistema operativo, las versiones del kernel y mucho más.
Emita el siguiente comando de consola para determinar qué puertos están escuchando conexiones TCP desde la red:
sudo nmap -sT -p- 10.10.8.8
La bandera -sT con nmap es para buscar puertos TCP y -p- para buscar todos los puertos 65535. Si -p- no se usa nmap, solo escaneará 1000 puertos.
Starting Nmap 7.60 ( https://nmap.org ) at 2019-09-09 09:11 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: 01:00:21:22:01:88 (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 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 todas las otras opciones poderosas de esta herramienta.
Encontrar puertos abiertos usando Bash Pseudo Device
Otra forma de comprobar si un puerto determinado está abierto o cerrado es utilizando el pseudodispositivo Bash shell /dev /tcp /.. o /dev /udp /...
Cuando ejecuta 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 declaración se usa para verificar si el puerto 443 en kernel.org está abierto:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Porta aperta"
else
echo "Porta chiusa"
fi
Port aperta
El tiempo de espera predeterminado cuando se conecta a un puerto usando un pseudodispositivo es enorme, por lo que estamos usando el comando timeout para terminar el comando de prueba después de 5 segundos. Si la conexión se establece para kernel.org con el puerto 443, 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/tcp/10.10.8.8/$PORT &>/dev/null" && echo "porta $PORT aperta"
done
La salida se verá así:
port 22 aperta
port 80 aperta
Conclusión
Le hemos mostrado varias herramientas que puede utilizar para buscar puertas abiertas. También hay otras utilidades y métodos para verificar puertos abiertos, por ejemplo, puede usar el socket de Python, curl, telnet o wget.