Cómo configurar el firewall UFW en Ubuntu 18.4

Introducción

UFW, o Uncomplicated Firewall (firewall no complicado), es una interfaz de iptables que está orientada a simplificar el proceso de configuración de un firewall.

Si bien iptables es una herramienta sólida y flexible, puede ser difícil para los principiantes aprender a usarla para configurar correctamente un firewall.

Si estás buscando comenzar a proteger tu red y no estás seguro de qué herramienta usar, UFW puede ser la opción correcta para ti.

Este tutorial te mostrará cómo configurar un firewall con UFW en Ubuntu 18.04.

Prerrequisitos

Para seguir este tutorial, necesitarás:

UFW se instala por defecto en Ubuntu. Si se ha desinstalado por algún motivo, puedes instalarlo con sudo apt install ufw.

Paso 1 – Uso de IPv6 con UFW (opcional)

Este tutorial está escrito con IPv4 en mente, pero funcionará para IPv6 siempre que lo habilites.

Si tu servidor Ubuntu tiene habilitado IPv6, asegúrate de que UFW esté configurado para admitir IPv6 para que puedas administrar las reglas de firewall para IPv6 además de IPv4.

Para hacer esto, debes abrir la configuración de UFW con nano o tu editor favorito.

Luego asegúrate de que el valor de IPV6 es yes. Debe tener un aspecto como este:

Guarda y cierra el archivo. Ahora, cuando UFW está habilitado, se configurará para escribir reglas de firewall IPv4 e IPv6.

Sin embargo, antes de habilitar UFW, queremos asegurarnos de que tu firewall esté configurado para permitirle conectarse a través de SSH.

Comencemos con la configuración de las políticas predeterminadas.

Paso 2 – Configuración de políticas predeterminadas

Si recién estás comenzando con tu firewall, las primeras reglas para definir son tus políticas predeterminadas.

Estas reglas controlan cómo manejar el tráfico que no coincide explícitamente con ninguna otra regla.

De manera predeterminada, UFW está configurado para denegar todas las conexiones entrantes y permitir todas las conexiones salientes.

Esto significa que cualquiera que intente llegar a tu servidor no podrá conectarse, mientras que cualquier aplicación dentro del servidor podrá llegar al mundo exterior.

Regresemos las reglas de UFW a los valores predeterminados para que podamos estar seguros de que podrás seguir este tutorial.

Para establecer los valores predeterminados utilizados por UFW, debes usar estos comandos:

Estos comandos establecen los valores predeterminados para denegar conexiones entrantes y permitir conexiones salientes.

Estos valores predeterminados del firewall solo pueden ser suficientes para una computadora personal, pero los servidores generalmente necesitan responder a las solicitudes entrantes de usuarios externos.

Lo veremos a continuación.

Paso 3 – Permitir conexiones SSH

Si habilitamos nuestro firewall UFW ahora, negaría todas las conexiones entrantes.

Esto significa que necesitaremos crear reglas que permitan explícitamente conexiones entrantes legítimas, por ejemplo, conexiones SSH o HTTP, si queremos que nuestro servidor responda a ese tipo de solicitudes.

Si estás utilizando un servidor en la nube, probablemente desees permitir conexiones SSH entrantes para poder conectarte y administrar tu servidor.

Para configurar tu servidor para permitir conexiones SSH entrantes, puedes usar este comando:

Esto creará reglas de firewall que permitirán todas las conexiones en el puerto 22, que es el puerto que el demonio SSH escucha de manera predeterminada.

UFW sabe qué allow ssh significa puerto porque está listado como un servicio en el archivo /etc/services.

Sin embargo, en realidad podemos escribir la regla equivalente especificando el puerto en lugar del nombre del servicio.

Por ejemplo, este comando funciona igual que el anterior:

Si configuraste tu demonio SSH para usar un puerto diferente, tendrás que especificar el puerto apropiado.

Por ejemplo, si tu servidor SSH está escuchando en el puerto 2222, puedes usar este comando para permitir conexiones en ese puerto:

Ahora que tu firewall está configurado para permitir conexiones SSH entrantes, podemos habilitarlo.

Paso 4 – Habilitar UFW

Para habilitar UFW, usa este comando:

Recibirás una advertencia que dice que el comando puede interrumpir las conexiones SSH existentes.

Ya configuramos una regla de firewall que permite conexiones SSH, por lo que debería estar bien continuar. Debes responder a la solicitud con y y presionar ENTER.

El firewall ahora está activo. Ejecuta el comando sudo ufw status verbose para ver las reglas establecidas.

El resto de este tutorial cubre cómo usar UFW con más detalle, como permitir o denegar diferentes tipos de conexiones.

Paso 5 – Permitir otras conexiones

En este punto, debes permitir todas las demás conexiones a las que tu servidor necesita responder.

Las conexiones que debes permitir dependen de tus necesidades específicas.

Afortunadamente, ya sabes cómo escribir reglas que permiten conexiones basadas en un nombre de servicio o puerto; Ya hicimos esto para SSH en el puerto 22. También puedes hacer esto para:

  • HTTP en el puerto 80, que es lo que usan los servidores web sin cifrar, usando sudo ufw allow http o sudo ufw allow 80
  • HTTPS en el puerto 443, que es lo que usan los servidores web cifrados, usando sudo ufw allow https o sudo ufw allow 443

Hay varias otras formas de permitir otras conexiones, además de especificar un puerto o servicio conocido.

Rangos de puertos específicos

Puedes especificar rangos de puertos con UFW. Algunas aplicaciones usan múltiples puertos, en lugar de un solo puerto.

Por ejemplo, para permitir conexiones X11, que utilizan puertos 6000- 6007, utilizan estos comandos:

Al especificar rangos de puertos con UFW, debes especificar el protocolo (tcpudp) al que deben aplicarse las reglas.

No hemos mencionado esto antes porque no especificar el protocolo automáticamente permite ambos protocolos, lo cual está bien en la mayoría de los casos.

Direcciones IP específicas

Cuando trabajes con UFW, también puedes especificar direcciones IP.

Por ejemplo, si deseas permitir conexiones desde una dirección IP específica, como una dirección IP de trabajo o particular 203.0.113.4, debe especificar from, para la dirección IP:

También puedes especificar un puerto específico al que la dirección IP puede conectarse agregando to any port seguido del número de puerto.

Por ejemplo, si deseas permitir a 203.0.113.4 conectarse al puerto 22 (SSH), debes usar este comando:

Subredes

Si deseas permitir una subred de direcciones IP, puedes hacerlo utilizando la notación CIDR para especificar una máscara de red.

Por ejemplo, si deseas permitir todas las direcciones IP que van desde 203.0.113.1203.0.113.254, puedes usar este comando:

Del mismo modo, también puedes especificar el puerto de destino al que la subred 203.0.113.0/24 puede conectarse.

Nuevamente, usaremos el puerto 22 (SSH) como ejemplo:

Conexiones a una interfaz de red específica

Si deseas crear una regla de firewall que solo se aplique a una interfaz de red específica, puedes hacerlo especificando “allow in on” seguido del nombre de la interfaz de red.

Es posible que desees buscar sus interfaces de red antes de continuar. Para hacerlo, usa este comando:

La salida resaltada indica los nombres de la interfaz de red. Suelen llamarse algo así como eth0enp3s2.

Entonces, si tu servidor tiene una interfaz de red pública llamada eth0, puedes permitirle el tráfico HTTP (puerto 80) con este comando:

Hacerlo permitiría que tu servidor reciba solicitudes HTTP de Internet público.

O, si deseas que tu servidor de base de datos MySQL (puerto 3306) escuche conexiones en la interfaz de red privada eth1, por ejemplo, puedes usar este comando:

Esto permitiría que otros servidores en tu red privada se conecten a tu base de datos MySQL.

Paso 6 – Negar conexiones

