Introducción
UFW, o Firewall no Complicado, es una interfaz para iptables
que está diseñada para 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 adecuadamente un firewall. Si estás buscando empezar a asegurar tu red y no estás seguro de qué herramienta usar, UFW puede ser la elección correcta para ti.
Este tutorial te mostrará cómo configurar un firewall con UFW en Ubuntu v18.04 y versiones posteriores.
Requisitos previos
Si estás utilizando Ubuntu versión 16.04 o anterior, te recomendamos que actualices a una versión más reciente, ya que Ubuntu ya no proporciona soporte para estas versiones. Esta colección de guías te ayudará a actualizar tu versión de Ubuntu.
Para seguir este tutorial, necesitarás:
-
Un servidor que ejecute Ubuntu, junto con un usuario no root con privilegios de
sudo
. Para obtener orientación sobre cómo configurarlos, elige tu distribución de esta lista y sigue nuestra Guía de Configuración Inicial del Servidor. -
UFW se instala por defecto en Ubuntu. Si ha sido desinstalado por alguna razón, puedes instalarlo con
sudo apt install ufw
.
Configurar el firewall de Ubuntu con UFW
- Habilitar IPv6
- Establecer Políticas Predeterminadas
- Permitir Conexiones SSH
- Habilitar UFW
- Permitir Otras Conexiones Requeridas
- Denegar Conexiones
- Eliminación de reglas de firewall
- Verificar el estado y las reglas de UFW
- Cómo deshabilitar o restablecer el firewall en Ubuntu
Paso 1: Asegurarse de que IPv6 esté habilitado
En versiones recientes de Ubuntu, IPv6 está habilitado de forma predeterminada. En la práctica, esto significa que la mayoría de las reglas de firewall agregadas al servidor incluirán tanto una versión IPv4 como una versión IPv6, esta última identificada por v6
dentro de la salida del comando de estado de UFW. Para asegurarse de que IPv6 esté habilitado, puede verificar el archivo de configuración de UFW en /etc/default/ufw
. Abra este archivo usando nano
o su editor de línea de comandos favorito:
Asegúrese de que el valor de IPV6
esté configurado en yes
. Debería verse así:
Guarde y cierre el archivo. Si está utilizando nano
, puede hacerlo escribiendo CTRL+X
, luego Y
y ENTER
para confirmar.
Cuando UFW esté habilitado en un paso posterior de esta guía, se configurará para escribir reglas de firewall tanto IPv4 como IPv6.
Paso 2 — Configurar Políticas Predeterminadas
Si estás comenzando con UFW, un buen primer paso es verificar tus políticas de firewall predeterminadas. Estas reglas controlan cómo manejar el tráfico que no coincide explícitamente con ninguna otra regla.
Por defecto, UFW está configurado para denegar todas las conexiones entrantes y permitir todas las conexiones salientes. Esto significa que cualquier persona que intente alcanzar tu servidor no podrá conectarse, mientras que cualquier aplicación dentro del servidor podrá alcanzar el mundo exterior. Reglas adicionales para permitir servicios y puertos específicos se incluyen como excepciones a esta política general.
Para asegurarte de que puedas seguir el resto de este tutorial, ahora configurarás las políticas predeterminadas de UFW para el tráfico entrante y saliente.
Para establecer la política de entrada predeterminada de UFW en deny
, ejecuta:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Para establecer la política de salida predeterminada de UFW en allow
, ejecuta:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Estos comandos establecen los valores predeterminados para denegar las conexiones entrantes y permitir las conexiones salientes. Estos valores predeterminados de firewall podrían ser suficientes para una computadora personal, pero los servidores típicamente necesitan responder a solicitudes entrantes de usuarios externos. Veremos eso a continuación.
Paso 3 — Permitir conexiones SSH
Si habilitaras ahora tu firewall UFW, denegaría todas las conexiones entrantes. Esto significa que deberás crear reglas que permitan explícitamente conexiones entrantes legítimas, como conexiones SSH o HTTP, por ejemplo, si deseas que tu servidor responda a esos tipos de solicitudes. Si estás utilizando un servidor en la nube, probablemente querrás permitir conexiones SSH entrantes para poder conectarte y administrar tu servidor.
Permitir el Perfil de Aplicación OpenSSH de UFW
Al instalarlo, la mayoría de las aplicaciones que dependen de conexiones de red registrarán un perfil de aplicación dentro de UFW, lo que permite a los usuarios permitir o denegar rápidamente el acceso externo a un servicio. Puedes verificar qué perfiles están actualmente registrados en UFW con:
OutputAvailable applications:
OpenSSH
Para habilitar el perfil de aplicación OpenSSH, ejecuta:
OutputRule added
Rule added (v6)
Esto creará reglas de firewall para permitir todas las conexiones en el puerto 22
, que es el puerto en el que el demonio SSH escucha de forma predeterminada.
Permitir SSH por Nombre de Servicio
Otra forma de configurar UFW para permitir conexiones SSH entrantes es haciendo referencia a su nombre de servicio: ssh
.
OutputRule added
Rule added (v6)
UFW sabe qué puertos y protocolos utiliza un servicio en función del archivo /etc/services
.
Permitir SSH por Número de Puerto
Alternativamente, puedes escribir la regla equivalente especificando el puerto en lugar del perfil de aplicación o nombre de servicio. Por ejemplo, este comando funciona igual que los ejemplos anteriores:
OutputRule added
Rule added (v6)
Si has configurado 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:
OutputRule added
Rule added (v6)
Ahora que tu firewall está configurado para permitir conexiones SSH entrantes, puedes habilitarlo.
Paso 4 — Habilitar UFW
Su firewall ahora debería estar configurado para permitir conexiones SSH. Para verificar qué reglas se han agregado hasta ahora, incluso cuando el firewall todavía está desactivado, puedes usar:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Después de confirmar que tienes una regla para permitir conexiones SSH entrantes, puedes habilitar el firewall con:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Recibirás una advertencia que dice que el comando puede interrumpir las conexiones SSH existentes. Ya configuraste una regla de firewall que permite conexiones SSH, así que debería estar bien continuar. Responde al mensaje con y
y presiona ENTER
.
El firewall ahora está activo. Ejecuta el comando sudo ufw status verbose
para ver las reglas que están configuradas. 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 otras conexiones a las que tu servidor necesita responder. Las conexiones que debes permitir dependen de tus necesidades específicas. Ya sabes cómo escribir reglas que permiten conexiones basadas en un perfil de aplicación, un nombre de servicio o un puerto; ya hiciste 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 no encriptados, usando
sudo ufw allow http
osudo ufw allow 80
- HTTPS en el puerto 443, que es lo que utilizan los servidores web cifrados, utilizando
sudo ufw allow https
osudo ufw allow 443
- Apache con tanto HTTP como HTTPS, utilizando
sudo ufw allow ‘Apache Full’
- Nginx con tanto HTTP como HTTPS, utilizando
sudo ufw allow ‘Nginx Full’
No olvides verificar qué perfiles de aplicación están disponibles para tu servidor con sudo ufw app list
.
Existen varias otras formas de permitir conexiones, además de especificar un puerto o nombre de servicio conocido. Veremos algunas de estas a continuación.
Rangos de Puertos Específicos
Puedes especificar rangos de puertos con UFW. Algunas aplicaciones utilizan múltiples puertos, en lugar de un solo puerto.
Por ejemplo, para permitir conexiones X11, que utilizan los puertos 6000
–6007
, utiliza estos comandos:
Al especificar rangos de puertos con UFW, debes especificar el protocolo (tcp
o udp
) 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 trabajas con UFW, también puedes especificar direcciones IP dentro de tus reglas. Por ejemplo, si deseas permitir conexiones desde una dirección IP específica, como la dirección IP de trabajo o de casa de 203.0.113.4
, necesitas usar el parámetro from
, proporcionando luego la dirección IP que deseas permitir:
OutputRule added
También puedes especificar un puerto al que se le permite conectar a la dirección IP agregando to any port
seguido del número de puerto. Por ejemplo, si deseas permitir que 203.0.113.4
se conecte al puerto 22
(SSH), usa este comando:
OutputRule added
Subredes
Si deseas permitir una subred de direcciones IP, puedes hacerlo utilizando la notación de CIDR para especificar una máscara de red. Por ejemplo, si deseas permitir todas las direcciones IP que van desde 203.0.113.1
hasta 203.0.113.254
, podrías usar este comando:
OutputRule added
De igual manera, también puedes especificar el puerto de destino al que la subred 203.0.113.0/24
tiene permitido conectarse. Nuevamente, usaremos el puerto 22
(SSH) como ejemplo:
OutputRule added
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 “permitir en en” seguido del nombre de la interfaz de red.
Puede que desees buscar tus interfaces de red antes de continuar. Para hacerlo, utiliza este comando:
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
La salida resaltada indica los nombres de las interfaces de red. Por lo general, tienen nombres como eth0
o enp3s2
.
Entonces, si tu servidor tiene una interfaz de red pública llamada eth0
, podrías permitir el tráfico HTTP (puerto 80
) en ella con este comando:
OutputRule added
Rule added (v6)
Al hacerlo, permitirías que tu servidor recibiera solicitudes HTTP desde 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, podrías usar este comando:
OutputRule added
Rule added (v6)
Esto permitiría que otros servidores en tu red privada se conecten a tu base de datos MySQL.
Paso 6 — Denegar Conexiones
Si no has cambiado la política predeterminada para las conexiones entrantes, UFW está configurado para denegar todas las conexiones entrantes. Generalmente, esto simplifica el proceso de creación de una política de firewall segura al requerir que crees reglas que permitan explícitamente puertos específicos y direcciones IP.
Sin embargo, a veces querrás denegar conexiones específicas basadas en la dirección IP de origen o en la subred, quizás porque sabes que tu servidor está siendo atacado desde allí. Además, si quieres cambiar tu política de entrada predeterminada a permitir (lo cual no se recomienda), necesitarías crear reglas de denegación para cualquier servicio o dirección IP para los que no desees permitir conexiones.
Para escribir reglas de denegación, puedes usar los comandos descritos anteriormente, reemplazando permitir por denegar.
Por ejemplo, para denegar conexiones HTTP, podrías usar este comando:
OutputRule added
Rule added (v6)
O si deseas denegar todas las conexiones desde 203.0.113.4
podrías usar este comando:
OutputRule added
En algunos casos, también puede que desees bloquear conexiones salientes desde el servidor. Para denegar que todos los usuarios utilicen un puerto en el servidor, como el puerto 25
para el tráfico SMTP, puedes usar denegar salida
seguido del número de puerto:
OutputRule added
Rule added (v6)
Esto bloqueará todo el tráfico SMTP saliente en el servidor.
Paso 7 — Eliminar Reglas
Saber cómo eliminar reglas de firewall es igual de importante que saber cómo crearlas. Hay dos formas diferentes de especificar qué reglas eliminar: por número de regla o por su denominación legible por humanos (similar a cómo se especificaron las reglas cuando se crearon).
Eliminación de una regla UFW por número
Para eliminar una regla UFW por su número, primero querrás obtener una lista numerada de todas tus reglas de firewall. El comando de estado de UFW tiene una opción para mostrar números junto a cada regla, como se muestra aquí:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Si decides que deseas eliminar la regla número 2, la que permite conexiones al puerto 80 (HTTP), puedes especificarlo en un comando de eliminación de UFW de esta manera:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Esto solicitará una confirmación y luego eliminará la regla 2, que permite conexiones HTTP. Ten en cuenta que si tienes IPv6 habilitado, también querrás eliminar la regla IPv6 correspondiente.
Eliminación de una regla UFW por nombre
En lugar de utilizar números de regla, también puedes referirte a una regla por su denominación legible por humanos, que se basa en el tipo de regla (generalmente allow
o deny
) y el nombre del servicio o número de puerto que era el objetivo de esta regla, o el nombre del perfil de aplicación en caso de que se haya utilizado. Por ejemplo, si deseas eliminar una regla allow
para un perfil de aplicación llamado Apache Full
que fue previamente habilitado, puedes usar:
OutputRule deleted
Rule deleted (v6)
El comando delete
funciona de la misma manera para reglas que fueron creadas haciendo referencia a un servicio por su nombre o puerto. Por ejemplo, si anteriormente estableciste una regla para permitir conexiones HTTP con sudo ufw allow http
, así es como podrías eliminar dicha regla:
OutputRule deleted
Rule deleted (v6)
Dado que los nombres de servicio son intercambiables con los números de puerto al especificar reglas, también podrías referirte a la misma regla como allow 80
, en lugar de allow http
:
OutputRule deleted
Rule deleted (v6)
Al eliminar reglas de UFW por nombre, se eliminan tanto las reglas IPv4 como IPv6 si existen.
Paso 8 — Verificación del Estado y Reglas de UFW
En cualquier momento, puedes verificar el estado de UFW con este comando:
Si UFW está desactivado, que es lo predeterminado, verás algo así:
OutputStatus: inactive
Si UFW está activo, como debería estar si seguiste el Paso 3, la salida indicará que está activo y mostrará cualquier regla que esté configurada. Por ejemplo, si el firewall está configurado para permitir conexiones SSH (puerto 22
) desde cualquier lugar, la salida podría parecerse a esto:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Utiliza el comando status
si deseas verificar cómo UFW ha configurado el firewall.
Paso 9 — Desactivar o Restablecer el Firewall
Si decides que no deseas utilizar el firewall UFW, puedes desactivarlo con este comando:
OutputFirewall stopped and disabled on system startup
Cualquier regla que hayas creado con UFW ya no estará activa. Si necesitas activarlo más tarde, siempre puedes ejecutar sudo ufw enable
.
Si ya tienes reglas UFW configuradas pero decides empezar de nuevo, puedes utilizar el comando de restablecimiento:
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.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Esto desactivará UFW y eliminará cualquier regla que se haya definido previamente. Esto te dará un nuevo comienzo con UFW. Ten en cuenta que las políticas predeterminadas no volverán a sus ajustes originales si las modificaste en algún momento.
Implementa tus aplicaciones frontend desde GitHub utilizando la Plataforma de Aplicaciones de DigitalOcean. Deja que DigitalOcean se encargue de escalar tu aplicación.
Conclusión
Ahora tu firewall está configurado para permitir (al menos) conexiones SSH. Asegúrate de permitir cualquier otra conexión entrante que necesite tu servidor, al mismo tiempo que limitas cualquier conexión innecesaria, para que tu servidor sea funcional y seguro.
Para aprender sobre configuraciones más comunes de UFW, echa un vistazo al tutorial UFW Essentials: Reglas y Comandos Comunes del Firewall.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu