¿Cómo abrir puertos en un servidor Linux?

Puerto abierto del firewall de Ubuntu

Podríamos intentar empezar con la definición de cortafuegos, que es necesaria para cumplir con la comprensión del “vocabulario de puertos”. El cortafuegos es un software o firmware que hace cumplir un conjunto de reglas sobre qué paquetes de datos podrán entrar o salir de una red. Se encarga de gestionar las reglas de Permitir y Denegar para los puertos.

De acuerdo con el tema de esta guía nos gustaría abrir puertos en distribuciones de Linux como Ubuntu o CentOS. Ambas distros permiten configurarlo con diferentes herramientas (paquetes de firewalls) pero con los mismos resultados.

Esta distribución contiene preinstalado el servicio UFW(Uncomplicated Firewall) por defecto. Esto simplifica toda la configuración y es fácil de usar para cualquier persona.     Compruebe el estado del servicio con el comando estándar systemctl:

Puerto abierto de Iptables

Un puerto abierto se define como un puerto que tiene un servicio escuchando y aceptando conexiones. Puede encontrar que tiene servicios escuchando en puertos que, a pesar de ello, no son accesibles desde Internet. Esto es lo que hace su firewall: Bloquear el acceso a los puertos a los que no ha permitido explícitamente el acceso. Para una guía sobre la gestión de su cortafuegos, eche un vistazo a nuestra guía UFW aquí.

Importa si un servicio está escuchando un puerto en 127.0.0.1 (localhost) o si está escuchando en 0.0.0.0 – típicamente lo que esto significa es que un servicio escuchando en localhost sólo es accesible desde la propia máquina anfitriona y no desde el resto de Internet.  Si ves un servicio escuchando en todas las interfaces (*) o en 0.0.0.0 entonces el servicio es accesible desde Internet – a menos que tenga un firewall activo, lo que tendrás que comprobar en Iptables o ejecutando “ufw status” si utilizas UFW para gestionar tu firewall.

El comando lsof (list open files), como su nombre indica, se utiliza para listar todos los archivos abiertos en linux. Estos archivos pueden ser sockets de red, archivos de disco o dispositivos abiertos por diferentes procesos. Utilice el comando lsof junto con las opciones -nP para listar todos los sockets abiertos.

Puerto de cierre de Linux

Para comprobar si algunos puertos son accesibles desde el exterior (esto es probablemente lo que quiere) puede utilizar un escáner de puertos como Nmap desde otro sistema. Ejecutar Nmap en el mismo host que quieres comprobar es bastante inútil para tu propósito.

Si el proceso que esperas no está ahí, deberías iniciar ese proceso y comprobar de nuevo netstat. Si el proceso está ahí, pero está escuchando en una interfaz y un puerto que no esperaba, entonces hay un problema de configuración (por ejemplo, podría estar escuchando, pero sólo en la interfaz loopback, por lo que vería 127.0.0.1:3306 y ninguna otra línea para el puerto 3306, en el caso de la configuración por defecto para MySQL).

Eso probará si (asumiendo puertos estándar) que hay un servidor web configurado para SSL. Tenga en cuenta que esta prueba usando telnet sólo va a funcionar si el proceso está escuchando en un puerto TCP. Si es un puerto UDP, puedes probar con cualquier cliente que vayas a usar para conectarte a él. (Veo que has utilizado el puerto 224. Esto es masqdialer, y no tengo ni idea de lo que es).

Ubuntu abre el puerto 80

La administración de redes y servidores es una de las áreas clave en las que Linux es realmente preferido a cualquier otro sistema operativo. De ahí que la mayoría de los administradores de centros de datos estén bien versados en la línea de comandos de Linux.

Para encontrar los puertos abiertos, haremos uso del comando ss, que está preinstalado en la mayoría de las distribuciones comunes de Linux y es ahora el reemplazo del anteriormente muy popular comando netstat.

Observa la salida. En la columna “State” para UDP, todos los puertos tienen el estado UNCONN, es decir, desconectado. Como sólo necesitamos los puertos que están escuchando activamente, canalizamos la salida y la filtramos con el comando grep.

Como se muestra arriba, la última columna lista los “usuarios”, es decir, los procesos que utilizan el número de puerto. Ahora puedes cerrar el puerto terminando el proceso que lo utiliza. Por ejemplo, para cerrar el puerto 80, tenemos que detener el proceso ‘Apache2’.

En este artículo, hemos aprendido cómo encontrar y cerrar un puerto abierto en Linux. Muchos puertos como el 22 (SSH), el 21 (Telnet), etc. deben mantenerse cerrados en la mayoría de las ocasiones, ya que son los puertos desde los que pueden surgir los ciberataques.

Santiago Paez