¿Qué significa puerto abierto??
Antes de profundizar en la verificación de puertos abiertos, primero sepamos qué significan los puertos abiertos. Un puerto abierto o un puerto de escucha es el puerto en el que se ejecuta alguna aplicación. La aplicación en ejecución escucha en algún puerto y podemos comunicarnos con esa aplicación a través de ese puerto de escucha. Si una aplicación se está ejecutando en un puerto e intentamos ejecutar otra aplicación en el mismo puerto, el kernel arrojará un error. Esa es una de las muchas razones por las que comprobamos si hay puertos abiertos antes de ejecutar aplicaciones.
Enumerar puertos abiertos usando nmap
Network Mapper, conocido como nmap, es una herramienta de código abierto y gratuita, que se utiliza para escanear puertos en un sistema. Se utiliza para encontrar vulnerabilidades, descubrir redes y encontrar puertos abiertos. En esta sección, usaremos nmap para obtener una lista de puertos abiertos en un sistema. En primer lugar, actualice la caché en Ubuntu antes de instalar nmap:
[correo electrónico protegido]: ~ $ sudo apt-get update -yNmap se puede instalar usando el siguiente comando en la terminal:
[correo electrónico protegido]: ~ $ sudo apt-get install nmap -yDespués de instalar nmap, verifique la instalación comprobando la versión de nmap:
[correo electrónico protegido]: ~ $ nmap --version
Si da la versión de nmap, entonces está perfectamente instalado, de lo contrario, intente los comandos anteriores nuevamente para instalar nmap correctamente. Nmap se usa para realizar varios relacionados con las redes, y el escaneo de puertos es una de esas tareas. La herramienta nmap se usa junto con muchas opciones. Podemos obtener la lista de todas las opciones disponibles usando el siguiente comando:
[correo electrónico protegido]: ~ $ man nmapEntonces, para escanear su localhost, use el comando aprehendido a continuación:
[correo electrónico protegido]: ~ $ sudo nmap localhost
Enumerará todos los puertos abiertos en localhost, como se muestra en la imagen de arriba. También podemos usar nmap para escanear hosts remotos:
[correo electrónico protegido]: ~ $ sudo nmap 93.184.216.34Además, podemos usar el nombre de host del servidor remoto en lugar de una dirección IP:
[correo electrónico protegido]: ~ $ sudo nmap www.ejemplo.comEl comando nmap también se puede utilizar para escanear un rango de direcciones IP. Especifique el rango de direcciones IP en el comando, como en el siguiente comando:
[correo electrónico protegido]: ~ $ sudo nmap 192.168.1.1-10El comando anterior escaneará todas las direcciones IP desde 192.168.1.1 hasta 192.168.1.10, y mostrará el resultado en la terminal. Para escanear puertos en una subred, podemos usar nmap de la siguiente manera:
[correo electrónico protegido]: ~ $ sudo nmap 192.168.1.24/1El comando anterior escaneará todos los hosts con direcciones IP en la subred definida en el comando.
A veces tiene que escanear puertos en hosts aleatorios, que están en diferentes subredes y no están en secuencia, entonces la mejor solución es escribir un archivo de hosts en el que estén escritos todos los nombres de host, separados por uno o más espacios, pestañas o nuevos líneas. Este archivo se puede utilizar con nmap de la siguiente manera:
[correo electrónico protegido]: ~ $ sudo nmap -iL hosts.TXT
Podemos usar nmap para escanear un solo puerto en el sistema especificando el puerto usando la bandera '-p', junto con nmap, como en el siguiente comando:
[correo electrónico protegido]: ~ $ sudo nmap -p 80 localhost
El rango de puertos también se puede escanear en un sistema usando nmap de la siguiente manera:
[correo electrónico protegido]: ~ $ sudo nmap -p 80-85 localhost
Podemos escanear todos los puertos de un sistema usando nmap:
[correo electrónico protegido]: ~ $ sudo nmap -p- localhost
Para obtener una lista de los puertos abiertos con más frecuencia en su sistema, puede usar el comando nmap con la bandera '-F':
[correo electrónico protegido]: ~ $ sudo nmap -F localhost
Los puertos TCP se pueden escanear en el sistema usando nmap simplemente agregando el indicador '-T', junto con el comando nmap:
[correo electrónico protegido]: ~ $ sudo nmap -sT localhost
De manera similar, para los puertos UDP, puede usar la marca '-U' con el comando nmap:
[correo electrónico protegido]: ~ $ sudo nmap -sU localhost
Lista de puertos abiertos usando lsof
El comando lsof, también conocido como 'listar archivos abiertos', se usa para obtener información sobre archivos abiertos usados por diferentes procesos en UNIX y LINUX como sistemas operativos. Para la mayoría de las distribuciones de Linux, esta herramienta viene preinstalada. Podemos verificar la instalación de lsof simplemente comprobando su versión:
[correo electrónico protegido]: ~ $ lsof -v
Si no muestra la versión, entonces lsof no está instalado por defecto. Aún podemos instalarlo usando los siguientes comandos en la terminal:
[correo electrónico protegido]: ~ $ sudo apt-get update -y[correo electrónico protegido]: ~ $ sudo apt-get install lsof
Podemos usar el comando lsof junto con diferentes opciones. La lista de todas las opciones disponibles se puede mostrar usando el siguiente comando en la terminal:
[correo electrónico protegido]: ~ $ man lsofAhora, en esta sección, usaremos lsof para mostrar los puertos de un sistema de diferentes maneras:
[correo electrónico protegido]: ~ $ sudo lsof -i
El comando anterior ha mostrado todos los puertos abiertos. También podemos usar el comando lsof para mostrar todos los sockets abiertos:
[correo electrónico protegido]: ~ $ sudo lsof -n -P | grep ESCUCHAR
Podemos listar puertos filtrados basados en un protocolo usando lsof. Ejecute el comando que se indica a continuación para enumerar todos los tipos de conexión TCP:
[correo electrónico protegido]: ~ $ sudo lsof -i tcp
De manera similar, podemos listar todos los tipos de conexión UDP usando lsof de la siguiente manera:
[correo electrónico protegido]: ~ $ sudo lsof -i udp
Enumerar puertos abiertos mediante netstat
Netstat, también conocido como estadísticas de red, es un programa de línea de comandos que se utiliza para mostrar información detallada sobre las redes. Muestra conexiones TCP entrantes y salientes, tablas de enrutamiento, interfaces de red, etc. En esta sección, usaremos netstat para listar los puertos abiertos en un sistema. La herramienta netstat se puede instalar ejecutando los siguientes comandos:
[correo electrónico protegido]: ~ $ sudo apt-get update -y[correo electrónico protegido]: ~ $ sudo apt-get install net-tools -y
Después de ejecutar los comandos anteriores, puede verificar la instalación verificando la versión de netstat:
[correo electrónico protegido]: ~ $ netstat --version
Si muestra la versión de net-tools, entonces la instalación está bien; de lo contrario, ejecute los comandos de instalación nuevamente. Para obtener una descripción general de todas las opciones disponibles que se pueden usar, junto con el comando netstat, ejecute el siguiente comando:
[correo electrónico protegido]: ~ $ man netstatPodemos obtener una lista de todos los puertos de escucha usando el comando netstat en Ubuntu ejecutando el siguiente comando:
[correo electrónico protegido]: ~ $ sudo netstat -l
El comando netstat también se puede usar para filtrar la escucha de los puertos TCP y UDP simplemente agregando una bandera junto con el comando. Para escuchar los puertos TCP:
[correo electrónico protegido]: ~ $ sudo netstat -lt
Para escuchar los puertos UDP, use el siguiente comando:
[correo electrónico protegido]: ~ $ sudo netstat -lu
Para obtener la lista de todos los puertos UNIX que escuchan, puede ejecutar el siguiente comando en la terminal:
[correo electrónico protegido]: ~ $ sudo netstat -lx
Enumerar puertos abiertos mediante ss
El comando ss se utiliza para mostrar información sobre sockets en un sistema Linux. Muestra información más detallada sobre sockets que el comando netstat. El comando ss viene preinstalado para la mayoría de las distribuciones de Linux, por lo que no es necesario instalarlo antes de usarlo. Puede obtener una lista de todas las opciones, que se pueden usar junto con el comando ss, ejecutando el comando 'man' con ss:
[correo electrónico protegido]: ~ $ man ssPara obtener una lista de todas las conexiones independientemente de su estado, use el comando ss sin ningún indicador:
[correo electrónico protegido]: ~ $ sudo ss
Para obtener una lista de todos los puertos de escucha, use el comando ss con la bandera '-l'. La bandera '-l' se usa para mostrar solo los puertos de escucha:
[correo electrónico protegido]: ~ $ sudo ss -l
Para obtener todos los puertos TCP de escucha, podemos usar el indicador '-t' y '-l' junto con el comando ss:
[correo electrónico protegido]: ~ $ sudo ss -lt
De manera similar, podemos obtener una lista de todos los puertos UDP de escucha usando el comando ss junto con las banderas '-u' y '-l':
[correo electrónico protegido]: ~ $ sudo ss -lu
El comando ss también se puede utilizar para obtener una lista de todas las conexiones con el puerto de origen o de destino. En el siguiente ejemplo, vamos a obtener la lista de todas las conexiones con el puerto de origen o destino 22:
[correo electrónico protegido]: ~ $ sudo ss -at '(dport =: 22 o sport =: 22)'
Obtendrá una lista de todas las conexiones entrantes y salientes si se ha conectado a un sistema remoto usando ssh.
Conclusión
Para los administradores de sistemas, profesionales de la seguridad y otras personas relacionadas con TI, es importante estar al tanto de los puertos abiertos en los servidores. Linux es rico en herramientas que se utilizan para diagnosticar redes y proporciona muchas herramientas que pueden ser útiles para varios tipos de actividades de redes. En este tutorial, hemos utilizado algunas herramientas como netstat, ss, lsof y nmap para buscar puertos abiertos en Ubuntu. Después de leer este artículo, podrá enumerar fácilmente todos los puertos de escucha en su servidor Linux de muchas maneras.