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
:
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:
OutputFirewall stopped and disabled on system startup
Luego, actívalo nuevamente:
OutputFirewall 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:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
A continuación, aborda la regla de conexiones salientes:
OutputDefault 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:
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:
Si tus cambios fueron exitosos, recibirás la siguiente salida:
OutputRule 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:
Si intentas esto después de haber ejecutado allow ssh
, sin embargo, recibirás el siguiente mensaje ya que la regla ya existe:
OutputSkipping 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:
OutputRule 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
:
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:
También puedes usar ftp
o el puerto 21
para permitir conexiones de FTP:
Para conexiones de FTP, también necesitas permitir conexiones para el puerto 20
:
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:
Del mismo modo, el siguiente comando denegará conexiones UDP a todos los puertos desde 1234
hasta 4321
:
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:
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
:
Eliminación de reglas
Si deseas eliminar algunas de las reglas que has administrado, utiliza delete
y especifica la regla que deseas eliminar:
OutputRule 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:
Luego, con esta lista numerada, revisa qué reglas están actualmente permitidas y elimina la regla refiriéndote a su número:
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
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
:
OutputDeleting:
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:
OutputFirewall is active and enabled on system startup
Para confirmar que los cambios se realizaron correctamente, verifica el estado para revisar la lista de reglas:
OutputStatus: 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:
Para desactivar UFW, ejecuta lo siguiente:
OutputFirewall 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:
OutputResetting 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.