Introducción
UFW, o Fuerte de la Red Simple, es una interfaz para iptables
que se dirige hacia simplificar el proceso de configuración de un firewall. Aunque iptables
es una herramienta sólida y flexible, puede ser difícil para principiantes aprender cómo usarla para configurar correctamente un firewall. Si estás buscando empezar a proteger tu red y no sabes qué herramienta usar, UFW podría ser la elección correcta para ti.
Este tutorial te mostrará cómo configurar un firewall con UFW en Ubuntu v18.04 y superior.
Requisitos previos
Si estás utilizando Ubuntu en la versión 16.04 o inferior, te recomendamos actualizar a una versión más reciente ya que Ubuntu no proporciona soporte para estas versiones. Este conjunto de guías te ayudarán en la actualización de tu versión de Ubuntu.
Para seguir este tutorial, necesitarás:
-
Un servidor ejecutando Ubuntu, junto con un usuario no root que tiene privilegios de
sudo
. Para obtener instrucciones sobre cómo configurar estos, por favor elija su distribución de la lista siguiente y siga nuestra Guía de Configuración Inicial del Servidor. -
UFW está instalado de forma predeterminada en Ubuntu. Si por alguna razón se ha desinstalado, puede instalarlo con
sudo apt install ufw
.
Configurar el cortafuegos de Ubuntu con UFW
- Habilitar IPv6
- Configurar Políticas Predeterminadas
- Permitir Conexiones SSH
- Habilitando UFW
- Permitir Cualquier Otra Conexión Requerida
- Negando Conexiones
- Eliminando Reglas de Firewall
- Comprobar el Estado y las Reglas de UFW
- Cómo Deshabilitar o Restablecer el Firewall en Ubuntu
Primera etapa: Asegurarse de que IPv6 está habilitado
En las versiones recientes de Ubuntu, IPv6 se encuentra habilitado por defecto. En la práctica, eso significa que la mayoría de reglas de fuego agregadas al servidor incluirán tanto una versión IPv4 como una versión IPv6, última identificada por v6
en la salida del comando estatus de UFW. Para asegurarte de que IPv6 está habilitado, puedes verificar tu configuración de UFW en el archivo /etc/default/ufw
. Abre este archivo usando nano
o tu edificador de línea de comandos preferido:
Asegúrate de que el valor de IPV6
sea si
. Debería parecer así:
Guarda y cierra el archivo. Si estás usando nano
, lo haces escribiendo CTRL+X
, luego Y
y ENTER
para confirmar.
Cuando UFW se active más tarde en esta guía, será configurado para escribir reglas de fuego tanto para IPv4 como para IPv6.
Etapa 2 – Configurar políticas predeterminadas
Si estás empezando con UFW, un buen paso es verificar tus políticas predeterminadas de fuego. 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 su servidor no podrá conectarse, mientras que cualquier aplicación dentro del servidor podrá alcanzar el mundo exterior. Las reglas adicionales para permitir servicios específicos y puertos se incluyen como excepciones a esta política general.
Para asegurarse de que podrá seguir con el resto de este tutorial, a continuación configurará las políticas predeterminadas de UFW para el tráfico entrante y saliente.
Para establecer la política predeterminada de entrada de UFW en denegar
, ejecute:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Para establecer la política predeterminada de salida de UFW en permitir
, ejecute:
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 cortafuegos podrían ser suficientes para una computadora personal, pero los servidores típicamente necesitan responder a solicitudes entrantes de usuarios externos. Examinaremos eso próximamente.
Paso 3 — Permitir Conexiones SSH
Si habilita su cortafuegos UFW ahora, denegaría todas las conexiones entrantes. Esto significa que tendrá que crear reglas que expresamente permitan conexiones legítimas entrantes — por ejemplo, conexiones SSH o HTTP — si quiere que su servidor responda a esos tipos de solicitudes. Si utiliza un servidor en la nube, probablemente desee permitir conexiones entrantes SSH para poder conectarse y administrar su servidor.
Permitiendo el Perfil de Aplicación OpenSSH de UFW
Después de 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. Puede verificar qué perfiles están actualmente registrados en UFW con:
OutputAvailable applications:
OpenSSH
Para habilitar el perfil de aplicación OpenSSH, ejecute:
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 por defecto.
Permitiendo SSH por Nombre de Servicio
Otra forma de configurar UFW para permitir conexiones SSH entrantes es referenciando su nombre de servicio: ssh
.
OutputRule added
Rule added (v6)
UFW sabe qué puertos y protocolos utiliza un servicio basado en el archivo /etc/services
.
Permitiendo SSH por Número de Puerto
Lo alternativo es escribir la regla equivalente especificando el puerto en lugar del perfil de aplicación o nombre de servicio. Por ejemplo, esta comanda funciona de la misma manera que las anteriores:
OutputRule added
Rule added (v6)
Si configuró su servidor SSH para usar un puerto diferente, tendrás que especificar el puerto adecuado. Por ejemplo, si tu servidor SSH está escuchando en el puerto 2222
, puedes usar esta comanda 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
Puedes verificar qué reglas se agregaron hasta ahora, incluso cuando el firewall todavía esté deshabilitado, utilizando:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Después de confirmar que tengas una regla que permita conexiones entrantes de SSH, 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
Te mostrará una advertencia que dice que la comanda podría interromper conexiones existentes de SSH. Ya has establecido una regla de firewall que permite conexiones SSH, así que debería estar bien continuar. Responde al mensaje con y
y haz clic en ENTER
.
El firewall está activo. Ejecuta la comanda sudo ufw status verbose
para ver las reglas establecidas. El resto de este tutorial cubre cómo usar UFW en detalle, como permitir o denegar diferentes tipos de conexiones.
Step 5 — Permitiendo otras conexiones
En este punto, deberías permitir todas las otras conexiones que tu servidor necesite para responder. Las conexiones que debes permitir dependen de tus necesidades específicas. Ya sabes cómo escribir reglas que permitan conexiones basadas en perfiles de aplicación, nombre de servicio o puerto; ya lo hiciste para SSH en el puerto 22
. También puedes hacerlo para:
- HTTP en el puerto 80, que es el que usan los servidores web sin encriptar, utilizando
sudo ufw allow http
osudo ufw allow 80
- HTTPS en el puerto 443, que es el que usan los servidores web encriptados, utilizando
sudo ufw allow https
osudo ufw allow 443
- Apache con ambos HTTP y HTTPS, utilizando
sudo ufw allow 'Apache Full'
- Nginx con ambos HTTP y HTTPS, utilizando
sudo ufw allow 'Nginx Full'
No olvides ver qué perfiles de aplicación están disponibles para tu servidor con sudo ufw app list
.
Hay varias otras maneras de permitir conexiones, además de especificar un puerto o nombre conocido de servicio. Vendrán algunos de estos próximamente.
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 puertos 6000
–6007
, usa 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 permite automáticamente ambos protocolos, lo cual está bien en la mayoría de los casos.
Direcciones IP Específicas
Al trabajar 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 IP de trabajo o casa 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 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), usa este comando:
OutputRule added
Subredes
Para permitir una subred de direcciones IP, puedes hacerlo usando la notación CIDR para especificar un enmascarado de red. Por ejemplo, si quieres permitir todas las direcciones IP que van desde 203.0.113.1
hasta 203.0.113.254
, podrías usar esta orden:
OutputRule added
De manera similar, también puedes especificar el puerto destino al que la subred 203.0.113.0/24
está permitida conectarse. Aquí volvemos a usar el puerto 22
(SSH) como ejemplo:
OutputRule added
Conexiones a una Interfaz de Red Específica
Si deseas crear una regla de fuego que solo aplique a una interfaz de red específica, puedes hacerlo especificando “allow in on” seguido por el nombre de la interfaz de red.
Puedes buscar tu interfaz de red antes de continuar. Para hacerlo, utilice esta orden:
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 se llaman algo como eth0
o enp3s2
.
Así pues, si tu servidor tiene una interfaz de red pública llamada eth0
, podrías permitir trafico HTTP (puerto 80
) a ella con esta orden:
OutputRule added
Rule added (v6)
Esto permitiría que tu servidor reciba solicitudes HTTP de la red pública internet.
Para que el servidor de base de datos MySQL (puerto
OutputRule added
Rule added (v6)
Esto permitiría que otros servidores en tu red privada conectaran a tu 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 crear una política de fuego que requiere de reglas que explicitamente permitan puertos específicos y direcciones IP.
Pero a veces deseas denegar conexiones basadas en la dirección IP o subred, tal vez porque sabes que tu servidor está siendo atacado desde allí. También puedes cambiar tu política predeterminada de inicio a permitir (que no es recomendable), entonces necesitarás crear reglas de denegar para cualquier servicio o dirección IP que no quieras permitir conexiones.
Para escribir reglas de denegar, puedes usar las comandas previas descritas, reemplazando permitir con denegar.
Por ejemplo, para denegar conexiones HTTP se podría utilizar esta comanda:
OutputRule added
Rule added (v6)
O si quieres denegar todas las conexiones de
OutputRule added
En algunos casos, también podrías querer bloquear conexiones salientes desde el servidor. Para negar todas las conexiones salientes del servidor en un puerto específico, como el puerto
OutputRule added
Rule added (v6)
Esto bloqueará todo el tráfico SMTP saliente del servidor.
Paso 7: Eliminando reglas
Conocer cómo eliminar reglas es tan importante como saber cómo crearlas. Hay dos formas diferentes de especificar qué reglas eliminar: por número o por su denominación humano-leible (similares a cómo se especificaron cuando se crearon).
Eliminando una Regla de UFW Por Número
Para eliminar una regla de UFW por su número, primero deberás obtener una lista numerada de todas tus reglas de fuego. La comanda estatus de UFW tiene una opción para mostrar números junto a cada regla, como 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 desea eliminar la regla número 2, la que permite conexiones al puerto 80 (HTTP), podrías especificarlo en una comanda de eliminación de UFW como esta:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Esta le pedirá confirmación y luego eliminará la regla 2, que permite conexiones HTTP. Nota que si hay activado IPv6, también deberías eliminar la correspondiente regla IPv6.
<|observation|>
Eliminando una Regla de UFW por Nombre
En lugar de usar números de reglas, también puedes referirte a una regla por su nombre legible para el humano, que se basa en el tipo de regla (normalmente allow
o deny
) y el nombre del servicio o número de puerto que fue la meta de esta regla. Por ejemplo, si quieres eliminar una regla allow
para un perfil de aplicación llamado Apache Full
que fue anteriormente habilitada, podrías usar:
OutputRule deleted
Rule deleted (v6)
La comanda delete
funciona de la misma manera para las reglas creadas referenciando un servicio por su nombre o puerto. Por ejemplo, si previamente 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)
Porque los nombres de servicios son intercambiables con números de puertos cuando se especifican reglas, también podrías referirse a la misma regla como allow 80
, en lugar de allow http
.
OutputRule deleted
Rule deleted (v6)
Al eliminar reglas por nombre, ambos IPv4 y IPv6 se eliminan si existen.
Paso 8 — Comprobando el Estado de UFW y las Reglas
En cualquier momento, puede comprobar el estado de UFW con este comando:
Si UFW está desactivado, lo cual es por defecto, verás algo así:
OutputStatus: inactive
Si UFW está activo, lo que debería ser si seguiste el paso 3, la salida decirá que está activo y listará cualquier regla que haya establecido. Por ejemplo, si la configuración del fuego abrio conexiones SSH (puerto 22
) desde cualquier lugar, la salida podría parecer así:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Use la comanda status
para comprobar cómo ha configurado UFW el fuego.
Paso 9: Desactivar o Restablecer Firewall
Si decides que no quiere usar el fuego UFW, puede desactivarlo con esta comanda:
OutputFirewall stopped and disabled on system startup
Cualquier regla que haya creado con UFW ya no estará activa. Puedes siempre ejecutar sudo ufw enable
si necesitas activarlo más tarde.
Si ya tiene reglas definidas con UFW pero decide que quiere empezar de nuevo, puedes usar la comanda reset:
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 borrará cualquier regla que hubiera definido anteriormente. Esto te dará un nuevo inicio con UFW. Ten en cuenta que las políticas predeterminadas no cambiaran a sus valores originales, si les modificaste en algún momento.
Despliegue tu aplicación front-end de GitHub usando Plataforma de Aplicaciones de DigitalOcean. Dejé a DigitalOcean la responsabilidad de escalar tu aplicación.
Conclusión
Ahora tu muro de fuego está configurado para permitir conexiones entrantes de SSH. Asegúrate de permitir cualquier otra conexión entrante que tu servidor necesite, mientras limites cualesquiera conexiones innecesarias, así tu servidor será funcional y seguro.
Para aprender más sobre configuraciones comunes de UFW, consulta la guía básica de UFW: reglas y comandos comunes.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04