Saber si un puerto TCP o UDP está abierto o cerrado es una tarea fundamental para cualquier administrador de sistemas y redes. A menudo, es imprescindible saber si los puertos están abiertos para establecer una comunicación con el servicio que hay escuchando detrás, pero también es muy importante saber si están cerrados para evitar posibles problemas de seguridad. Hoy en RedesZone os vamos a enseñar cómo saber si un puerto está abierto o cerrado en un sistema operativo Linux, ya que normalmente en servidores se utiliza este sistema operativo.
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. Por lo que, en cualquier caso, se pueden probar diferentes métodos en este sistema operativo para saber si un puerto está realmente cerrado o abierto.
¿Qué son los puertos?
Antes de entrar de lleno en saber qué puertos están abiertos en Linux, quizás sea aconsejable saber antes qué es un puerto y para que se abren cuando navegas por Internet.
Un puerto es una puerta de entrada y salida en un dispositivo conectado a una red, como un ordenador o un router. Imagina que tu dispositivo es una casa, pues los puertos son las diferentes puertas por las que puedes entrar y salir.
Cada puerto tiene asignada un tipo de información para que el rendimiento de la red sea lo mejor posible y no se produzcan cuellos de botella. Cuando abres un puerto, estás permitiendo que una serie de datos entren o salgan a través de ese puerto específico. Algo muy importante para que algunas aplicaciones como juegos online, por ejemplo, puedan funcionar correctamente.
Si estás ejecutando un servidor web, necesitarás abrir el puerto 80 para permitir que las solicitudes web entren y se comuniquen con tu servidor. Del mismo modo pasa con los juegos online o las aplicaciones de streaming o videollamadas que pueden requerir que se abran algunos puertos específicos para facilitar la conexión entre dispositivos.
Más allá de la mejora de rendimiento que supone abrir puertos, es importante mencionar que abrir puertos también puede ser un riesgo ya que estás permitiendo un flujo de datos desde y hacia tu dispositivo. Por eso es muy importante saber qué servicios necesitan puertos abiertos y configurarlos de tal modo que no suponga un riesgo para ti y tus dispositivos.
Diferencias entre TCP y UDP
Los puertos TCP y UDP son protocolos de comunicación utilizados en redes de ordenadores para enviar y recibir datos entre dispositivos. Cada uno tiene características y funcionalidades específicas que los hacen adecuados para diferentes tipos de aplicaciones y situaciones.
Por un lado, TCP es un protocolo orientado a la conexión que garantiza la entrega ordenada y confiable de datos entre dispositivos. Utiliza un mecanismo de establecimiento de conexión de tres vías antes de iniciar la transferencia de datos y proporciona control de flujo, control de congestión y retransmisión de datos para garantizar la integridad y la fiabilidad de la comunicación. Los puertos TCP se utilizan normalmente en aplicaciones que necesitan una transferencia de datos fiable y ordenada, como navegadores web, correo electrónico, transferencia de archivos FTP y conexiones de base de datos.
Por otro lado, UDP es un protocolo sin conexión que no garantiza la entrega ordenada ni confiable de datos. Es más ligero y rápido que TCP ya que no requiere establecer una conexión antes de enviar datos y no realiza control de flujo ni retransmisión de datos. Esto lo hace ideal para aplicaciones que requieren una transmisión rápida y eficiente de datos sin que la pérdida de paquetes suponga un problema serio, como la transmisión de audio y video en tiempo real, juegos en línea y servicios de transmisión de medios.
La principal diferencia entre TCP y UDP está en la fiabilidad de la comunicación y el control que proporcionan. TCP garantiza la entrega ordenada y confiable de datos, lo que lo hace adecuado para aplicaciones sensibles a la integridad de los datos. UDP, por otro lado, es más rápido y eficiente, pero no garantiza la entrega de datos ni proporciona mecanismos de control adicionales.
Ver puertos abiertos con Netcat
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:
- z es un parámetro que se encarga de que, al finalizar la comprobación, la conexión se cierre o, de lo contrario, el programa quedaría funcionando en bucle hasta que lo finalizáramos nosotros manualmente con control+C, de forma similar a cuando se realiza un ping en Linux.
- v es el parámetro que se encarga de comprobar si el puerto está abierto o cerrado.
Para comprobar el puerto lo que debemos hacer es teclear lo siguiente en un terminal:
nc -zv {IP} {PUERTO}
Por ejemplo, para comprobar el puerto 443 en nuestro router teclearemos:
nc -zv 192.168.10.1 443
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:
nc -h
Tal y como podéis ver, disponemos de muchos argumentos para ampliar las funcionalidades.
¿Es seguro NetCat?
Cuando usamos una herramienta tan versátil y que puede desempeñar multitud de tareas, siempre podemos pensar si se puede usar con fines poco adecuados. Y la respuesta es que sí, también se puede usar como una herramienta de hackeo que puede espiar, detectar agujeros de seguridad, esquivar cortafuegos y dar uso de puertas traseras que pueden hacer que se apoderen de nuestro equipo.
Siempre será recomendable descargar NetCat de una fuente segura en internet. A mayores, los expertos recomiendan realizar todos los análisis posibles, para ver si es necesario instalar NetCat en los sistemas. Tener ciertos conocimientos sobre las ventajas de esta herramienta, puede beneficiarnos en cuanto a la versatilidad y eficacia que nos brinda, y nos ayudará a determinar las amenazas con más precisión para adoptar las medidas necesarias.
Motivos para abrir puertos
Existen muchos motivos diferentes por los cuales un puerto necesita ser abierto. Pero por lo general, esto es algo que se realiza solo cuando es necesario y de forma automática. Normalmente durante la instalación de software, se realiza esta tarea. Pero pueden darse casos en los cuales esto no ocurre, siendo un error como tal. O que simplemente la aplicación así lo requiera. En cualquiera de los dos, es posible que esta no funcione de forma correcta hasta que esté abierto el puerto.
Esto ocurrirá porque cuando no se configura de forma adecuada, el equipo no sabrá cuál es el puerto que necesita para abrir los datos, ni a que aplicación de los debería de entregar. Entonces aparecerán problemas de conexión, pero no tiene por qué bloquearla por completo. Más bien se pueden producir retrasos, conexión lenta, o que tengamos mucho lag durante el proceso de uso de la aplicación.
En este caso, tendremos que acudir a la configuración de nuestro router y proceder con la apertura manual. Para ello tendremos que crear una regla en la configuración, la cual indica al router que queremos ese puerto abierto. En ese momento, se abrirá y todo funcionará de la forma adecuada. Pero de hacer esto, debemos tener mucho cuidado. Si en algún momento dejamos de utilizar la aplicación que requiere ese puerto, tendremos que acudir al router de nuevo para cerrarlo. Esto puede ser un problema grave en algún momento, ya que estaremos dejando la puerta abierta a posible atacantes. Entonces, siempre y cuando sea algo que las aplicaciones y el equipo realiza de forma automática, podemos despreocuparnos. Pero cuando lo hacemos de forma manual, no solo tendremos que acudir para abrir el puerto. Si no también para cerrarlo. Y recalcamos de nuevo la tremenda importancia que tiene este proceso.
¿Se pueden abrir solos los puertos?
La respuesta es no, pero si se puede automatizar él proceso. Los puertos de red solo se abren mediante la configuración manual o automática de dispositivos y aplicaciones de red. Si un puerto se abre sin que haya una configuración previa, es probable que se deba a una vulnerabilidad o un ataque malintencionado. Es importante tener en cuenta que la apertura de puertos de forma incorrecta o innecesaria puede poner en riesgo la seguridad de la red. Los puertos abiertos pueden permitir el acceso no autorizado a los datos y servicios de la red, lo que puede resultar en la filtración de información confidencial, la propagación de malware y otros riesgos de seguridad.
Por lo tanto, es importante asegurarse de que solo se abran los puertos necesarios para el correcto funcionamiento de los servicios y aplicaciones de la red. Además, es recomendable utilizar herramientas de seguridad como firewalls para monitorear y controlar el tráfico de red y evitar posibles amenazas. Los puertos de red no se abren solos. Si se necesita abrir un puerto, debe hacerse de manera consciente y segura para garantizar la integridad y seguridad de la red.
En cuanto a los procesos automáticos que pueden abrir puertos, nos podemos encontrar algunos casos donde puede ocurrir:
- Actualizaciones del sistema.
- Instalación de aplicaciones.
- Software de control remoto.
- Diferentes servicios de red.
Es importante tener en cuenta que estos procesos automáticos no abren puertos sin una interacción consciente del usuario o administrador del sistema. Por lo que es un detalle que debes tener en cuenta a la hora de que se abran por sí solos.
Por otro lado, en la mayoría de los casos, se requiere una acción manual para permitir que los procesos abran puertos de red. Y es que por más que se den alguna de las acciones anteriores, muchas veces permanecen igualmente cerrados. Por lo que no quedará otra opción que abrirlos de forma manual. A mayores, es importante mantener una configuración segura de los puertos de red y realizar auditorías periódicas para detectar cualquier actividad sospechosa o no autorizada. De este modo, tendremos un control más generalizado de nuestra red.
Ver puertos abiertos con Nmap
Se trata de un programa de código abierto, el cual se usa para auditorías de seguridad. Su diseño está pensado para grandes redes, pero funciona realmente bien en hosts individuales. Por lo que es otra de las diferentes alternativas que los usuarios de Linux podemos llegar a usar en cualquier momento.
Hay que tener en cuenta que este software utiliza paquetes IP sin procesar para determinar qué hosts están disponibles, los servicios y sistemas operativos se están ejecutando junto con su versión, los filtros de los cortafuegos que se utilizan y muchas otras características.
Si bien su uso es más común para auditorías, los administradores de sistemas y redes, lo utilizan para realizar tareas rutinarias como puede ser inventariado, monitorización en tiempo real de la actividad del host o servidor y la administración de programas de actualización.
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:
sudo apt install nmap
Una vez instalado, para buscar si un puerto específico está abierto, deberemos poner la siguiente orden:
nmap -p {PUERTO} {IP}
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:
nmap -p {PUERTO}-{PUERTO} {IP}
Por ejemplo:
nmap -p 1-65535 192.168.10.1
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.
Comprobar el firewall en Linux
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. Y es que, por más que estén los métodos anteriores, desde esta opción también es posible como veremos a continuación.
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:
iptables -L
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:
nft list ruleset
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.
Ver el estado de las conexiones TCP y UDP
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:
ss
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:
ss -a
Si queremos ver solamente los puertos que están «escuchando», deberemos poner la siguiente orden:
ss -l
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».
ss -t
ss -u
La orden «ss» es realmente útil para mostrar todas las conexiones establecidas y también escuchando en nuestro sistema operativo Linux.
Otro comando muy útil para estos fines, puede ser lsoft, el cual realiza una función similar a los que citamos, pero a mayores, es capaz de enlazar puertos abiertos a servicios y mostrar una lista de archivos que se encuentran abiertos en el sistema con los procesos correspondientes.
Podemos usar el comando con un simple lsoft -i
Y otro método si queremos verificar el estado de algún puerto en concreto podemos usar el siguiente.
Peligros de los puertos abiertos
Cuando nos referimos a estos puertos en la conexión a internet, los podemos definir como unas puertas las cuales facilitan o permiten la comunicación que se recibe y envía desde nuestros equipos. Pero más técnicamente, es un número de 16 bits, el cual es empleado por un protocolo host a host, el cual identifica a qué protocolo de nivel superior o programa de aplicación debe realizar las entregas de los mensajes recibidos.
Como hemos comentado, esto son como puertas o ventanas que podemos tener en nuestras casas, y al igual que no dejaríamos estas abiertas, ocurre lo mismo con los puertos del ordenador. Pero puede darse el caso de que sea necesario abrir alguno, o que directamente quede abierto para el correcto funcionamiento de alguna aplicación o comunicación concreta. Esto a su vez, nos está generando nuevas vulnerabilidades, las cuales pueden variar en importancia, y los hackers se pueden aprovechar de ellas. Por lo cual es especialmente recomendable disponer de un buen sistema de seguridad, para tratar de evitar todos los problemas posibles.
Existen algunos puertos, que son más peligrosos que otros, debido a la funcionalidad que pueden ofrecer. Puede ser el caso del 3389, el cual se usa para Remote Desktop. Esto puede ser una gran amenaza para nuestro sistema o grupo de ellos, ya que permite la conexión por escritorio remoto a los equipos, por lo cual es recomendable tenerlo siempre cerrado a no ser que sea necesario para realizar alguna función.
Puertos abiertos más peligrosos
Otros puertos que son considerados peligrosos cuando están abiertos son:
- TCP: 3301, 3306, 8080, 53, 9002, 5986, 8443
- FTP: Los puertos 20 y 21 se catalogan como peligrosos cuando se detecta un gran número de impresoras, cámaras y otros dispositivos vulnerables.
Por lo cual, es recomendable mantener todos los puertos que no sean necesarios cerrados para la mayor seguridad de nuestros sistemas. Y si es necesario abrir uno o varios, es conveniente revisar que los sistemas de seguridad estén al día, y los dispositivos totalmente actualizados.
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.
¿Cuándo es necesario abrir los puertos?
Hay diferentes momentos en los que puede ser ya una necesidad el hecho de abrir los puertos del router. Por más que se pueden dar una serie de riesgos, lo cierto es que hay casos en los que puede ser necesario. Por ejemplo, para juegos, descargas o usar otros programas. En esos casos, es posible que los puertos se abran de manera automática, sin embargo, en otros es también probable que no sea así y entonces tengamos que hacerlo de manera manual.
Por esto mismo, en el momento de tener una mala experiencia, ya sea de juego, usando un programa, etc., por culpa de los puertos cerrados, no quedará otra alternativa que abrir los puertos cerrados del router. Eso sí, poniendo especial atención a los diferentes riesgos que se van a tener que asumir a partir de ese momento, ya que, como acabamos de explicar, son varios los factores que juegan en contra de todo aquel usuario que decida dejar los puertos abiertos de este dispositivo.