Conocer qué puertos están en uso en un sistema es una tarea básica para cualquier administrador. Desde la configuración de interfaces a la protección contra intrusiones y pasando por cualquier resolución de problemas que podamos imaginar, debemos ser capaces de comprobar si un puerto está prestando algún tipo de servicio en nuestro entorno.
Imaginad la situación en que habéis instalado en vuestro sistema el servicio CUPS de impresión y desconocéis si se ha iniciado correctamente el servicio y levantado su puerto correspondiente 631 o su opcional 515. En esta guía os mostraremos tres comandos básicos para detectar los puertos que emplea un sistema y cuál es su estado.
A continuación haremos un repaso de 3 comandos básicos que resultan especialmente útiles en la administración de cualquier sistema. Se trata de lsof, netstat y nmap, utilidades que ejecutaremos desde la consola de terminal y con privilegios de root.
Comando lsof
El comando lsof es el más básico de cuantos os prestamos y, siendo nativo de Linux, la base que todo usuario debería conocer. Para conocer los puertos abiertos en el sistema mediante este comando, deberéis introducir una secuencia como la siguiente, que os mostrará diversa información donde destacaremos: el nombre de la aplicación (por ejemplo, sshd), el socket del programa (en este caso la dirección IP 10.86.128.138 asociada al puerto 22 que está a la ESCUCHA) y el identificador del proceso (que sería 85379).
$ sudo lsof -i -P -n $ sudo lsof -i -P -n | grep LISTEN
Comando netstat
El comando netstat varía ligeramente en su sintaxis respecto al anterior pero presenta unos parámetros mucho más sencillos de memorizar gracias a una sencilla palabra mnemotécnica. A partir de ahora no os olvidéis de la palabra putona, que hace referencia a las siguientes características:
- p: Muestra las conexiones para el protocolo especificado que puede ser TCP o UDP.
- u: Lista todos los puertos UDP.
- t: Lista todos los puertos TCP.
- o: Muestra los timers.
- n: Muestra el numero de puerto.
- a: Visualiza todas las conexiones activas del sistema.
De este modo, introduciendo el comando y filtrándolo con un pipe podemos obtener información sobre un determinado puerto.
$ netstat -putona | grep numero-de-puerto
Comando nmap
Nmap es una utilidad que nos permite realizar multitud de escaneos en nuestro sistema y uno de ellos, el de puertos abiertos en el equipo. Para ejecutarlo debemos introducir una secuencia del tipo nmap -sX -O Y, tomando X el valor T o U para conexión TCP o UDP respectivamente y el valor Y la dirección IP de nuestra máquina (o localhost para abreviar). Echad un vistazo al siguiente ejemplo.
</pre> $ sudo nmap -sU -O localhost $ sudo nmap -sT -O 192.168.0.1 <pre>
Con estas tres aplicaciones ya disponéis de herramientas suficientes para determinar lor puertos abiertos de vuestra máquina. ¿Empleáis las mismas herramientas o conocéis alguna otra forma de verificar los puertos abiertos de un sistema?
No entiendo nada. Normal, no soy un especialista, pero es interesante 🙂
hola buen dia, como puedo ver los datos que estan llegando por un puerto?
tengo un dispositivo que por gprs me envia strings al puerto 10005 de mi ubuntu y necesito por terminal ver los strings que me estan llegando, me puedes apoyar por favor? gracias. slds
Con el comando netstat -putona observo que me aparece la dirección 127.0.0.1 en dos protocolos tcp y upd, en ambos casos puerto 53. ¿Es normal o correcto esto?. Casualmente tengo problemas con el dnsmasq y zimbra desktop que no levanta en ubuntu 16.04.
En intentar iniciar zimbra me arroba: La página 127.0.0.1 ha rechazado la conexión.
Aprecio su ayuda para sumarme a esta comunidad.
Muy bueno.
Solo añadir: Con ls se puede saber la ruta del proceso y también hay otros comandos como ss o fuser con los que podemos ver qué proceso está utilizando un puerto.
Visto aquí: https://www.sysadmit.com/2018/06/linux-que-proceso-usa-un-puerto.html
Excelente, bien resumido y explicado, no se me olvida lo de PUTONA jeje. ;-D