Estamos seguros que todos vosotros en alguna ocasión habéis tenido que «abrir un puerto», o mejor dicho, hacer el «reenvío de puertos» en el router, ya que todos los equipos de la red local están detrás de la NAT. Para poder acceder desde Internet a estos dispositivos que están en la red local, tenemos que «abrir un puerto» o hacer «Port forwarding» en el router, de lo contrario, no podremos acceder desde Internet a dicho servicio (servidor SSH, servidor FTP, servidor OpenVPN etc.)
Hoy en RedesZone os vamos a explicar qué significa que un puerto esté abierto, cómo podrían atacar los puertos abiertos y qué podrían hacer por culpa de ello, para que tengas la información necesaria sobre sus ventajas y peligros, y puedas hacer lo que consideres más oportuno según tus necesidades.
¿Qué significa que un puerto esté «abierto»?
Las comunicaciones a nivel de capa de transporte, usando los protocolos TCP y UDP principalmente, hacen uso de lo que se denomina como «socket de Internet». Este socket constituye un mecanismo por el cual dos procesos (aplicaciones, por ejemplo) pueden intercambiar datos a través de la red local o a través de Internet. Cualquier flujo de datos que haga uso de TCP o de UDP necesita como mínimo la siguiente información:
- IP de origen
- Puerto de origen
- IP de destino
- Puerto de destino
En una red local, de forma completamente automática y transparente se están continuamente abriendo y cerrando puertos por parte de los diferentes procesos para poder comunicarse con otros equipos. Para que dos procesos puedan comunicarse, es necesario que un proceso pueda «localizar» al otro para obtener servicios o proporcionarle servicios.
Cuando definimos que un «puerto esté abierto», puede ser en dos escenarios muy diferentes:
- Un puerto abierto en un equipo local, por ejemplo, en nuestro ordenador o en un servidor local. En principio, todos los puertos deberían estar cerrados porque el firewall normalmente se configura de forma restrictiva (todo bloqueado excepto lo que está específicamente permitido).
- Un puerto abierto en la NAT del router. Normalmente en el router no tenemos ningún puerto «abierto», o, mejor dicho, no tenemos en la sección de «Servidor Virtual» o «Port Forwarding» ningún puerto hacia ningún equipo. De forma predeterminada en cualquier router esta tabla está vacía, sin embargo, podremos dar de alta diferentes reglas para abrir puertos a diferentes equipos.
Estados de los puertos
Como hemos visto, los puertos pueden estar abiertos. Pero este es solo uno de sus tres estados. Cada uno tiene unas características diferentes que van más allá de lo que indica su propio nombre. Estos son:
- Cerrados: Es cuando la comunicación es rechazada directamente. Por lo cual nunca se va a generar ningún tipo de tráfico entrante o saliente por estos puertos.
- Filtrados: El tráfico que circula por estos puertos es filtrado. Esto lo realizan las aplicaciones de seguridad como puede ser un firewall. Por lo cual es como un puerto abierto, pero con condiciones de filtrado.
- Abiertos: Cuando un servicio se encuentra escuchando a este puerto, es accesible desde el exterior.
¿Cuándo necesitamos abrir puertos localmente?
Si nuestro equipo local actúa como servidor «de algo», como, por ejemplo, servidor FTP, servidor web, servidor SSH, servidor VPN, servidor de base de datos y un largo etcétera, tendremos que tener un puerto o varios puertos abiertos en el firewall para que los diferentes equipos de la red local o Internet puedan acceder a nuestros servicios, de lo contrario, no podrán acceder porque el cortafuegos bloqueará esta comunicación y no se establecerán las conexiones.
Normalmente en un entorno doméstico, si configuramos Windows 10 o un sistema operativo basado en Linux como «Red privada» o «Red doméstica», el firewall se encuentra desactivado y se permitirán todas las conexiones entrantes. Sin embargo, si lo tenemos como «Red pública» el firewall estará activado y bloqueará todas las conexiones entrantes que previamente nosotros no hayamos realizado de forma saliente, por tanto, estamos ante un firewall «restrictivo».
¿Cuándo necesitamos abrir puertos en la NAT del router?
Si tenemos un ordenador de la red local que actúa como un servidor «de algo», como en el caso anterior, y queremos que estos servicios sean accesibles desde Internet, será necesario hacer un «reenvío de puertos» o también conocido como «abrir puertos». De esta forma, si alguien abre un socket con la dirección IP pública y un correspondiente puerto externo, automáticamente ese flujo de datos será reenviado al equipo al que le «hemos abierto los puertos».
Cualquier router de forma predeterminada no tiene ninguna regla para realizar reenvío de puertos, tendremos que hacerlo nosotros de manera específica. Además, un detalle muy importante es que si tu operador tiene CG-NAT, aunque abras un puerto en el router de forma externa, no podrás hacer nada para acceder a los recursos internos de la red local.
¿Cómo se ataca un puerto?
Realmente no se puede «atacar» un puerto, lo que se ataca es el servicio que hay detrás de ese «puerto» que está escuchando para aceptar las conexiones entrantes. Por ejemplo, si tenemos abierto el puerto 5555 y aquí está configurado un servidor FTP, lo que se hará es atacar al servicio de FTP, pero no al puerto. El puerto no deja de ser una «puerta» de entrada a la información, lo que verdaderamente se ataca son a los servicios detrás de estos puertos.
Comúnmente se utiliza el término atacar un puerto, cuando realmente se debería decir «hacer un escaneo de puertos» para comprobar qué puertos hay abiertos en un determinado equipo, para posteriormente atacar a los servicios que hay detrás de este servicio en concreto. Para hacer un escaneo de puertos hay muchos métodos, pero, sin lugar a dudas, el mejor que podemos utilizar es realizar un escaneo con Nmap, el programa por excelencia de descubrimiento de hosts y escaneo de puertos, además, también permitiría su explotación a través de NSE que es un añadido a Nmap con la posibilidad de crackear diferentes servicios y explotar vulnerabilidades conocidas.
Nmap es un programa muy fácil de utilizar, basta con instalarlo en cualquier sistema operativo basado en Linux para empezar con su funcionamiento, está en los repositorios oficiales de cada distribución, por tanto, basta con ejecutar el siguiente comando:
sudo apt install nmap
Una vez instalado, tendremos que ejecutar el comando específico para ver si un puerto está abierto, filtrado o cerrado:
nmap -p PUERTO IP
También podríamos escanear un rango de puertos de la siguiente forma:
nmap -p PUERTOINICIAL-PUERTOFINAL IP
Por ejemplo, si tenemos un servidor web con HTTP y HTTPS funcionando, es completamente normal que tengamos los puertos 80 y 443 abiertos, como este:
Comprobar puertos abiertos, filtrados o cerrados con Nmap es sencillo, no obstante, os recomendaríamos leer la completa wiki de Nmap donde tenemos manuales detallados paso a paso de los diferentes tipos de escaneo de puertos que tenemos disponibles.
¿Qué puede hacer un ciberdelincuente con un puerto que está abierto?
Cuando tenemos un puerto abierto, se pueden dar varias casuísticas entorno a qué puede hacer o no un ciberdelincuente. Si tenemos un puerto abierto, pero no hay ningún servicio detrás escuchando, no podrá hacer absolutamente nada, sin embargo, podría «guardarse» el número de puerto abierto por si en un futuro sí ponemos un servicio a escuchar.
Si tenemos un puerto abierto y sí hay un servicio por detrás escuchando, podría realizar muchas acciones:
- Hacer uso de forma legítima para comprobar su funcionamiento
- Si el servicio necesita autenticación, podría realizar un ataque por fuerza bruta o diccionario para acceder al servicio.
- Realizar un ataque de denegación de servicio para que el servicio deje de funcionar correctamente y deje de prestar servicio.
- Explotar una vulnerabilidad de seguridad en el servicio, ya sea para acceder ilegítimamente a los recursos del servicio, para entrar al sistema, e incluso para realizar una escalada de privilegios y tomar el control total del servidor.
Tal y como podéis ver, con un puerto abierto y un servicio corriendo detrás, un ciberdelincuente podrá realizar muchas acciones maliciosas, por tanto, es muy importante proteger los servicios que hay detrás de este puerto, para protegerlos, es recomendable realizar las siguientes acciones:
- Configurar correctamente el firewall para permitir acceso solamente a quien realmente lo necesite, por ejemplo, puedes filtrar por países. Esto bloqueará el acceso a los intrusos, ya que hace la función de barrera para proteger el sistema.
- Para mitigar los ataques DoS, puedes configurar en el firewall reglas para denegar demasiadas conexiones simultáneas con la misma IP de origen.
- Puedes instalar un programa como fail2ban para detectar múltiples intentos de inicio de sesión, para posteriormente decirle al firewall que bloquee la IP de origen.
- Realizar hardening al servicio que hay escuchando, ya sea un servidor SSH, FTP o servidor web, siempre hay configuraciones avanzadas en estos servicios para protegerlos aún más.
- Realizar un hardening al sistema operativo que está alojando el servicio, definiendo políticas robustas de autenticación, actualización del sistema, e incluso usar sistemas avanzados como SELinux entre otros.
Configurar sólo los puertos que son realmente necesarios, nos ayuda a tener las comunicaciones más controladas. Por lo cual, previamente a abrir estos puertos, es recomendable realizar un estudio de cuáles son los que nos hacen falta, y realizar un análisis para conocer tanto los beneficios que nos va a dar la apertura, como los riesgos. Esto se hace de cara a la elaboración de planes de respuesta, los cuales serán muy importantes en caso de que surja algún problema relacionado con los puertos.
El uso de herramientas que permitan realizar un análisis de los puertos y a la vez generar listados de los puertos que se encuentran abiertos en todo momento, puede ser de gran ayuda de cara a la administración de estos, lo que ayudará a tener un control sobre el tráfico que se genera. Algunas de las más recomendadas son Nmap o Zenmap, pero nos podemos encontrar gran cantidad de aplicaciones destinadas a este fin. Incluso se pueden implementar herramientas las cuales generen avisos de accesos, donde es posible generar reglas las cuales generan estas alertas solo cuando un usuario desconocido se encuentra en el sistema. En todo caso, lo más generalizado es guardar un registro de todos los accesos a cualquier sistema, y solo generar esas alertas con usuarios desconocidos.
Mantener todos los equipos y sistemas completamente actualizados también juega un papel muy importante a la hora de estar seguros. Esto incluye el router, en el cual el firmware debe estar actualizado a la última versión, la cual siempre contiene parches para posibles vulnerabilidades que están presentes en internet. A mayores de la seguridad, también cabe la posibilidad de que estas actualizaciones nos beneficien en cuanto a mejoras implementadas por los fabricantes.
Peligros de los puertos abiertos
Como has podido ver, es importante mantener los puertos cerrados cuando no sea necesario utilizarlos. Y en caso de tener que abrirlos, contar con medidas de seguridad suficientes para estar prevenidos ante posibles ataques. Un buen antivirus y firewall son de vital importancia. Actualmente con Windows tenemos ambas cosas incorporadas en el Sistema Operativo, tanto en el 10 como en el 11. Por lo cual ya tenemos una primera línea de defensa ante ataques. Algunos de ellos son:
- Troyanos, malware y accesos: Los puertos abiertos facilitan mucho este tipo de ataques. Y estos concretamente son los que más se aprovechan de esta situación. El gran problema es que muchos de estos solo hay una forma de detectarlos, y es realizando un escaneo muy detallado de todo el sistema, por tanto, si llevas mucho tiempo con los puertos abiertos sin necesidad, lo más recomendable es que realices una comprobación, para asegurarte de que tu equipo está limpio.
- Vulnerabilidades: Existen herramientas que se dedican a realizar análisis de puertos abiertos, y de este modo crear listados. Luego se comunican con los servicios de escucha para tratar de encontrar información de nuestro equipo. Lo cual sirve para realizar posteriores ataques. Por lo que si tienes los puertos abiertos, ya sabes lo que deberías hacer.
- Ataques DDoS: La transferencia de paquetes se facilita mucho con los puertos abiertos a las entidades que los necesiten. Si alguna llega a establecer comunicación, no podrá ser establecida por otras durante el proceso. Esto genera ataques de denegación de servicio dejando a los objetivos inaccesibles. No suele ser un método utilizado a nivel particular, ya que un ciberdelincuente no ganaría nada con nosotros, sino que está más enfocado a empresas y competidores, por lo que no deberías preocuparte, aunque sí tenerlo en cuenta.
Hay muchas medidas de seguridad que podemos aplicar a un sistema y servicio para estar más seguros, pero debes tener en cuenta que la seguridad al 100% no existe, por tanto, debes estar preparado para un incidente y poder recuperar el sistema.
¿Cómo saber si mis puertos están abiertos?
La manera más simple de conocer si los puertos de tu router están abiertos, es acceder a él. Para ello podrás hacerlo a través del navegador y su IP, siendo normalmente 192.168.1.1 o 192.168.0.1, o, dependiendo de la compañía, desde la página web de la misma. Hay alguna que permiten modificar parámetros del router (si es el que te han instalado ellos), haciendo más sencilla e intuitiva esta tarea al usuario.
Sea como sea, y entremos de la forma en la que entremos, que eso podría dar para otro tutorial, una vez hayamos accedido tendremos una sección de puertos podremos ver todos los que actualmente están abiertos, aunque si nunca los hemos tocado, deberían estar los necesarios, sin embargo, podemos modificarlo, y si vemos que algo empieza a funcionar mal, es que posiblemente lo necesitaba.
Esto ocurre mucho en servidores NAS, entre otros equipos, que para poder conectarnos a ellos debemos abrir puertos, pudiendo así acceder desde el móvil a miles de km de distancia, sin embargo, abrir muchos puede ser la puerta a otros problemas como ya hemos visto, por lo que solo deberemos hacerlo cuando sea necesario, y conociendo sus riesgos. De ahí a que de forma natural no lo estén, ya que si no pasará nada, no existiría esta opción.
Cómo dejar solo los puertos seguros
Si has estado tocando los puertos, ya sea para un juego, programa, o por simple curiosidad, y ahora no sabes cuáles son los importantes y que deberían estar abiertos, y cuáles los que tú abriste sin necesidad, hay una forma muy sencilla, al menos práctica, para no tener que mirarlos uno a uno, y se trataría de resetear el router.
Con esta práctica restableceremos toda la configuración, lo que incluye, a su vez, los puertos mínimos necesarios para el funcionamiento del mismo. Sin embargo, también nos eliminaría el resto de datos, desde el nombre de la red, la contraseña, etc, por lo que deberemos cambiarla de nuevo.
Si teníamos algún puerto que necesitásemos, y ahora no nos funciona, podremos volver a abrirlo, aunque en este caso ya lo haríamos solo de los imprescindibles, por lo que mejoraríamos mucho nuestra seguridad. Sería una forma de «formatear» el router, para dejarlo limpio y con el mejor rendimiento posible, aunque esto solo será necesario si hemos abierto puertos sin acordarnos y sin mucho sentido. En caso contrario no hará falta.
Y tú, ¿eres de los que abre los puertos para probar cosas y luego los deja todos así?, ¿o desde que has leído los peligros tendrás más cuidado e irás a cerrar todos aquellos que no utilices? Déjanos un comentario.