GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo hacer un escaneo de puertos en Linux

Para muchos aspirantes a administradores de sistemas, las redes son un tema amplio e intimidante. Para comprenderlos, hay muchas capas, protocolos e interfaces para aprender y numerosos recursos y utilidades.

Los puertos son puntos finales de comunicación lógica en redes TCP/IP y UDP. Muchos servicios, como un servidor web, un servidor de aplicaciones y un servidor de archivos, operarán en una sola dirección IP. Cada uno de estos servicios debe escuchar e interactuar en un puerto particular para comunicarse. Cuando te conectas a una computadora, lo haces a través de una dirección IP y un puerto.

En ciertos casos, el programa que está utilizando elegirá automáticamente un puerto para usted. Por ejemplo, cuando visita https://www.fosslinux.com, se conecta al servidor de fosslinux.com en el puerto 443, que es el puerto estándar para el tráfico web seguro. Dado que es el predeterminado, su navegador agregará automáticamente el puerto por usted.

En esta guía, aprenderá más sobre los puertos. Veremos los distintos programas que nos ayudarán a conocer el estado de nuestros puertos. Estos incluyen:

  •  Nmap
  •  Zenmap
  •  Netcat
  •  netstat
  •  Análisis de unicornio
  •  Usando Bash Pseudo Unit, puede buscar puertos abiertos
  •  Uso del comando ss

El software netstat se utilizará para localizar puertos abiertos y el programa Nmap se utilizará para obtener información sobre el estado de los puertos de una máquina en una red. Podrá encontrar puertos populares y buscar puertos abiertos en sus sistemas una vez que haya terminado.

Conocer los puertos

El modelo de red OSI tiene varias capas. La capa de transporte es la parte de la pila de protocolos que se ocupa de la comunicación entre servicios y aplicaciones. Esta última es la capa principal con la que se conectan los puertos.

Para comprender la configuración del puerto, necesitará cierta información terminológica. Aquí hay una variedad de palabras que serán útiles para comprender lo que se discutirá a continuación:

Puerto:una ubicación de red direccionable introducida dentro del sistema operativo ayuda a diferenciar el tráfico destinado a varias aplicaciones o servicios.

Internet Sockets:un descriptor de archivo que define una dirección IP y un número de puerto asociado y el protocolo de transferencia de datos que se utilizará.

Vinculación:cuando una aplicación o servicio utiliza un enchufe de Internet para administrar sus datos de entrada y salida.

Escucha:cuando un servicio se vincula a una combinación de puerto/protocolo/dirección IP para esperar las solicitudes de los clientes, se supone que está "escuchando" en ese puerto.

Establece un enlace con el cliente cuando corresponde tras recibir un mensaje por el mismo puerto que ha estado escuchando activamente. Dado que los sockets de Internet están asociados con una dirección IP de cliente en particular, el servidor puede escuchar y atender solicitudes de varios clientes simultáneamente.

Escaneo de puertos intenta conectarse a una serie de puertos secuenciales para saber cuáles están disponibles y qué servicios y sistemas operativos se ejecutan detrás de ellos.

Identificación de puertos de uso frecuente

A cada puerto se le asigna un número del 1 al 65535.

Dado que varios puertos por debajo de 1024 están asociados con recursos que los sistemas operativos Linux y similares a Unix consideran vitales para las funciones de la red, asignarles servicios requiere privilegios de root.

Los puertos "registrados" son aquellos con un número entre 1024 y 49151. Esto significa que al enviar una solicitud a la IANA (Autoridad de Números Asignados en Internet), pueden "reservarse" en un sentido muy amplio para servicios específicos. No están estrictamente implementados, pero pueden proporcionar información sobre los servicios que operan en un puerto determinado.

Los puertos entre 49152 y 65535 no están disponibles para registro y se recomiendan para uso personal. Debido a la gran cantidad de puertos abiertos, no tendrá que preocuparse por la mayoría de los servicios que se conectan a puertos específicos.

Sin embargo, debido a su uso generalizado, vale la pena aprender puertos específicos. La siguiente es una lista que está lejos de ser completa:

  • 20:detalles de FTP
  • 22:SSH
  • 23:Telnet
  • 21:puerto de control FTP
  • 25:SMTP (Protocolo simple de transferencia de correo)
  • 80:HTTP:tráfico web sin cifrar
  • 443:HTTPS:tráfico de red seguro
  • 143:puerto de correo IMAP
  • 161:SNMP
  • 194:IRC
  • 389:LDAP
  • 631:Puerto del demonio de impresión CUPS
  • 666:DOOM:este juego heredado tiene su versión única
  • 587:SMTP:envío de mensajes

