Algunos programas de Linux funcionan escuchando las conexiones entrantes. Un ejemplo simple sería un servidor web, que maneja las solicitudes de los usuarios cada vez que alguien navega a un sitio web. Como administrador o usuario de Linux, es importante saber siempre qué puertos de su sistema están abiertos a Internet. De lo contrario, es posible que no se dé cuenta de las conexiones externas que se realizan en su computadora, lo que consume ancho de banda y recursos, además de ser un posible agujero de seguridad.
En esta guía, veremos cómo verificar los puertos abiertos en Ubuntu Linux. Esto se puede hacer con varias utilidades de línea de comandos diferentes, que veremos en detalle. También veremos cómo usar el firewall ufw de Ubuntu para asegurarnos de que los puertos estén seguros. Entonces, ¿sabe qué puertos de su sistema están abiertos? Vamos a averiguarlo.
Requisitos de software y convenciones de la línea de comandos de Linux Categoría | Requisitos, convenciones o versión de software utilizada |
Sistema | Ubuntu Linux |
Software | ss, Nmap, cortafuegos ufw |
Otro | Acceso privilegiado a su sistema Linux como root o a través de sudo comando. |
Convenciones | # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios |
Comprueba si hay puertos abiertos con el comando ss
El comando ss se puede usar para mostrar qué puertos están escuchando conexiones. También muestra de qué redes está aceptando las conexiones.
Recomendamos usar el -ltn
opciones con el comando para ver resultados concisos y relevantes. Veamos un ejemplo en nuestro sistema de prueba.
$ sudo ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:*
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 511 *:80 *:*
Podemos ver que nuestro servidor está escuchando conexiones en los puertos 80, 3306 y 33060. Estos son los puertos bien conocidos asociados con HTTP y MySQL.
También verá que el ss
la salida muestra que los puertos 53 y 631 están en estado de escucha. Estos son para DNS y Protocolo de impresión de Internet, respectivamente. Estos están habilitados de forma predeterminada, por lo que es probable que los vea escuchando en su propio sistema. El puerto DNS en realidad no está abierto, sino que proporciona resolución de nombres a las aplicaciones instaladas en nuestro sistema.
Para ver a qué procesos pertenecen estos puertos de escucha, incluya el -p
opción en su comando.
$ sudo ss -ltnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=530,fd=13))
LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=572,fd=7))
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:* users:(("mysqld",pid=2320,fd=32))
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=2320,fd=34))
LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=572,fd=6))
LISTEN 0 511 *:80 *:* users:(("apache2",pid=2728,fd=4),("apache2",pid=2727,fd=4),("apache2",pid=2725,fd=4))
Ahora podemos ver que systemd-resolve, cupsd, mysqld y apache2 son los servicios que utilizan los puertos para escuchar las conexiones entrantes.
Comprobar puertos abiertos con nmap
Nmap es una herramienta de reconocimiento de red que se puede utilizar para comprobar si hay puertos abiertos en hosts remotos. Sin embargo, también podemos usarlo para verificar nuestro propio sistema y obtener una lista rápida de qué puertos están abiertos.
Normalmente, especificaríamos una dirección IP remota para que Nmap la escanee. En cambio, podemos escanear nuestro propio sistema especificando localhost
en el comando.
$ sudo nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2021-03-12 20:43 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
631/tcp open ipp
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
Verifique qué puertos están abiertos en el firewall ufw
Hay una gran advertencia que debes tener en cuenta. Al usar el ss
o nmap localhost
comandos en nuestro sistema local, estamos pasando por alto el firewall. De hecho, estos comandos muestran puertos que están en estado de escucha, pero eso no significa necesariamente que los puertos estén abiertos a Internet, porque nuestro cortafuegos puede estar negando conexiones.
Verifique el estado del firewall ufw con el siguiente comando.
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
Desde la salida, podemos ver que ufw niega las conexiones entrantes. Dado que los puertos 80 y 3306 no se han agregado como excepciones, HTTP y MySQL no pueden recibir conexiones entrantes, a pesar de ss
y nmap
informando que están en un estado de escucha.
Agreguemos excepciones para estos puertos con los siguientes comandos.
$ sudo ufw allow 80/tcp
Rule added
Rule added (v6)
$ sudo ufw allow 3306/tcp
Rule added
Rule added (v6)
Podemos verificar el estado de ufw nuevamente, para ver que los puertos ahora están abiertos.
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp ALLOW IN Anywhere
3306/tcp ALLOW IN Anywhere
80/tcp (v6) ALLOW IN Anywhere (v6)
3306/tcp (v6) ALLOW IN Anywhere (v6)
Ahora nuestros dos puertos están abiertos en el firewall y en estado de escucha. Para obtener más información sobre el cortafuegos ufw, incluidos ejemplos de comandos, consulte nuestra guía sobre cómo instalar y usar el cortafuegos ufw en Linux.
Pensamientos finales
En esta guía, vimos cómo usar el ss
comando, así como el nmap
utilidad para verificar los puertos de escucha en Ubuntu Linux. También aprendimos cómo verificar el firewall ufw para ver qué puertos están abiertos y agregar excepciones si es necesario.
Si un puerto está en estado de escucha y está permitido a través del firewall, debe estar abierto a las conexiones entrantes. Pero esto también depende de su enrutador u otros dispositivos de red que se encuentren entre su computadora e Internet, ya que pueden tener sus propias reglas que bloquean las conexiones entrantes.