Cómo Configurar un Firewall con UFW en un Servidor en la Nube Ubuntu y Debian

Introducción

Configurar un firewall funcional es crucial para asegurar tu servidor en la nube. Anteriormente, configurar un firewall se realizaba a través de utilidades complicadas o arcanas. Muchas de estas utilidades (por ejemplo, iptables) tienen mucha funcionalidad incorporada, pero requieren un esfuerzo adicional por parte del usuario para aprender y entenderlas.

Otra opción es UFW, o Firewall Descomplicado. UFW es una interfaz para iptables que tiene como objetivo proporcionar una interfaz más amigable para el usuario que otras utilidades de gestión de firewall. UFW tiene un buen soporte en la comunidad de Linux y generalmente se instala de forma predeterminada en muchas distribuciones.

En este tutorial, configurarás un firewall utilizando UFW para asegurar un servidor en la nube con Ubuntu o Debian. También aprenderás cómo configurar reglas predeterminadas de UFW para permitir o denegar conexiones para puertos y direcciones IP, eliminar reglas que hayas creado, desactivar y activar UFW, y restablecer todo a la configuración predeterminada si lo prefieres.

Prerrequisitos

Para seguir este tutorial, necesitarás un servidor que esté ejecutando Ubuntu o Debian. Tu servidor debe tener un usuario que no sea root con privilegios de sudo. Para configurarlo en Ubuntu, sigue nuestra guía sobre Configuración Inicial del Servidor con Ubuntu 20.04. Para configurarlo en Debian, sigue nuestra guía sobre Configuración Inicial del Servidor con Debian 11. Ambas guías de configuración inicial del servidor asegurarán que tengas UFW instalado en tu máquina y que tengas un entorno seguro que puedas utilizar para practicar la creación de reglas de firewall.

Utilizando IPv6 con UFW

Si tu Servidor Virtual Privado (VPS) está configurado para IPv6, asegúrate de que UFW esté configurado para admitir IPv6 para que configure tanto las reglas de firewall IPv4 como IPv6. Para hacer esto, abre el archivo de configuración de UFW en tu editor de texto preferido. Aquí usaremos nano:

  1. sudo nano /etc/default/ufw

Confirma que IPV6 esté establecido en yes:

/etc/default/ufw
# /etc/default/ufw # # Establecer en yes para aplicar reglas que admitan IPv6 (no significa solo IPv6 en bucle # aceptado). Necesitarás 'desactivar' y luego 'activar' el firewall para # que los cambios surtan efecto. IPV6=yes

Después de haber realizado tus cambios, guarda y sale del archivo. Si estás usando nano, presiona CTRL + X, luego Y, y finalmente ENTER.

Ahora reinicia tu firewall desactivándolo primero:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Luego, actívalo nuevamente:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

Tu firewall UFW ahora está configurado para configurar el firewall tanto para IPv4 como para IPv6 cuando sea apropiado. A continuación, ajustarás las reglas predeterminadas para las conexiones a tu firewall.

Configuración de los valores predeterminados de UFW

Puedes mejorar la eficiencia de tu firewall definiendo reglas predeterminadas para permitir y denegar conexiones. El valor predeterminado de UFW es 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 puede conectarse externamente. Para actualizar las reglas predeterminadas establecidas por UFW, primero aborda la regla de conexiones entrantes:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

A continuación, aborda la regla de conexiones salientes:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Nota: Si deseas ser más restrictivo, puedes denegar todas las solicitudes salientes. Esta opción se basa en la preferencia personal. Por ejemplo, si tienes un servidor en la nube de cara al público, podría ayudar a prevenir cualquier tipo de conexiones de shell remoto. Sin embargo, hace que tu firewall sea más engorroso de manejar porque tendrás que configurar reglas para todas las conexiones salientes también. Puedes establecer esto como predeterminado con lo siguiente:

  1. sudo ufw default deny outgoing

Permitir conexiones al firewall

Permitir conexiones requiere cambiar las reglas del firewall, lo cual puedes hacer emitiendo comandos en la terminal. Si encendieras tu firewall ahora, por ejemplo, denegaría todas las conexiones entrantes. Si estás conectado a tu servidor a través de SSH, esto sería un problema porque quedarías bloqueado fuera de tu servidor. Evita que esto suceda habilitando las conexiones SSH a tu servidor:

  1. sudo ufw allow ssh

Si tus cambios fueron exitosos, recibirás la siguiente salida:

Output
Rule added Rule added (v6)

UFW viene con algunos valores predeterminados como el comando ssh utilizado en el ejemplo anterior. Alternativamente, puedes permitir conexiones entrantes al puerto 22/tcp, que utiliza Protocolo de Control de Transmisión (TCP) para lograr lo mismo:

  1. sudo ufw allow 22/tcp

Si intentas esto después de haber ejecutado allow ssh, sin embargo, recibirás el siguiente mensaje ya que la regla ya existe:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

Si tu servidor SSH está corriendo en el puerto 2222, podrías permitir conexiones con la misma sintaxis, pero reemplazándolo con el puerto 2222. Ten en cuenta que si usas el número de puerto por sí mismo, afecta tanto a tcp como a udp también:

  1. sudo ufw allow 2222/tcp
Output
Rule added Rule added (v6)

Seguridad de Servidores Web

Para asegurar un servidor web con acceso al Protocolo de Transferencia de Archivos (FTP), necesitarás permitir conexiones para el puerto 80/tcp.