Estas son solo algunas de las instalaciones que suelen estar conectadas con los puertos. Los puertos necesarios para las aplicaciones que intenta configurar deben mencionarse en su documentación respectiva.

La mayoría de los servicios se pueden configurar para usar puertos distintos a los normales, pero debe asegurarse de que tanto el cliente como el servidor usen el puerto no estándar.

El archivo que contiene una lista de varios puertos de uso común se llama /etc/services.

tuts@fosslinux:~$ less /etc/services

o

 tuts@fosslinux:~$ cat /etc/services

Le proporcionará una lista de puertos populares, así como los servicios que los acompañan:

Esto puede mostrar diferentes páginas dependiendo de su configuración. Para ver la siguiente página de entradas, presione ESPACIO o presione Q para volver a su indicación.

Escaneo de puertos

Un método para verificar los puertos abiertos en una PC o un servidor se conoce como escaneo de puertos. Los jugadores y los piratas informáticos también utilizan escáneres de puertos para buscar puertos abiertos y servicios de huellas dactilares. Un puerto puede estar abierto, filtrado, cerrado o sin filtrar, según su estado. Un puerto dado está disponible en caso de que una aplicación esté escuchando activamente el puerto dado para conexiones o paquetes/

Una de las primeras cosas que debe verificar al solucionar problemas de conexión de red o configurar un firewall es qué puertos están disponibles en su dispositivo.

Este artículo analiza varios métodos para determinar qué puertos de su sistema Linux están disponibles para el mundo exterior.

¿Qué es exactamente un puerto abierto?

Un puerto de escucha puede escuchar en un puerto de red. Puede obtener una lista de los puertos de escucha de su sistema usando comandos como ss, netstat o lsof para consultar la pila de red.

Al usar un firewall, cada puerto de escucha puede abrirse o cerrarse (filtrarse).

Un puerto de red se conoce como puerto abierto si acepta paquetes entrantes desde ubicaciones remotas. Por ejemplo, si su servidor web escucha los puertos 80 y 443 y esos puertos están disponibles en su firewall, cualquier persona, excepto las IP bloqueadas, puede usar su navegador para acceder a los sitios web alojados en su servidor web. Ambos puertos 80 y 443 están abiertos en esta situación.

Los puertos abiertos pueden ser un riesgo para la seguridad porque los atacantes pueden usarlos para piratear vulnerabilidades o llevar a cabo otros tipos de ataques. Todos los demás puertos deben estar cerrados y solo los puertos necesarios para la funcionalidad de su aplicación deben estar expuestos.

En el Protocolo de Internet TCP/IP, hay dos tipos de puertos a buscar:TCP (Protocolo de Control de Transmisión) y UDP (Protocolo de Datagrama Uniforme) (Protocolo de Datagrama de Usuario). TCP y UDP tienen cada uno sus métodos de escaneo. Veremos cómo hacer un escaneo de puertos en un entorno Linux en esta publicación, pero primero, veremos cómo funciona el escaneo de puertos. Es importante recordar que el escaneo de puertos es ilegal en muchos países, así que verifique dos veces los permisos antes de escanear su destino.

Buscando TCP

Dado que realiza un seguimiento del estado de las conexiones, TCP es un protocolo con estado. Se necesita un protocolo de enlace de tres vías del socket del servidor y el socket del lado del cliente para una conexión TCP. El cliente envía un SYN a un servidor que está escuchando y el servidor responde con un SYN-ACK. Luego, el cliente envía un ACK para completar el protocolo de enlace de conexión.

Un escáner envía un paquete SYN al servidor para buscar un puerto TCP abierto. El puerto está disponible si se devuelve SYN-ACK. El puerto se cierra si el servidor no completa el protocolo de enlace y responde con un RST.

Escaneo con UDP

Por otro lado, UDP es un protocolo sin estado que no realiza un seguimiento del estado de la conexión. También excluye el uso de un apretón de manos de tres vías.

Un escáner UDP es responsable de enviar un paquete UDP al puerto para buscarlo. Se produce un paquete ICMP y se envía de vuelta al origen si ese puerto está cerrado. Si esto no ocurre, el puerto está abierto.

Dado que los cortafuegos pierden paquetes ICMP, el escaneo de puertos UDP siempre es inexacto, lo que genera falsos positivos para los escáneres de puertos.

Escáneres para Puertos

Podemos pasar a varios escáneres de puertos y sus características ahora que hemos analizado las funciones de escaneo de puertos. Estos incluyen:

Nmap

