Introducción
UFW, o Firewall sin complicaciones, es una interfaz para iptables
diseñada para simplificar el proceso de configuración de un firewall. Mientras que iptables
es una herramienta sólida y flexible, puede resultar difícil para los principiantes aprender a usarla para configurar correctamente un firewall. Si estás buscando comenzar a asegurar tu red y no estás seguro de qué herramienta utilizar, 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.
Prerrequisitos
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 brinda 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 ejecutando Ubuntu, junto con un usuario no root con privilegios de
sudo
. Para obtener orientación sobre cómo configurar esto, 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 del 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 las versiones recientes de Ubuntu, IPv6 está habilitado de forma predeterminada. En la práctica, eso significa que la mayoría de las reglas del 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:
Luego 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 — Configuración de 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 poder 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 denegar
, 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 permitir
, 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. Estas configuraciones predeterminadas de firewall pueden ser suficientes para una computadora personal, pero los servidores generalmente 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 necesitarás crear reglas que permitan explícitamente conexiones entrantes legítimas, como las 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 UFW
Tras la instalación, 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 daemon SSH escucha de forma predeterminada.
Permitir SSH por Nombre de Servicio
Otra forma de configurar UFW para permitir conexiones entrantes de SSH 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 entrantes de SSH, puedes habilitarlo.
Paso 4 — Habilitar UFW
Su firewall debería estar configurado ahora 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 a la solicitud con y
y presiona ENTER
.
El firewall está ahora 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, deberías 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 lo hiciste para SSH en el puerto 22
. También puedes hacer esto para:
- HTTP en el puerto 80, que es lo que utilizan los servidores web no encriptados, utilizando
sudo ufw allow http
osudo ufw allow 80
- HTTPS en el puerto 443, que es lo que utilizan los servidores web encriptados, usando
sudo ufw allow https
osudo ufw allow 443
. - Apache con tanto HTTP como HTTPS, usando
sudo ufw allow ‘Apache Full’
. - Nginx con tanto HTTP como HTTPS, usando
sudo ufw allow ‘Nginx Full’
.
No olvides verificar qué perfiles de aplicación están disponibles para tu servidor con sudo ufw app list
.
Hay varias otras formas de permitir conexiones, aparte 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
, usa estos comandos:
Cuando se especifican rangos de puertos con UFW, debes especificar el protocolo (tcp
o udp
) al que se aplicarán 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 utilizar el parámetro from
, proporcionando entonces la dirección IP que deseas permitir:
OutputRule added
También puedes especificar un puerto al que la dirección IP tiene permitido conectarse añadiendo 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), utiliza este comando:
OutputRule added
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.1
hasta 203.0.113.254
, podrías utilizar 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, utilizaremos el puerto 22
(SSH) como ejemplo:
OutputRule added
Conexiones a una Interfaz de Red Específica
Si desea crear una regla de firewall que solo se aplique a una interfaz de red específica, puede hacerlo especificando “permitir en en” seguido del nombre de la interfaz de red.
Es posible que desee buscar sus interfaces de red antes de continuar. Para hacerlo, utilice 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. Normalmente, tienen nombres como eth0
o enp3s2
.
Entonces, si su servidor tiene una interfaz de red pública llamada eth0
, podría permitir el tráfico HTTP (puerto 80
) con este comando:
OutputRule added
Rule added (v6)
Al hacerlo, su servidor podría recibir solicitudes HTTP desde Internet público.
O, si desea que su servidor de base de datos MySQL (puerto 3306
) escuche conexiones en la interfaz de red privada eth1
, por ejemplo, podría usar este comando:
OutputRule added
Rule added (v6)
Esto permitiría que otros servidores en su red privada se conecten a su base de datos MySQL.
Paso 6 — Denegar conexiones
Si no ha 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 cree 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, tal vez porque sabes que tu servidor está siendo atacado desde allí. Además, si deseas 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 las cuales no quieras permitir conexiones.
Para escribir reglas de denegación, puedes usar los comandos descritos anteriormente, reemplazando permitir con 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 puedes querer 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 tan importante como 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).
Eliminar una regla de UFW por número
Para eliminar una regla de 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 demuestra 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ías eliminar la regla IPv6 correspondiente.
Eliminar una regla de UFW por nombre
En lugar de utilizar números de regla, también puedes hacer referencia a una regla por su denominación legible por humanos, que se basa en el tipo de regla (típicamente allow
o deny
) y el nombre del servicio o el 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 de allow
para un perfil de aplicación llamado Apache Full
que estaba habilitado anteriormente, puedes usar:
OutputRule deleted
Rule deleted (v6)
El comando delete
funciona de la misma manera para las reglas que se crearon haciendo referencia a un servicio por su nombre o puerto. Por ejemplo, si previamente configuraste una regla para permitir conexiones HTTP con sudo ufw allow http
, así es como podrías eliminar dicha regla:
OutputRule deleted
Rule deleted (v6)
Como los nombres de los servicios 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)
Cuando se eliminan reglas de UFW por nombre, se eliminan tanto las reglas IPv4 como las IPv6 si existen.
Paso 8 — Verificar el 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 el estado predeterminado, verás algo como esto:
OutputStatus: inactive
Si UFW está activo, lo cual debería ser si seguiste el Paso 3, la salida indicará que está activo y enumerará las reglas que están configuradas. Por ejemplo, si el firewall está configurado para permitir conexiones SSH (puerto 22
) desde cualquier lugar, la salida podría verse algo así:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Usa 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 de UFW configuradas pero decides que quieres empezar de nuevo, puedes utilizar el comando de reinicio:
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 configuraciones originales si las modificaste en algún momento.
Implementa tus aplicaciones frontend desde GitHub usando 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 requiera tu servidor, mientras 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 de Firewall Comunes.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04