Existen varias formas de comprobar si un determinado puerto está abierto o cerrado, especialmente en Linux, la primera de ellas es utilizando el popular programa Netcat que viene preinstalado en todas las distribuciones, a continuación, una muy buena forma de saber si un puerto está abierto es comprobándolo directamente con el programa Nmap que nos permitirá escanear todos los puertos de un determinado host. Por último, si queremos saber si tenemos nosotros un puerto abierto o cerrado, tendremos que mirarlo en el firewall y también en las conexiones actuales del sistema operativo.Netcat es una herramienta que viene por defecto en la mayoría de las distribuciones Linux, por lo que, aparte de ser muy fácil de usar, no necesitaremos instalar ningún paquete adicional. Antes de comprobar con Netcat si el puerto está abierto, vamos a ver los dos parámetros más importantes de Netcat:Para comprobar el puerto lo que debemos hacer es teclear lo siguiente en un terminal:Por ejemplo, para comprobar el puerto 443 en nuestro router teclearemos:En la siguiente imagen se puede ver cómo este puerto está abierto:Si probamos la web de RedesZone y el puerto 443, nos saldrá una información similar:En el caso de que nos salga cerrado, nos debería poner esto:Tal y como habéis visto, es muy sencillo comprobar si un puerto está abierto o cerrado con Netcat, una utilidad muy simple que viene preinstalada en Linux. Además de los comandos «z» y «v», también tenemos disponible otros argumentos que nos permitirá conocer más información, si ejecutamos la siguiente orden nos saldrá la ayuda:Tal y como podéis ver, disponemos de muchos argumentos para ampliar las funcionalidades.Nmap es el programa por excelencia para descubrir hosts y también para comprobar si los diferentes puertos están abiertos, este programa no viene preinstalado en sistemas operativos Linux, pero podremos instalarlo directamente desde los repositorios con la siguiente orden:Una vez instalado, para buscar si un puerto específico está abierto, deberemos poner la siguiente orden:En la siguiente imagen podéis ver cómo saldría un puerto abierto:En el caso de que un puerto esté cerrado o esté filtrado por un firewall, nos saldrá lo siguiente:Si queremos escanear todos los puertos de un determinado host o un rango de puertos, tendremos que indicar un rango de puertos de la siguiente forma:Por ejemplo:Tal y como podéis ver, comprobar los puertos abiertos con Nmap es realmente sencillo, además, podremos escanear todos los hosts de la red local doméstica o profesional, para posteriormente escanear los diferentes puertos.Si queremos comprobar si nosotros tenemos un puerto abierto para aceptar conexiones, lo primero que debemos comprobar es el estado del firewall en nuestro sistema operativo Linux. Por defecto, en todos los servidores Linux la política es permisiva, es decir, se aceptan todos los paquetes por política. Nosotros podremos modificar esta política por una restrictiva, e incluso añadir nuevas tablas, cadenas y reglas para permitir o denegar el tráfico.Si en nuestro terminal Linux ponemos lo siguiente:Nos saldrán todas las cadenas y reglas de la tabla «filter» de iptables, en el caso de usar Nftables, deberás indicar la siguiente orden:Una recomendación de seguridad muy importante, es que todos los puertos en un servidor Linux deberían estar cerrados, de esta forma, cuando levantemos un servicio escuchando en un determinado puerto, no será accesible a menos que lo permitamos en el firewall. Deberemos comprobar en detalle si un determinado puerto está o no abierto para que nuestros servicios sean accesibles desde el exterior.Si nos interesa conocer el estado de todas las conexiones TCP, UDP, ICMP y otros protocolos en nuestro sistema operativo, una herramienta muy utilizada siempre ha sido «netstat», sin embargo, esta herramienta ha quedado en segundo lugar gracias al nuevo «ss» que nos proporcionará una gran cantidad de información de manera fácil y rápida. Esta herramienta se encarga de comprobar todos los sockets abiertos o cerrados en nuestro servidor Linux, y podremos ver las estadísticas de dichos sockets abiertos o cerrados. Si has utilizado en el pasado la herramienta netstat, estamos seguros que esta nueva herramienta «ss» te encantará.La herramienta «ss» ya viene preinstalada en sistemas operativos Linux como parte del propio sistema, tal y como ocurre con las herramientas «ping», «traceroute» y muchas otras. Si abrimos una consola, tanto en modo usuario como en modo superusuario, deberemos ejecutar:Una vez que hayamos ejecutado esta orden, podremos ver lo siguiente:Veremos el estado de la conexión (ESTAB), y también los paquetes recibidos y enviados, la dirección local y el puerto, así como la dirección remota y el puerto utilizado. Nos van a salir una gran cantidad de puertos en uso por los diferentes programas y servicios que tendremos instalados en el sistema operativo.Si queremos ver el estado de todos los puertos (sockets) podremos poner la siguiente orden:Si queremos ver solamente los puertos que están «escuchando», deberemos poner la siguiente orden:En la siguiente imagen se puede ver un ejemplo de puertos que están «LISTEN» para aceptar conexiones entrantes:En el caso de que queramos mostrar las conexiones TCP, tendremos que usar el argumento «-t» y en el caso de querer mostrar las conexiones UDP, tendremos que usar el argumento «-u».La orden «ss» es realmente útil para mostrar todas las conexiones establecidas y también escuchando en nuestro sistema operativo Linux.Tal y como habéis visto, tenemos diferentes métodos para saber si un puerto está abierto o cerrado en un host remoto y también en nuestro equipo local, dependiendo de lo que nos interese saber, utilizaremos una herramienta u otra, lo más importante es que todos los puertos que no estén en uso deberían estar cerrados por seguridad a través del firewall, de esta forma, evitaremos problemas de seguridad y explotación de vulnerabilidades en los servidores.