Nmap es un mapeador de redes que ha ganado popularidad como una de las herramientas gratuitas de descubrimiento de redes más utilizadas. Nmap se ha convertido en una de las herramientas más populares para que los administradores de red la utilicen al mapear sus redes. El software se puede usar para ubicar hosts en vivo en una red, realizar escaneos de puertos, barridos de ping, detección de SO y detección de versiones, entre otras cosas.

Varios ataques cibernéticos recientes han vuelto a enfatizar la importancia de las herramientas de auditoría de red como Nmap. Por ejemplo, es posible que se hayan detectado antes si los administradores del sistema hubieran estado rastreando los dispositivos conectados, según los analistas. Veremos qué es Nmap, qué puede hacer y cómo usar los comandos más populares en este tutorial.

Nmap es una herramienta de escaneo de red capaz de escanear tanto hosts individuales como redes extensas. También se utiliza para pruebas de penetración y auditorías de cumplimiento.

Cuando se trata de escanear puertos, Nmap debería ser su primera opción si está abierto. Nmap puede detectar la dirección Mac, el formato del sistema operativo, las versiones del kernel y mucho más, además del escaneo de puertos.

Nmap no es solo una herramienta de escaneo de red. También es responsable de usar paquetes IP para localizar todos los dispositivos conectados y proporcionar información sobre los servicios y sistemas operativos en ejecución.

El software está disponible para varios sistemas operativos, incluidos Linux, Gentoo y Free BSD. La mayoría de las veces, se usa a través de una interfaz de línea de comandos. Sin embargo, las interfaces gráficas de usuario también están disponibles. Su éxito también se ha visto favorecido por una comunidad de soporte de usuarios dinámica y activa.

Nmap fue diseñado para redes a gran escala y podía buscar miles de dispositivos conectados. Las empresas más pequeñas, por otro lado, han estado utilizando cada vez más Nmap en los últimos años. Debido al auge del Internet de las cosas, las redes de estas empresas se han vuelto más complicadas y, como resultado, más difíciles de proteger.

Como resultado, varias herramientas de monitoreo de sitios web ahora usan Nmap para inspeccionar el tráfico entre los servidores web y los dispositivos IoT. La reciente aparición de botnets de IoT como Mirai ha despertado el interés en Nmap, sobre todo por su capacidad para interrogar a los dispositivos conectados a través del protocolo UPnP y resaltar cualquier máquina potencialmente maliciosa.

Hasta ahora, Nmap ha sido el escáner de puertos más versátil y detallado disponible. Cualquier cosa, desde el escaneo de puertos hasta la toma de huellas dactilares del sistema operativo y el escaneo de vulnerabilidades, es posible con él. La GUI para Nmap se llama Zenmap y tiene una interfaz CLI y una GUI. Tiene una amplia gama de opciones para realizar escaneos rápidos y precisos. Aquí se explica cómo configurar Nmap en un sistema Linux.

Hay diversas formas en que Nmap ayuda a realizar el escaneo de puertos. Las variaciones más utilizadas incluyen:

  • # sS TCP SYN escaneo
  • # sT TCP connect scan
  • # su UDP escaneos
  • # sY SCTP INIT exploración
  • # sN TCP NULO

Las principales distinciones entre estos tipos de escaneos son si protegen los puertos TCP o UDP y si ejecutan o no un enlace TCP. Estas son las principales diferencias:

El análisis sS TCP SYN es el más básico de estos análisis y proporciona a la mayoría de los usuarios toda la información necesaria. Se escanean miles de puertos por segundo y no levanta sospechas porque no completa un enlace TCP.

El escaneo TCP Connect, que consulta activamente cada host y solicita una respuesta, es la principal alternativa a esta forma de escaneo. Esta exploración lleva más tiempo que una exploración SYN, pero puede proporcionar resultados más precisos.

El escaneo UDP funciona de manera similar al escaneo de conexión TCP, excepto que escanea los puertos DNS, SNMP y DHCP usando paquetes UDP. Este tipo de análisis ayuda a detectar vulnerabilidades porque estos son los puertos más comúnmente atacados por los piratas informáticos.

El escaneo SCTP INIT examina dos servicios distintos:SS7 y SIGTRAN. Dado que no completa todo el procedimiento SCTP, este escaneo también puede evitar sospechas al buscar una red externa.

El escaneo TOP NULL es otro ingenioso proceso de escaneo. Aprovecha una falla en el marco TCP que le permite exponer el estado de los puertos sin tener que consultarlos explícitamente, lo que le permite ver su estado aunque un firewall los proteja.

