En las redes, un puerto es una característica interesante. Es una forma para que el tráfico de red identifique la aplicación o servicio de destino. Cada proceso/servicio obtiene su puerto único. Un puerto siempre se asociará con la dirección IP del host junto con el protocolo.
Esta es una metáfora mía favorita para describir qué es un puerto. Imagine un barco cargado de carga, que viajará a una tierra distante. ¿Qué información se necesita para llegar correctamente al destino?? En aras de la simplicidad, digamos que necesita el país (la dirección IP) y el puerto el barco atracará.
En esta guía, consulte cómo enumerar los puertos abiertos en Linux.
Puertos en Linux
Los puertos actúan como un punto final de la comunicación. Es un número de 16 bits (0 a 65535 en decimal). Si bien el rango es grande, para facilitar el uso, los puertos se clasifican en tres categorías. Cada categoría está etiquetada como el rango de valor del puerto:
En Linux, hay múltiples formas de verificar los puertos abiertos. Por defecto, cualquier puerto permanecerá cerrado a menos que una aplicación lo esté utilizando. Si un puerto está abierto, entonces debe asignarse a un servicio/proceso.
Lista de puertos abiertos
Es más fácil identificar qué puertos están en uso en lugar de qué puertos están abiertos. Es por eso que la siguiente sección contará con métodos para enumerar todos los puertos que están actualmente en uso. En Linux, hay múltiples herramientas disponibles para la tarea. La mayoría de ellos vienen incorporados en cualquier distribución de Linux.
Aprender qué puertos están abiertos actualmente puede ser útil en varios escenarios. Es posible configurar un puerto dedicado para una determinada aplicación. Un puerto abierto también puede ser una fuerte indicación de intrusión en la red.
Los siguientes métodos se demuestran en Ubuntu 20.04.1 LTS.
Lista de protocolos y puertos abiertos desde /etc /servicios
El archivo /etc /servicios contiene información sobre los servicios en ejecución actualmente. Es un archivo grande, tan listo para sentirse abrumado.
$ CAT /ETC /SERVICIOS | menos
Enumere los puertos abiertos con NetStat
La herramienta NetStat es una utilidad para mostrar conexiones de red para TCP, tablas de enrutamiento y varias interfaces de red. También ofrece estadísticas de protocolo de red. Al usar NetStat, podemos enumerar todos los puertos abiertos del sistema.
Ejecute el siguiente comando NetStat:
$ netstat -atu
Tengamos un desglose rápido de todas las banderas que usamos en este comando.
Aquí hay otra variación del comando netstat:
$ netstat -lntu
Hay dos nuevas banderas utilizadas en el comando. Qué quieren decir?
Para mostrar el PID del proceso que usa un puerto, use el indicador "-P":
$ netstat -lntup
Enumere los puertos abiertos con SS
La herramienta SS es una utilidad para investigar el socket. Su uso es similar a Netstat.
Para enumerar los puertos abiertos, ejecute el siguiente comando SS:
$ ss -lntu
Las banderas son similares a Netstat. Las funciones que describen también son bastante similares.
Enumere los puertos abiertos con LSOF
El comando LSOF es enumerar los archivos abiertos. Sin embargo, también se puede usar para mostrar los puertos abiertos.
Ejecute el siguiente comando LSOF:
$ LSOF -I
Para obtener los puertos abiertos de un protocolo específico (TCP, UDP, etc.) luego defina después de la bandera "-i", use:
$ LSOF -I
Enumere los puertos abiertos con NMAP
La herramienta NMAP es poderosa para la exploración de redes y la seguridad/escaneo de puertos. Puede informar todos los puertos abiertos en el sistema.
Para enumerar los puertos TCP Open, ejecute el siguiente comando nmap. Aquí, la dirección IP es de la computadora host:
$ sudo nmap -st -p- localhost
Aquí, hay dos porciones del argumento de comando.
Si necesita enumerar los puertos UDP Open, luego ejecute el siguiente comando nmap:
$ sudo nmap -su -p- localhost
Para obtener los puertos abiertos TCP y UDP, use el siguiente comando:
$ sudo nmap -n -pn -st -su -p- localhost
Enumere los puertos abiertos con NetCat
La herramienta NetCat es una utilidad de línea de comandos para leer y escribir datos en las conexiones de red a través de los protocolos TCP y UDP. Esta herramienta también se puede utilizar para enumerar puertos abiertos. Puede realizar pruebas en un puerto específico o una gama de puertos.
El siguiente comando netcat escaneará el puerto de 1 a 1000. El comando netcat realizará el escaneo en el protocolo TCP de forma predeterminada:
$ nc -z -v localhost 1-1000
También se puede extender a la lista completa de posibles puertos:
$ nc -z -v localhost 1-65535
Tengamos un desglose rápido de las banderas.
Para obtener solo los puertos abiertos de esta lista, filtre la salida con GREP para el término "sucedido".
$ nc -z -v localhost 0-65535 2> & 1 | Grep tuvo éxito
Si desea realizar el protocolo de escaneo en UDP, agregue la bandera "-u".
$ NC -Z -V -U localhost 0-65535 2> & 1 | Grep tuvo éxito
Pensamientos finales
Como se demuestra, hay muchas formas de escanear puertos abiertos en Linux. Sugiero probar todos los métodos antes de decidir cuál dominar. Si está utilizando una determinada herramienta como NetCat o NMAP regularmente, entonces dominar los métodos asociados será el más beneficioso.
Computación feliz!