¿Cómo enumerar los puertos abiertos en Linux?

How List Open Ports Linux



En redes, un puerto es una característica interesante. Es una forma de que el tráfico de la red identifique la aplicación o el servicio de destino. Cada proceso / servicio obtiene su puerto único. Un puerto siempre estará asociado con la dirección IP del host junto con el protocolo.

Esta es una de mis metáforas favoritas para describir lo que es un puerto. Imagínese un barco cargado de carga, que viajará a una tierra lejana. ¿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 la 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 comunicación. Es un número de 16 bits (0 a 65535 en decimal). Si bien el rango es amplio, para facilitar su uso, los puertos se clasifican en tres categorías. Cada categoría está etiquetada como el rango de valor de puerto:



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

En Linux, hay varias formas de verificar los puertos abiertos. De forma predeterminada, cualquier puerto permanecerá cerrado a menos que una aplicación lo esté usando. Si un puerto está abierto, debe asignarse a un servicio / proceso.





Lista de puertos abiertos

Es más fácil identificar qué puertos están en uso que qué puertos están abiertos. Es por eso que la siguiente sección presentará métodos para enumerar todos los puertos que están actualmente en uso. En Linux, hay varias herramientas disponibles para la tarea. La mayoría de ellos vienen integrados en cualquier distribución de Linux.

Saber 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 un fuerte indicio de intrusión en la red.



Los siguientes métodos se muestran en Ubuntu 20.04.1 LTS.

Enumere los protocolos y los puertos abiertos de / etc / services

El archivo / etc / services contiene información sobre los servicios que se están ejecutando actualmente. Es un archivo grande, por lo que está listo para abrumarse.

$gato /etc/servicios| menos

Lista de puertos abiertos usando 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 listar todos los puertos abiertos del sistema.

Ejecute el siguiente comando netstat:

$netstat -atu

Analicemos rápidamente todos los indicadores que usamos en este comando.

  • a : Le dice a netstat que muestre todos los sockets
  • t : Le dice a netstat que enumere los puertos TCP
  • tu : Le dice a netstat que enumere los puertos UDP

Aquí hay otra variación del comando netstat:

$netstat -lntu

Hay dos nuevos indicadores usados ​​en el comando. ¿Qué quieren decir?

  • los : Le dice a netstat que imprima solo los sockets de escucha
  • norte : Le dice a netstat que muestre el número de puerto

Para mostrar el PID del proceso que está usando un puerto, use el indicador -p:

$netstat -Intup

Lista de puertos abiertos usando ss

La herramienta ss es una utilidad para investigar socket. Su uso es similar al de 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.

  • los : Le dice a ss que muestre las tomas de escucha
  • norte : Le dice a ss que no intente resolver los nombres de los servicios
  • t : Le dice a ss que muestre los sockets TCP
  • tu : Le dice a ss que muestre los sockets UDP

Lista de puertos abiertos usando lsof

El comando lsof es para listar archivos abiertos. Sin embargo, también se puede utilizar 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 defínalo después del indicador -i, use:

$lsof-I <protocolo>

Lista de puertos abiertos usando 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 abiertos, ejecute el siguiente comando nmap. Aquí, la dirección IP es de la computadora host:

$sudo nmap -S t -pag-localhost

Aquí, hay dos partes del argumento del comando.

  • -S t : Esta sección le dice a nmap que busque puertos TCP.
  • -pag- : Esto le dice a nmap que busque todos los puertos 65535. Si no se utiliza, nmap escaneará solo 1000 puertos de forma predeterminada.

Si necesita enumerar los puertos UDP abiertos, ejecute el siguiente comando nmap:

$sudo nmap -sU -pag-localhost

Para obtener los puertos TCP y UDP abiertos, use el siguiente comando:

$sudo nmap -norte -PN -S t -sU -pag-localhost

Lista de puertos abiertos usando netcat

La herramienta netcat es una utilidad de línea de comandos para leer y escribir datos a través de 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 en una variedad 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:

$Carolina del Norte-Con -vlocalhost1-1000

También se puede ampliar a toda la lista de posibles puertos:

$Carolina del Norte-Con -vlocalhost1-65535

Hagamos un rápido desglose de las banderas.

  • Con : Le dice a netcat que busque solo 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 exitoso.

$Carolina del Norte-Con -vlocalhost0-65535 2>&1 | sujecióntriunfado

Si desea realizar el escaneo en el protocolo UDP, agregue el indicador -u.

$Carolina del Norte-Con -v -ulocalhost0-65535 2>&1 | sujecióntriunfado

Pensamientos finales

Como se demostró, hay muchas formas de buscar puertos abiertos en Linux. Sugiero probar todos los métodos antes de decidir cuál dominar. Si utiliza una herramienta determinada como netcat o nmap con regularidad, lo más beneficioso será dominar los métodos asociados.

¡Feliz informática!