Si no has cambiado la política predeterminada para las conexiones entrantes, UFW está configurado para denegar todas las conexiones entrantes.

En general, esto simplifica el proceso de creación de una política de firewall segura al exigirte que crees reglas que permitan explícitamente puertos específicos y direcciones IP.

Sin embargo, a veces querrás negar conexiones específicas basadas en la dirección IP o subred de origen, tal vez porque sabes que tu servidor está siendo atacado desde allí.

Además, si deseas cambiar tu política de entrada predeterminada para permitir (que no se recomienda), necesitarías crear reglas de denegación para cualquier servicio o dirección IP para la que no deseas permitir conexiones.

Para escribir reglas de denegación (deny), puedes usar los comandos descritos anteriormente, reemplazando permitir (allow) con denegar (deny).

Por ejemplo, para denegar conexiones HTTP, puedes usar este comando:

O si deseas negar todas las conexiones 203.0.113.4, puedes usar este comando:

Ahora echemos un vistazo a cómo eliminar reglas.

Paso 7 – Eliminar reglas

Saber cómo eliminar las reglas del firewall es tan importante como saber cómo crearlas.

Hay dos formas diferentes de especificar qué reglas eliminar: por número de regla o por la regla real (similar a cómo se especificaron las reglas cuando se crearon).

Comenzaremos con la eliminación por método de número de regla porque es más fácil.

Por número de regla

Si estás utilizando el número de regla para eliminar las reglas del firewall, lo primero que querrás hacer es obtener una lista de las reglas del firewall.

El comando de estado UFW tiene una opción para mostrar números al lado de cada regla, como se demuestra aquí:

Si decidimos que queremos eliminar la regla 2, la que permite las conexiones del puerto 80 (HTTP), podemos especificarla en un comando de eliminación UFW como este:

Esto mostraría un mensaje de confirmación y luego eliminaría la regla 2, que permite conexiones HTTP.

Ten en cuenta que, si tienes habilitado IPv6, también querrás eliminar la regla IPv6 correspondiente.

Por regla

La alternativa a los números de regla es especificar la regla real a eliminar. Por ejemplo, si deseas eliminar la regla allow http, puedes escribirla así:

También puedes especificar la regla por allow 80, en lugar de por el nombre del servicio:

Este método eliminará las reglas IPv4 e IPv6, si existen.

Este método eliminará las reglas IPv4 e IPv6, si existen.

Paso 8 – Verificación del estado y las reglas de UFW

En cualquier momento, puedes verificar el estado de UFW con este comando:

Si UFW está desactivado, lo cual es predeterminado, verás algo como esto:

Si UFW está activo, lo que debería ser si seguiste el Paso 3, la salida indicará que está activo y enumerará todas las reglas establecidas.

Por ejemplo, si el firewall está configurado para permitir conexiones SSH (puerto 22) desde cualquier lugar, la salida podría verse así:

Utiliza el comando status si deseas verificar cómo UFW ha configurado el firewall.

Paso 9 – Deshabilitar o restablecer UFW (opcional)

Si decides que no deseas usar UFW, puedes deshabilitarlo con este comando:

Cualquier regla que hayas creado con UFW ya no estará activa. Siempre puedes ejecutar sudo ufw enable si necesitas activarlo más tarde.

Si ya tienes configuradas las reglas de UFW, pero decides que deseas comenzar de nuevo, puedes usar el comando de reinicio:

Esto deshabilitará UFW y eliminará cualquier regla que se haya definido previamente.

Ten en cuenta que las políticas predeterminadas no cambiarán a su configuración original, si las modificaste en algún momento. Esto debería darte un nuevo comienzo con UFW.

Conclusión

Tu firewall ahora está configurado para permitir (al menos) conexiones SSH.

Asegúrate de permitir cualquier otra conexión entrante a tu servidor, al tiempo que limitas las conexiones innecesarias, para que tu servidor sea funcional y seguro.

Para obtener información sobre las configuraciones más comunes de UFW, puedes consultar el tutorial  Reglas y comandos comunes del firewall UFW.