Fundamentos de UFW – reglas y comandos más comunes

Introducción

UFW es una herramienta de configuración de firewall para iptables que viene con Ubuntu de forma predeterminada. Esta guía de estilo de hoja de trucos proporciona una referencia rápida a los comandos UFW que crearán las reglas del servidor de seguridad de iptables que son útiles en escenarios comunes y cotidianos.

Esto incluye ejemplos UFW de permitir y bloquear varios servicios por puerto, interfaz de red y dirección IP de origen.

Como usar esta guía

  • Si recién estás comenzando a usar UFW para configurar tu firewall, puedes consultar alguna guía introductoria en línea.
  • La mayoría de las reglas que se describen aquí suponen que estás utilizando el conjunto de reglas UFW predeterminado. Es decir, está configurado para permitir el tráfico saliente y denegar el trafico entrante, a través de las políticas predeterminadas, por lo que debe permitir el tráfico selectivo
  • Utiliza las siguientes secciones que sean aplicables a lo que estás tratando de lograr. La mayoría de las secciones no están basadas en ninguna otra, por lo que puedes usar los ejemplos a continuación de forma independiente
  • Usa los encabezas dentro del articulo o la función de búsqueda de tu navegador para ubicar las secciones que necesitas
  • Copia y pega los ejemplos de la línea de comandos que se dan, sustituyendo los valores en rojo con tus propios valores.

Recuerda que puedes verificar tu conjunto de reglas UFW actual con sudo ufw statussudo ufw status verbose.

Bloquear una dirección IP

Para bloquear todas las conexiones de red que se originan desde una dirección IP específica, 15.15.15.51 por ejemplo, ejecuta este comando:

En este ejemplo, from 15.15.15.51 especifica una fuente de dirección IP “15.15.15.51”. Si lo deseas, una subred, como por ejemplo 15.15.15.0/24, puede especificarse aquí. La dirección IP de origen se puede especificar en cualquier regla de firewall, incluyendo una regla allow.

Bloquear conexiones a una interfaz de red

Para bloquear conexiones desde una dirección IP específica, por ejemplo 15.15.15.51, a una interfaz de red específica, por ejemplo, eth0, usa este comando:

Este es el mismo que el ejemplo anterior, con la adición de in on eth0. La interfaz de red se puede especificar en cualquier regla de firewall, y es una excelente manera de limitar la regla a una red en particular.

Servicio: SSH

Si estás utilizando un servidor en la nube, es probable que desees permitir conexiones SSH entrantes (puerto 22) para poder conectarte y administrar tu servidor. Esta sección explica cómo configurar tu firewall con varias reglas relacionadas con SSH.

Permitir SSH

Para permitir todas las conexiones SSH entrantes ejecuta este comando:

Una sintaxis alternativa es especificar el número de puerto del servicio SSH:

Permitir SSH entrante desde una dirección IP específica o subred

Para permitir conexiones SSH entrantes desde una dirección IP o subred específica, especifica la fuente. Por ejemplo, si deseas permitir la subred completa 15.15.15.0/24, ejecuta este comando:

Permitir Rsync entrante desde una dirección IP específica o subred

Rsync, que se ejecuta en el puerto 873, se puede usar para transferir archivos de una computadora a otra.

Para permitir las conexiones rsync entrantes desde una dirección IP o subred específica, tienes que especificar la dirección IP de origen y el puerto de destino. Por ejemplo, si deseas permitir que toda la subred 15.15.15.0/24 pueda hacer rsync a tu servidor, ejecuta este comando:

Servicio: Servidor Web

Los servidores web, como Apache y Nginx, normalmente escuchan las solicitudes en los puertos 80 y 443 para las conexiones HTTP y HTTPS, respectivamente. Si tu política predeterminada para el tráfico entrante está configurada para cancelar o rechazar, tendrás que crear reglas que permitan a tu servidor responder a esas solicitudes.

Permitir todos los HTTP entrantes

Para permitir todas las conexiones HTTP entrantes (puerto 80) ejecuta este comando:

Una sintaxis alternativa es especificar el número de puerto del servicio HTTP:

Permitir todos los HTTPS entrantes

