Cómo enumerar los puertos abiertos en Linux?

Cómo enumerar los puertos abiertos en Linux?

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:

  • 0 a 1023: Estos son los puertos "conocidos", también conocidos como puertos "Sistema", que están reservados para procesos del sistema que ofrecen una amplia variedad de servicios de red. Para unirse con un puerto "conocido", un proceso debe tener un privilegio de superusuario.
  • 1024 a 49151: Estos son los puertos "registrados", también conocidos como los puertos "Usuario", designados por IANA para servicios específicos. A pedido, un proceso puede tener acceso a ellos. En el caso de la mayoría de los sistemas, no requiere ningún privilegio de superusuario para usar estos puertos.
  • 49152 a 65535: Estos son los puertos "dinámicos", también conocidos como los puertos "privados". Estos puertos no se pueden registrar con IANA. Estos puertos están abiertos al uso de servicios privados o personalizados y también se pueden asignar automáticamente como puertos efímeros (puertos de corta duración utilizados por IP).

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.

  • a: Le dice a NetStat que muestre todos los enchufes
  • T: Le dice a NetStat que enumere los puertos TCP
  • u: Le dice a NetStat que enumere los puertos UDP

Aquí hay otra variación del comando netstat:

$ netstat -lntu

Hay dos nuevas banderas utilizadas en el comando. Qué quieren decir?

  • l: Le dice a NetStat que imprima solo los enchufes de escucha
  • norte: Le dice a NetStat que muestre el número de puerto

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.

  • l: Le dice a SS que muestre enchufes escuchando
  • norte: Le dice a SS que no intente resolver los nombres de los servicios
  • T: Le dice a SS que muestre los enchufes TCP
  • u: Le dice a SS que muestre los enchufes UDP

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.

  • -calle: Esta sección le dice a NMAP que escanee los puertos TCP.
  • -pag- : Esto le dice a NMAP que escanee todos los puertos 65535. Si no se usa, entonces NMAP escaneará solo 1000 puertos de forma predeterminada.

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.

  • z: Le dice a NetCat que escanee solo para puertos abiertos sin enviar ningún dato
  • V: Le dice a NetCat que se ejecute en modo detallado

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!