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. Imagina 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 los 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", que la IANA designa 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 requiere ningún privilegio 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 con 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 en lugar de 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, tan listo para abrumarse.
$ cat / etc / services | 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 enumerar todos los puertos abiertos del sistema.
Ejecute el siguiente comando netstat:
$ netstat -atu
Hagamos un desglose rápido de todas las banderas 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 nuevas banderas utilizadas en el comando. Qué quieren decir?
- l: 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 la bandera "-p":
$ netstat -lntup
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.
- l: 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 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 de la bandera "-i", use:
$ lsof -i
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 -sT -p- 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 usa, nmap escaneará solo 1000 puertos de forma predeterminada.
Si necesita enumerar los puertos UDP abiertos, ejecute el siguiente comando nmap:
$ sudo nmap -sU -p- localhost
Para obtener los puertos TCP y UDP abiertos, use el siguiente comando:
$ sudo nmap -n -PN -sT -sU -p- localhostLista 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:
$ nc -z -v localhost 1-1000
También se puede ampliar a toda la lista de posibles puertos:
$ nc -z -v localhost 1-65535
Hagamos un rápido desglose de las banderas.
- z: 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".
$ nc -z -v localhost 0-65535 2> & 1 | grep tuvo éxitoSi desea realizar el escaneo en el protocolo UDP, agregue la marca "-u".
$ nc -z -v -u localhost 0-65535 2> & 1 | grep tuvo éxitoPensamientos 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 está utilizando una determinada herramienta como netcat o nmap con regularidad, entonces dominar los métodos asociados será lo más beneficioso.
Computación feliz!