Cómo configurar un firewall con UFW en un servidor en la nube Ubuntu y Debian

Introducción
Configurar un firewall que funcione es fundamental para proteger su servidor en la nube. Anteriormente, la configuración de un firewall se realizaba mediante utilidades complejas o arcaicas. Muchas de estas utilidades (por ejemplo, iptables
) tienen muchas funciones integradas, pero requieren un esfuerzo adicional por parte del usuario para aprenderlas y comprenderlas.
Otra opción es UFW , o Uncomplicated Firewall . UFW es una interfaz iptables
que tiene como objetivo proporcionar una interfaz más fácil de usar que otras utilidades de administración de firewall. UFW tiene un buen soporte en la comunidad Linux y, por lo general, se instala de forma predeterminada en muchas distribuciones.
En este tutorial, configurará un firewall con UFW para proteger un servidor en la nube Ubuntu o Debian. También aprenderá a configurar las reglas predeterminadas de UFW para permitir o denegar conexiones a puertos y direcciones IP, eliminar reglas que haya creado, deshabilitar y habilitar UFW y restablecer todo a la configuración predeterminada si lo prefiere.
Prerrequisitos
Para seguir este tutorial, necesitará un servidor que ejecute Ubuntu o Debian. Su servidor debe tener un usuario que no sea root con privilegios sudo. Para configurar esto para Ubuntu, siga nuestra guía sobre Configuración inicial del servidor con Ubuntu 20.04 . Para configurar esto para Debian, siga nuestra guía sobre Configuración inicial del servidor con Debian 11. Ambas guías de configuración inicial del servidor garantizarán que tenga UFW instalado en su máquina y que tenga un entorno seguro que pueda usar para practicar la creación de reglas de firewall.
Uso de IPv6 con UFW
Si su servidor privado virtual (VPS) está configurado para IPv6, asegúrese de que UFW esté configurado para admitir IPv6 de modo que configure las reglas de firewall tanto de IPv4 como de IPv6. Para ello, abra el archivo de configuración de UFW en su editor de texto preferido. Aquí utilizaremos nano
:
- sudo nano /etc/default/ufw
Confirme que IPV6
está configurado en yes
:
/etc/default/ufw# /etc/default/ufw## Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback# accepted). You will need to 'disable' and then 'enable' the firewall for# the changes to take affect.IPV6=yes…
Después de realizar los cambios, guarde y salga del archivo. Si está utilizando nano
, presione CTRL + X
, Y
y luego ENTER
.
Ahora reinicie su firewall deshabilitándolo primero:
- sudo ufw disable
OutputFirewall stopped and disabled on system startup
Luego habilítelo nuevamente:
- sudo ufw enable
OutputFirewall is active and enabled on system startup
Ahora, el firewall de UFW está configurado para configurar el firewall tanto para IPv4 como para IPv6 cuando corresponda. A continuación, ajustará las reglas predeterminadas para las conexiones al firewall.
Configuración de los valores predeterminados de UFW
Puede mejorar la eficiencia de su firewall definiendo reglas predeterminadas para permitir y denegar conexiones. La regla predeterminada de UFW es denegar todas las conexiones entrantes y permitir todas las conexiones salientes. Esto significa que cualquiera que intente acceder a su servidor no podrá conectarse, mientras que cualquier aplicación dentro del servidor podrá conectarse externamente. Para actualizar las reglas predeterminadas establecidas por UFW, primero aborde la regla de conexiones entrantes:
- sudo ufw default deny incoming
OutputDefault incoming policy changed to 'deny'(be sure to update your rules accordingly)
A continuación, aborde la regla de conexiones salientes:
- sudo ufw default allow outgoing
OutputDefault outgoing policy changed to 'allow'(be sure to update your rules accordingly)
Nota: Si desea ser más restrictivo, puede rechazar todas las solicitudes salientes. Esta opción se basa en sus preferencias personales. Por ejemplo, si tiene un servidor en la nube de acceso público, podría ayudar a evitar cualquier tipo de conexión de shell remota. Sin embargo, esto hace que sea más complicado administrar su firewall porque también deberá configurar reglas para todas las conexiones salientes. Puede configurar esto como predeterminado con lo siguiente:
- sudo ufw default deny outgoing
Permitir conexiones al firewall
Para permitir conexiones es necesario cambiar las reglas del firewall, lo que puedes hacer emitiendo comandos en la terminal. Si activas el 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 no podrías acceder a él. Evita que esto suceda activando las conexiones SSH a tu servidor:
- sudo ufw allow ssh
Si sus cambios fueron exitosos, recibirá el siguiente resultado:
OutputRule addedRule added (v6)
UFW viene con algunos valores predeterminados, como el ssh
comando utilizado en el ejemplo anterior. Como alternativa, puede permitir conexiones entrantes al puerto 22/tcp
, que utiliza el Protocolo de control de transmisión (TCP) para lograr lo mismo:
- sudo ufw allow 22/tcp
Sin embargo, si intentaste esto después de haber ejecutado allow ssh
, recibirás el siguiente mensaje ya que la regla ya existe:
OutputSkipping adding existing ruleSkipping adding existing rule (v6)
Si su servidor SSH se ejecuta en el puerto 2222
, puede permitir conexiones con la misma sintaxis, pero reemplazarla por el puerto 2222
. Tenga en cuenta que si utiliza el número de puerto por sí solo, también afecta tcp
a y :udp
- sudo ufw allow 2222/tcp
OutputRule addedRule added (v6)
Protección de servidores web
Para proteger un servidor web con acceso al Protocolo de transferencia de archivos (FTP) , deberá permitir conexiones para el puerto 80/tcp
.
Permitir conexiones al puerto 80
es útil para servidores web como Apache y Nginx que reciben solicitudes de conexión HTTP. Para ello, permita conexiones al puerto 80/tcp
:
- sudo ufw allow 80/tcp
UFW normalmente proporciona los perfiles con las reglas necesarias para que el servidor web funcione. De lo contrario, los perfiles del servidor web pueden almacenarse como “WWW” y abrirse como ftp
o tcp
, como en los siguientes ejemplos:
- sudo ufw allow www
También puedes usar ftp
nuestro puerto 21
para permitir conexiones FTP:
- sudo ufw allow ftp
- sudo ufw allow 21/tcp
Para las conexiones FTP, también debe permitir conexiones para el puerto 20
:
- sudo ufw allow 20/tcp
Los ajustes que realice dependerán de los puertos y servicios que necesite abrir, y puede que sea necesario realizar pruebas. Recuerde dejar también habilitada la conexión SSH.
Especificación de rangos de puertos
También puede especificar rangos de puertos para permitir o denegar con UFW. Para ello, primero debe especificar el puerto en el extremo inferior del rango, luego dos puntos ( :
) y luego el extremo superior del rango. Por último, debe especificar a qué protocolo (ya sea tcp
o udp
) desea que se apliquen las reglas.
Por ejemplo, el siguiente comando permitirá el acceso TCP a todos los puertos desde 1000
hasta 2000
, inclusive:
- sudo ufw allow 1000:2000/tcp
De igual forma, el siguiente comando denegará las conexiones UDP a todos los puertos desde 1234
hasta 4321
:
- sudo ufw deny 1234:4321/udp
Especificación de direcciones IP
Puede permitir conexiones desde una dirección IP específica, como se muestra a continuación. Asegúrese de reemplazar la dirección IP con su propia información:
- sudo ufw allow from your_server_ip
Como demuestran estos ejemplos, tiene mucha flexibilidad a la hora de ajustar las reglas del firewall al permitir de forma selectiva ciertos puertos y conexiones de direcciones IP. Consulte nuestra guía para obtener más información sobre cómo permitir conexiones entrantes desde una dirección IP o subred específicas .
Negar conexiones
Si quisieras abrir todos los puertos de tu servidor ( lo cual no es recomendable ), 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ías el acceso al puerto 80
:
- sudo ufw deny 80/tcp
Eliminar reglas
Si desea eliminar algunas de las reglas que ha administrado, utilice delete
y especifique la regla que desea eliminar:
- sudo ufw delete allow 80/tcp
OutputRule deletedRule deleted (v6)
Si las reglas son largas y complejas, existe un enfoque alternativo de dos pasos. Primero, genere una lista numerada de las reglas actuales:
- sudo ufw status numbered
Luego, con esta lista numerada, revise qué reglas están permitidas actualmente y elimine la regla haciendo referencia a su número:
- sudo ufw delete number
OutputStatus: 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
es el número 4 de la lista, deberá utilizar la siguiente sintaxis. También es posible que se le solicite que continúe con la operación. Puede responder sí y
o no n
:
- sudo ufw delete 4
OutputDeleting: allow 80Proceed with operation (y|n)? yRule deleted (v6)
Habilitación de UFW
Una vez que haya definido todas las reglas que desea aplicar a su firewall, puede habilitar UFW para que comience a aplicarlas. Si se conecta a través de SSH, asegúrese de configurar su puerto SSH, generalmente port 22
, para permitir que se reciban conexiones. De lo contrario, podría quedarse bloqueado fuera de su servidor:
- sudo ufw enable
OutputFirewall is active and enabled on system startup
Para confirmar que se realizaron los cambios, verifique el estado para revisar la lista de reglas:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere22/tcp ALLOW Anywhere2222/tcp ALLOW Anywhere20/tcp ALLOW Anywhere80/tcp DENY Anywhere…
También puedes utilizar verbose
para obtener un resultado más completo:
- sudo ufw status verbose
Para deshabilitar UFW, ejecute lo siguiente:
- sudo ufw disable
OutputFirewall stopped and disabled on system startup
Restablecer la configuración predeterminada
Si por alguna razón necesitas restablecer las reglas de tu servidor en la nube a sus valores predeterminados, puedes hacerlo con el ufw reset
comando. Ten en cuenta que recibirás un mensaje para escribir y
o n
antes de restablecer todo, ya que hacerlo puede interrumpir las conexiones SSH existentes:
- sudo ufw reset
OutputResetting all rules to installed defaults. This may disrupt existing sshconnections. Proceed with operation (y|n)? yBacking 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'
Si restablece la configuración predeterminada, se desactivará UFW y se eliminarán las reglas que haya definido anteriormente. Sin embargo, la configuración predeterminada no volverá a su configuración original si la modificó. Ahora puede comenzar de nuevo con UFW y personalizar sus reglas y conexiones según sus preferencias.
Conclusión
En este tutorial, aprendió a configurar su servidor en la nube para permitir o restringir el acceso a un subconjunto de puertos o direcciones IP. Además, practicó la eliminación de las reglas que ya no desea y la confirmación de que se tuvieron en cuenta esos cambios deshabilitando y habilitando su firewall UFW. Por último, aprendió a restablecer su firewall UFW a la configuración predeterminada. Para leer más sobre lo que es posible con UFW, consulte nuestra guía sobre UFW Essentials: Common Firewall Rules and Commands .
Deja una respuesta