Cómo utilizar el cortafuegos de Ubuntu

¿Qué es UFW?
La mayoría de los administradores de sistemas no les gusta configurar aplicaciones de seguridad de red, como los cortafuegos, de forma remota. Estas aplicaciones por defecto bloquean el acceso desde el exterior para todas las aplicaciones, excepto para aquellas que se indican claramente como permitidas.
Si ocurre un error, puedes perder el control remoto de la red. Creamos esta guía específicamente para que puedas ver una vez más el procedimiento correcto para configurar un cortafuegos UFW estándar en el sistema operativo Linux de Ubuntu.
Si profundizas más, UFW en realidad no es un cortafuegos. Es simplemente una utilidad conveniente con la que puedes configurar el netfilter incorporado en el núcleo de Linux desde la versión 2.4. No hay forma de configurar netfilter directamente, por lo que se escribió la utilidad iptables para este propósito.
Bien, UFW hizo posible simplificar aún más este proceso, permitiendo administrar rápidamente las reglas sin la necesidad de escribir archivos de configuración o leer cuidadosamente el manual de iptables. Esto es lo que realmente está codificado en el acrónimo UFW: Cortafuegos Sin Complicaciones.
¿Por qué UFW está desactivado por defecto?
Una vez que el sistema operativo Ubuntu está instalado en un servidor, por defecto no tiene un solo puerto abierto que deba ser protegido por un cortafuegos. Por lo tanto, incluso si UFW está instalado, permanece en un estado inactivo hasta que el usuario necesite configurar la protección. Lo importante a recordar es que antes de habilitar el cortafuegos, debes asegurarte de que al hacerlo no te prives del modo de configurar el servidor.
Por ejemplo, si administras el servidor utilizando una conexión SSH, entonces antes de activar el cortafuegos, debes indicar explícitamente que el demonio OpenSSH tiene permiso para usar el puerto 22 (u otro, si está configurado) y debería aceptar conexiones desde el exterior, y no descartarlas, como se implementa para todas las conexiones externas por defecto. Para hacer esto, necesitas utilizar un perfil de aplicación OpenSSH ya hecho o crear tu propia regla.
Estado de UFW
Primero, vamos a asegurarnos de que UFW está en el sistema operativo. Para hacer esto, ejecuta el comando:
sudo ufw status verbose
Si recibes la siguiente respuesta, significa que UFW está instalado en el sistema operativo, pero como mencionamos anteriormente, está en un estado inactivo:
Estado: inactivo
De lo contrario, actualiza el caché de paquetes e instala UFW utilizando el gestor de paquetes estándar:
sudo apt update && sudo apt -y install ufw
Habilitar el cortafuegos
¡Atención! Antes de ejecutar el siguiente comando, asegúrate de tener la capacidad de controlar el servidor habilitando un perfil de aplicación (OpenSSH, por ejemplo) o activando una regla personalizada.
sudo ufw enable
Vamos a verificar el estado de UFW ejecutando nuevamente el siguiente comando:
sudo ufw status verbose
Desactivar el cortafuegos
El cortafuegos se puede apagar con el comando “disable”. Ten en cuenta que esta acción no afecta de ninguna manera a las reglas creadas previamente. Todas continuarán funcionando tan pronto como se vuelva a encender el cortafuegos:
sudo ufw disable
Habilitar el registro
La segunda función más importante del cortafuegos es el registro. Con su ayuda, puedes verificar que UFW funciona correctamente e identificar signos de ciberataques. Para habilitar la función de registro, ejecuta el siguiente comando:
sudo ufw logging on
Registro habilitado
tail -f /var/log/ufw.log
… Jul 10 05:54:24 ubuntu22044 kernel: [56235.006445] [UFW BLOCK] IN=enp134s0f1 OUT= M AC=ac:1f:6b:f5:60:43:02:01:01:01:01:02:08:00 SRC=152.32.129.154 DST=37.230.134.118 LEN=60 TOS=0x00 PREC=0x00 TTL=41 ID=5377 DF PROTO=TCP SPT=47633 DPT=6606 WINDOW=29200 RES=0x00 SYN URGP=0 …
También puedes verificar syslog y kern.log:
grep -i ufw /var/log/syslog
grep -i ufw /var/log/kern.log
En ambos casos, el resultado será el mismo. Para aumentar la cantidad de información registrada en el log, cambia su nivel. Niveles disponibles: bajo (por defecto) / medio / alto / completo:
sudo ufw logging full
Desactivar el registro
Para desactivar el registro, se proporciona el nivel off:
sudo ufw logging off
Gestión de reglas
Acceso desde IPS específicas
Al crear reglas, hay dos escenarios más comunes. En el primero, el administrador del sistema requiere que solo los usuarios que tienen una dirección IP específica o una dirección IP de un cierto rango puedan conectarse al servidor. Los intentos de conexión desde cualquier otra dirección deben ser bloqueados. Esto es más aplicable para servicios no públicos o corporativos:
sudo ufw allow from [dirección_ip]
sudo ufw allow from [dirección_ip/máscara_de_subred]
Denegar desde IPS específicas
El segundo escenario será relevante para los servicios públicos cuyos servidores se ven obligados a aceptar y procesar todas las conexiones entrantes. Esto los hace vulnerables a ataques de fuerza bruta y ataques de denegación de servicio (DoS). En este caso, las reglas que prohíben la conexión desde una dirección IP específica o una dirección IP de un cierto rango serán útiles:
sudo ufw deny from [dirección_ip]
sudo ufw deny from [dirección_ip/máscara_de_subred]
Si tu servidor no se utiliza para enviar correos electrónicos, entonces sería lógico bloquear cualquier tráfico SMTP saliente para prevenir el spam potencial. Puedes hacer esto con el siguiente comando:
sudo ufw deny out 25
Eliminar reglas existentes
La forma más conveniente de eliminar reglas es por su número de serie. Para averiguar qué número coincide con qué regla de cortafuegos, ejecuta este comando:
sudo ufw status numbered
Estado: activo A Acción De -- ------ ---- [ 1] OpenSSH PERMITIR EN Cualquier sitio [ 2] OpenSSH (v6) PERMITIR EN Cualquier sitio (v6)
Ahora puedes eliminar una regla sustituyendo su número en el comando:
sudo ufw delete [número_de_regla]
Perfiles de aplicación
Los perfiles de aplicación son conjuntos predefinidos de reglas que simplifican la vida de un administrador de sistemas. Inmediatamente tienen en cuenta los puertos de conexión estándar y permiten aplicar varias reglas con un solo comando.
Lista de perfiles disponibles
Para verificar qué perfiles están disponibles para su activación, ejecuta el comando:
sudo ufw app list
Aplicaciones disponibles: OpenSSH
Habilitar perfil de aplicación
Por defecto, Ubuntu siempre tendrá disponible un perfil OpenSSH, que permite que el tráfico SSH pase por el puerto estándar 22. Para asegurarte de que después de habilitar UFW no pierdas el control a través de SSH, ejecuta el siguiente comando:
sudo ufw allow OpenSSH
Ahora puedes habilitar UFW y verificar que la regla habilitada para OpenSSH funciona:
sudo ufw status verbose
Estado: activo Registro: activo (bajo) Por defecto: denegar (entrante), permitir (saliente), desactivado (enrutado) Nuevos perfiles: omitir A Acción De -- ------ ---- 22/tcp (OpenSSH) PERMITIR EN Cualquier sitio 22/tcp (OpenSSH (v6)) PERMITIR EN Cualquier sitio (v6)
Desactivar perfil de aplicación
Puedes eliminar una regla activada utilizando el comando “delete”. Ten extremo cuidado con este comando y no desactives el perfil OpenSSH, porque si el cortafuegos está habilitado y no hay una regla que permita OpenSSH, perderás el acceso remoto al servidor:
sudo ufw delete allow [nombre_del_perfil_de_aplicación]
Lista de bloqueo de IP
No es un secreto que Internet está lleno de dispositivos programados para escanear automáticamente e intentar obtener acceso no autorizado. Sería conveniente bloquear todas las direcciones que se vean participando en dicha actividad. El proyecto IPsum mantiene un registro de direcciones IP maliciosas basado en datos de 30 servicios públicamente disponibles que publican regularmente listas de dichas direcciones. Este registro será una excelente fuente de datos para UFW.
Comienza instalando el paquete ipset:
sudo apt -y install ipset
Ahora necesitas hacer una copia de seguridad del archivo de configuración after.init existente:
sudo cp /etc/ufw/after.init /etc/ufw/after.init.orig
Clona el repositorio con archivos de configuración pre-preparados:
git clone https://github.com/poddmo/ufw-blocklist.git
Cambia un directorio de trabajo:
cd ufw-blocklist
Copia y reemplaza el archivo de configuración:
sudo cp after.init /etc/ufw/after.init
Copia el archivo de trabajo cron:
sudo cp ufw-blocklist-ipsum /etc/cron.daily/ufw-blocklist-ipsum
Cambia el dueño de estos dos archivos al superusuario root:
sudo chown root:root /etc/ufw/after.init /etc/cron.daily/ufw-blocklist-ipsum
Establece permisos a 750 (rwxr-x—) para ambos archivos también:
sudo chmod 750 /etc/ufw/after.init /etc/cron.daily/ufw-blocklist-ipsum
Descarga una lista básica de bloqueo:
curl -sS -f --compressed -o ipsum.4.txt 'https://raw.githubusercontent.com/stamparm/ipsum/master/levels/4.txt'
Establece permisos a 640 (rw-r-----) a la lista básica de bloqueo. Se almacenará directamente en el directorio /etc, por lo que cambiar los permisos es una precaución razonable contra la manipulación de esta lista:
sudo chmod 640 ipsum.4.txt
Es hora de colocar la lista en el directorio /etc:
sudo cp ipsum.4.txt /etc/ipsum.4.txt
Vamos a iniciar el script inicial:
sudo /etc/ufw/after.init start
El siguiente comando te ayudará a mostrar el número actual de entradas en la lista de bloqueo:
sudo ipset list ufw-blocklist-ipsum -terse | grep 'Number of entries'
Finalmente, asegúrate de que la lista sea aceptada y que UFW esté funcionando correctamente:
sudo /etc/ufw/after.init status
Nombre: ufw-blocklist-ipsum Tipo: hash:net Revisión: 7 Encabezado: family inet hashsize 2048 maxelem 65536 bucketsize 12 initval 0x5822a4bb Tamaño en memoria: 186912 Referencias: 3 Número de entradas: 6744 0 0 ufw-blocklist-input todos -- * * 0.0.0.0/0 0.0.0.0/0 coincide- set ufw-blocklist-ipsum src 0 0 ufw-blocklist-forward todos -- * * 0.0.0.0/0 0.0.0.0/0 coincide- set ufw-blocklist-ipsum dst 0 0 ufw-blocklist-output todos -- * * 0.0.0.0/0 0.0.0.0/0 coincide- set ufw-blocklist-ipsum dst
Ver también:
Actualizado: 28.03.2025
Publicado: 12.07.2024