GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo mostrar/verificar puertos abiertos en Ubuntu Linux

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.

En este tutorial aprenderás:

  • Cómo buscar puertos abiertos con ss comando
  • Cómo buscar puertos abiertos con la utilidad Nmap
  • Cómo verificar y agregar puertos permitidos en el firewall ufw

Comprobación de puertos abiertos en Ubuntu Linux con el comando ss

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.


Ubuntu
  1. Cómo buscar puertos abiertos en Linux con netstat, lsof y nmap

  2. ¿Cómo verificar la versión del kernel de Linux en Ubuntu?

  3. Cómo abrir puertos en Ubuntu/Debian

  4. Comprobar el tiempo de actividad en Ubuntu Linux Server - ¿Cómo hacerlo?

  5. Ubuntu – ¿Cómo abrir un archivo .bak en Linux?

Cómo abrir un puerto en Ubuntu 20.04

Cómo buscar puertos abiertos en Debian 10

Cómo abrir libros ePub en Ubuntu Linux

Cómo abrir la terminal en Ubuntu Linux

¿Cómo comprobar si hay errores en RAM a través de Linux?

¿Cómo comprobar los puertos abiertos en Linux?

    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