Cubriremos lo siguiente en este artículo:

  • ¿Cómo configuro Nmap?
  • Cómo ejecutar un escaneo de puertos básico en una computadora local y remota
  • ¿Cuál es la mejor forma de buscar puertos TCP y UDP?
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install nmap -y

Los puertos que escuchan las conexiones TCP de la red se pueden determinar emitiendo el siguiente comando desde la consola:

tuts@fosslinux:~$ sudo nmap -sT -p- 10.10.4.3

La opción -sT le indica a Nmap que busque puertos TCP, mientras que la opción -p- le indica que escanee todos los puertos 65535. Si no se especifica la opción -p-, Nmap solo comprobará los 1000 puertos más comunes.

Según el rendimiento, solo los puertos 22, 80 y 8069 están abiertos en la máquina de destino.

En lugar de -sT, use -sU para buscar puertos UDP de la siguiente manera:

tuts@fosslinux:~$ sudo nmap -sU -p- 10.10.4.3

Ahora usaremos Nmap para buscar puertos abiertos en un servidor (hackme.org) y enumerar los servicios disponibles en esos puertos. Escriba nmap y la dirección del servidor en el símbolo del sistema.

tuts@fosslinux:~$ nmap hackme.org

Dado que necesita privilegios de root, use la opción -sU con sudo para buscar puertos UDP.

tuts@fosslinux:~$ sudo nmap -sU hackme.org

Nmap también tiene muchas otras funciones, que incluyen:

  • -p-:escanea la lista completa de 65535 puertos
  • -sT:Este es un escaneo de conexión para TCP
  • -O:busca el sistema operativo en ejecución
  • -v:análisis detallado
  • -A:análisis agresivo, análisis de prácticamente todo
  • -T[1-5]:Para configurar la velocidad de escaneo
  • -Pn:ocurre cada vez que el servidor bloquea el ping

Zenmap

Zenmap es una interfaz click-kiddie para Nmap que elimina la necesidad de memorizar sus comandos. Para configurarlo, instale zenmap ejecutando el siguiente comando.

tuts@fosslinux:~$ sudo apt-get install -y zenmap

Alternativamente,

mkdir -p ~/Downloads/zenmap
cd ~/Downloads/zenmap

wget http://old-releases.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2_2.24.0-6_amd64.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/n/nmap/zenmap_7.80+dfsg1-1build1_all.deb