Permitir conexiones para el puerto 80 es útil para servidores web como Apache y Nginx que escuchan solicitudes de conexión HTTP. Para hacer esto, permite conexiones al puerto 80/tcp:

  1. sudo ufw allow 80/tcp

UFW generalmente proporciona los perfiles con las reglas requeridas para que el servidor web funcione. Si no, los perfiles del servidor web pueden estar almacenados como “WWW” y abiertos como ftp o tcp, como en los siguientes ejemplos:

  1. sudo ufw allow www

También puedes usar ftp o el puerto 21 para permitir conexiones de FTP:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

Para conexiones de FTP, también necesitas permitir conexiones para el puerto 20:

  1. sudo ufw allow 20/tcp

Tus ajustes dependerán de qué puertos y servicios necesitas abrir, y puede ser necesario realizar pruebas. Recuerda dejar permitida también tu conexión SSH.

Especificación de Rangos de Puertos

También puedes especificar rangos de puertos para permitir o denegar con UFW. Para hacer esto, primero debes especificar el puerto en el extremo inferior del rango, seguido de dos puntos (:), y luego seguir con el extremo superior del rango. Por último, debes especificar qué protocolo (tcp o udp) quieres que apliquen las reglas.

Por ejemplo, el siguiente comando permitirá el acceso TCP a todos los puertos desde 1000 hasta 2000, inclusivo:

  1. sudo ufw allow 1000:2000/tcp

Del mismo modo, el siguiente comando denegará conexiones UDP a todos los puertos desde 1234 hasta 4321:

  1. sudo ufw deny 1234:4321/udp

Especificar Direcciones IP

Puedes permitir conexiones desde una dirección IP específica como en el siguiente ejemplo. Asegúrate de reemplazar la dirección IP con tu propia información:

  1. sudo ufw allow from your_server_ip

Como estos ejemplos demuestran, tienes mucha flexibilidad cuando se trata de ajustar las reglas del firewall al permitir selectivamente ciertos puertos y conexiones de direcciones IP. Consulta nuestra guía para obtener más información sobre cómo permitir conexiones entrantes desde una dirección IP específica o subred.

Denegar Conexiones

Si quisieras abrir todos los puertos de tu servidor —lo cual no se recomienda— podrías permitir todas las conexiones y luego denegar los puertos a los que no quieras dar acceso. El siguiente ejemplo muestra cómo denegar el acceso al puerto 80:

  1. sudo ufw deny 80/tcp

Eliminación de reglas

Si deseas eliminar algunas de las reglas que has administrado, utiliza delete y especifica la regla que deseas eliminar:

  1. sudo ufw delete allow 80/tcp
Output
Rule deleted Rule deleted (v6)

Si las reglas son largas y complejas, existe un enfoque alternativo en dos pasos. Primero, genera una lista numerada de las reglas actuales:

  1. sudo ufw status numbered

Luego, con esta lista numerada, revisa qué reglas están actualmente permitidas y elimina la regla refiriéndote a su número:

  1. sudo ufw delete number
Output
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 22/tcp ALLOW IN Anywhere [ 3] 2222/tcp ALLOW IN Anywhere [ 4] 80 ALLOW IN Anywhere [ 5] 20/tcp ALLOW IN Anywhere …

Por ejemplo, si el puerto 80 tiene el número 4 en la lista, usarías la siguiente sintaxis. Es posible que también se te pregunte si deseas proceder con la operación. Puedes decidir sí y o no n:

  1. sudo ufw delete 4
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted (v6)

Habilitación de UFW

Una vez que hayas definido todas las reglas que deseas aplicar a tu firewall, puedes habilitar UFW para que comience a hacer cumplir dichas reglas. Si te estás conectando a través de SSH, asegúrate de configurar tu puerto SSH, comúnmente el puerto 22, para permitir que se reciban conexiones. De lo contrario, podrías quedarte bloqueado fuera de tu servidor:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

Para confirmar que los cambios se realizaron correctamente, verifica el estado para revisar la lista de reglas:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

También puedes usar verbose para obtener una salida más completa:

  1. sudo ufw status verbose

Para desactivar UFW, ejecuta lo siguiente:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Restablecimiento de la Configuración Predeterminada

Si por alguna razón necesitas restablecer las reglas de tu servidor en la nube a su configuración predeterminada, puedes hacerlo con el comando ufw reset. Ten en cuenta que recibirás una solicitud para escribir y o n antes de restablecer todo, ya que hacerlo puede interrumpir las conexiones SSH existentes:

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530' Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530' Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

Restablecer la configuración predeterminada desactivará UFW y eliminará cualquier regla que hayas definido previamente. Sin embargo, la configuración predeterminada no volverá a sus ajustes originales si los modificaste en absoluto. Ahora puedes empezar de nuevo con UFW y personalizar tus reglas y conexiones según tu preferencia.

Conclusión

En este tutorial, aprendiste cómo configurar y ajustar tu servidor en la nube para permitir o restringir el acceso a un conjunto de puertos o direcciones IP. Además, practicaste eliminando cualquier regla que ya no desees y confirmaste que esos cambios se tuvieran en cuenta al deshabilitar y luego habilitar tu firewall UFW. Finalmente, has aprendido cómo restablecer tu firewall UFW a la configuración predeterminada. Para leer más sobre lo que es posible con UFW, consulta nuestra guía sobre UFW Essentials: Reglas Comunes del Firewall y Comandos.

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server