Para permitir todas las conexiones HTTPS (puerto 443) entrantes ejecuta este comando:

Una sintaxis alternativa es especificar el número de puerto del servicio HTTPS:

Permitir todos los HTTP y HTTPS entrantes

Si deseas permitir el tráfico HTTP y HTTPS, puedes crear una sola regla que permita ambos puertos. Para permitir que todas las conexiones entrantes HTTP y HTTPS (puerto 443) debes ejecutar este comando:

Ten en cuenta que debes especificar el protocolo, con proto tcp, al especificar varios puertos.

Servicio: MySQL

MySQL escucha las conexiones de clientes en el puerto 3306. Si tu servidor de base de datos MySQL está siendo utilizado por un cliente en un servidor remoto, debes asegurarte de permitir ese tráfico.

Permitir MySQL desde una dirección IP específica o subred

Para permitir conexiones de MySQL entrantes desde una dirección IP o subred específica, tienes que especificar la fuente. Por ejemplo, si deseas permitir la subred 15.15.15.0/24 completa, hay que ejecutar este comando:

Permitir MySQL a una interfaz de red específica

Para permitir conexiones de MySQL a una interfaz de red específica, digamos que tienes una interfaz de red privada eth1, usa este comando:

Servicio: PostgreSQL

PostgreSQL escucha las conexiones de clientes en el puerto 5432. Si tu cliente está utilizando tu servidor de base de datos PostgreSQL en un servidor remoto, debes asegurarte de permitir ese tráfico.

PostgreSQL desde dirección IP específica o subred

Para permitir conexiones entrantes de PostgreSQL desde una dirección IP o subred específica, hay que especificar la fuente. Por ejemplo, si deseas permitir la subred completa 15.15.15.0/24, usa este comando:

El segundo comando, que permite el tráfico saliente de las conexiones PostgreSQL establecidas, solo es necesario si la política OUTPUT no está establecida en ACCEPT.

Permitir PostgreSQL a una interfaz de red específica

Para permitir las conexiones de PostgreSQL a una interfaz de red específica, digamos que tienes una interfaz de red privada eth1, por ejemplo, usa el siguiente comando:

El segundo comando, que permite el tráfico saliente de las conexiones PostgreSQL establecidas, solo es necesario si la política OUTPUT no está establecida en ACCEPT.

Servicio: Correo

Los servidores de correo, como Sendmail y Postfix, escuchan en una variedad de puertos dependiendo de los protocolos que se utilizan para la entrega de correo. Si estás ejecutando un servidor de correo, determina qué protocolos está utilizando y permite los tipos de tráfico adecuados. También te mostraremos cómo crear una regla para bloquear el correo SMTP saliente.

Bloquear correo SMTP saliente

Si tu servidor no debería enviar correo saliente, es posible que desees bloquear ese tipo de tráfico. Para bloquear el correo SMTP saliente, que usa el puerto 25, ejecuta este comando:

Esto configura tu firewall para eliminar todo el tráfico saliente en el puerto 25. Si necesitas rechazar un servicio diferente por su número de puerto, en lugar del puerto 25, simplemente reemplázalo.

Permitir todo SMTP entrante

Para permitir que tu servidor responda a las conexiones SMTP, puerto 25, usa el siguiente comando:

Nota: es común que los servidores SMTP usen el puerto 587 para el correo saliente.
Permitir todos los IMAP entrantes

Para permitir que tu servidor responda a las conexiones IMAP, puerto 143, ejecuta este comando:

Permitir todos los IMAPS entrantes

Para permitir que tu servidor responda a las conexiones IMAPS, puerto 993, ejecuta este comando:

Permitir todos los POP3 entrantes

Para permitir que tu servidor responda a las conexiones POP3, puerto 110, usa este comando:

Permitir todos los POP3S entrantes

Para permitir que tu servidor responda a las conexiones POP3S, puerto 995, ejecuta el siguiente comando:

Conclusión

Eso debería cubrir muchos de los comandos que se usan comúnmente cuando se usa UFW para configurar un firewall.

Por supuesto, UFW es una herramienta muy flexible, así que siéntete libre de mezclar y combinar los comandos con diferentes opciones para satisfacer tus necesidades específicas si no están cubiertas aquí.