sudo apt install ./*.deb

Escriba la dirección del servidor y elija entre las opciones de búsqueda disponibles para escanearlo.

Netcat

Netcat, al que se puede hacer referencia como nc, es una herramienta de línea de comandos. Utiliza los protocolos TCP o UDP para leer y escribir datos a través de conexiones de red. También es un escritor de puertos TCP y UDP sin procesar que también puede buscar puertos.

Netcat puede buscar en un solo puerto o en algunos puertos.

Dado que utiliza el escaneo de enlaces, es más lento que Network Mapper. Para configurarlo, formulario

tuts@fosslinux:~$ sudo apt install netcat-traditional -y

Escriba lo siguiente para ver si hay un puerto disponible.

tuts@fosslinux:~$ nc -z -v hackme.org 80

Escriba el siguiente término de búsqueda para encontrar una lista de puertos.

tuts@fosslinux:~$ nc -z -nv 127.0.0.1 50-80

Para buscar puertos TCP abiertos en una máquina remota con dirección IP 10.10.4.3 en el rango 20-80, por ejemplo, use el siguiente comando:

tuts@fosslinux:~$ nc -z -v 10.10.4.3 50-80

La opción -z indica a nc que busque solo puertos abiertos y no envíe ningún dato, mientras que la opción -v proporciona detalles más precisos.

Así es como se verá el producto final:

Filtre los resultados con el comando grep si desea que las líneas con los puertos abiertos se impriman en la pantalla.

tuts@fosslinux:~$ nc -z -v 10.10.4.3 50-80 2>&1 | grep succeeded

Pase la opción -u al comando nc para buscar puertos UDP:

tuts@fosslinux:~$ nc -z -v -u 10.10.4.3 50-80 2>&1 | grep succeeded

comando lsof

El comando lsof, que enumera los archivos abiertos en Linux, es la última herramienta que veremos para consultar los puertos abiertos. Dado que Unix/Linux es un archivo, un archivo abierto puede ser un flujo o un archivo de red.

Use la opción -i para enumerar todos los datos de Internet y de red. Este comando muestra una combinación de nombres de servicio y puertos numéricos.

tuts@fosslinux:~$ sudo lsof -i

Ejecute lsof en este formato para ver qué aplicación está escuchando en un puerto específico, ejecute el siguiente comando.

tuts@fosslinux:~$ sudo lsof -i:80

Usando el comando netstat

Netstat es una herramienta para consultar información sobre el subsistema de red de Linux que se usa ampliamente. Se puede utilizar para imprimir todos los puertos disponibles en el siguiente formato:

tuts@fosslinux:~$ sudo netstat -ltup

El indicador -l indica a netstat que imprima todos los sockets de escucha, -t todas las conexiones TCP, -u todas las conexiones UDP y -p todos los nombres de aplicaciones/programas que escuchan en el puerto.

Agregue el indicador -n para imprimir valores numéricos en lugar de nombres de servicios.

tuts@fosslinux:~$ sudo netstat -lntup

También puede usar el comando grep para ver qué aplicaciones están escuchando en un puerto específico.

tuts@fosslinux:~$ sudo netstat -lntup | grep "apache2."

Alternativamente, como se muestra, puede definir el puerto y ubicar la aplicación adjunta.

tuts@fosslinux:~$ sudo netstat -lntup | grep ":80"

Escaneo de unicornio

Unicornscan es un escáner de puertos potente y rápido diseñado para investigadores de seguridad. Utiliza su pila TCP/IP distribuida por el usuario, a diferencia de Network Mapper. Este último tiene varias características que Nmap no tiene. Algunos de estos se mencionan a continuación.
La exploración asincrónica sin estado de TCP es posible con el tipo de variaciones de los indicadores de TCP.

La captura de banners TCP es un escaneo UDP asíncrono y sin estado con detalles de protocolo asíncronos que envían suficientes firmas para obtener una respuesta. Mediante la evaluación de las respuestas, es posible el reconocimiento de componentes, programas y sistemas operativos remotos activos y pasivos.

  • Filtrado y grabación de archivos PCAP
  • Rendimiento de una base de datos relacional
  • Soporte para módulos personalizados
  • Vistas de conjuntos de datos que se pueden personalizar

Escriba unicornscan en el cuadro de búsqueda para instalar Unicornscan ejecutando el siguiente comando en la terminal.

tuts@fosslinux:~$ sudo apt-get install unicornscan -y

Para ejecutar un escaneo, escribe lo siguiente.

tuts@fosslinux:~$ sudo us 127.0.0.1

Usando la Pseudounidad Bash, puede buscar puertos abiertos

Cuando se busca establecer si un puerto está abierto o cerrado, el pseudodispositivo /dev/tcp/ o /dev/udp/ de Bash es muy útil.

Bash abrirá un enlace TCP o UDP al host especificado en el puerto especificado cuando se ejecute un comando en un pseudodispositivo /dev/$PROTOCOL/$HOST/$IP.

La declaración if...else a continuación verificará si el puerto 443 en kernel.org está abierto:comando:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Port is open."
else
echo "Port is closed."
fi

Dado que el tiempo de espera predeterminado cuando se conecta a un puerto usando un pseudodispositivo es tan largo, estamos usando el comando de tiempo de espera para destruir el comando de prueba después de 5 segundos. El comando de prueba devolverá verdadero si se crea el enlace al puerto 443 de kernel.org.

Use el ciclo for para buscar un rango de puertos:

for PORT in {20..80}; do
timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"
done

Uso del comando ss

El comando ss es otra herramienta valiosa para mostrar información de socket. Su rendimiento es muy similar al de netstat. El siguiente comando muestra todos los puertos de escucha de las conexiones TCP y UDP como un valor numérico.

tuts@fosslinux:~$ sudo ss -lntu

Conclusión

Ya sea que sea un Gamer, en DevOp o un Hacker, los escáneres de puertos son útiles. No existe un contraste adecuado entre estos escáneres; ninguno de ellos es impecable, y cada uno tiene su propio conjunto de ventajas y desventajas. Sus necesidades determinarán en gran medida esto y cómo desea usarlos.

También puede buscar puertos abiertos utilizando otras utilidades y métodos, como el módulo de socket de Python, curl, telnet o wget. También demostramos cómo determinar qué procesos están conectados a puertos específicos.


Linux
  1. Cómo cambiar el puerto SSH en Linux

  2. ¿Cómo cerrar puertos en Linux?

  3. Cómo abrir puerto en Linux

  4. cómo usar netstat en un puerto específico en Linux

  5. Comando de Linux obtener puerto no utilizado

Cómo bloquear un puerto usando un firewall en Linux

Cómo usar Netcat para escanear puertos abiertos en Linux

Cómo matar el proceso de ejecución de Linux en un puerto particular

Cómo hacer ping a un número de puerto en Linux

¿Cómo comprobar los puertos abiertos en Linux?

Abrir un puerto en Linux