Firewall básico con UFW y firewalld
Introducción
Linux gestiona el tráfico de red a nivel de kernel mediante netfilter. Por encima de él
existen herramientas de alto nivel que facilitan la definición de reglas:
UFW (Uncomplicated Firewall) es el estándar en Ubuntu y Debian, mientras que firewalld es el estándar en RedHat, Fedora y Rocky Linux. Ambas simplifican la gestión de iptables o nftables en segundo plano.
UFW — Uncomplicated Firewall (Ubuntu/Debian)
Activar y desactivar UFW:
# ufw enable # activar el firewall
# ufw disable # desactivar el firewall
# ufw status # ver estado y reglas activas
# ufw status verbose # estado detallado
# ufw status numbered # reglas numeradas (útil para borrar)
Política por defecto:
# ufw default deny incoming # bloquear todo el tráfico entrante por defecto
# ufw default allow outgoing # permitir todo el tráfico saliente por defecto
Permitir servicios y puertos:
# ufw allow ssh # permitir SSH (puerto 22)
# ufw allow 80/tcp # permitir HTTP
# ufw allow 443/tcp # permitir HTTPS
# ufw allow 8080 # permitir un puerto concreto (TCP y UDP)
# ufw allow from 192.168.1.0/24 # permitir toda una subred
# ufw allow from 192.168.1.5 to any port 22 # SSH solo desde una IP
Denegar tráfico:
# ufw deny 23 # bloquear Telnet
# ufw deny from 10.0.0.5 # bloquear una IP concreta
Eliminar reglas:
# ufw delete allow 80/tcp # eliminar regla por descripción
# ufw delete 3 # eliminar regla número 3 (ver con status numbered)
Restablecer todas las reglas:
# ufw reset # eliminar todas las reglas y desactivar UFW
Perfil de aplicación:
UFW incluye perfiles predefinidos para aplicaciones comunes:
$ ufw app list # listar perfiles disponibles
# ufw allow "Nginx Full" # permitir HTTP y HTTPS de Nginx
# ufw allow "OpenSSH" # permitir SSH
firewalld — RedHat / Fedora / Rocky Linux
firewalld organiza las reglas en zonas. Cada interfaz se asigna a una zona, y
cada zona tiene su propia política de tráfico. La zona por defecto en RHEL es
public.
Activar y estado:
# systemctl enable --now firewalld
$ firewall-cmd --state # ver si está activo
$ firewall-cmd --get-active-zones # zonas activas y sus interfaces
$ firewall-cmd --list-all # reglas de la zona por defecto
$ firewall-cmd --list-all --zone=public # reglas de la zona public
Permitir servicios y puertos:
# firewall-cmd --add-service=ssh --permanent
# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --add-port=8080/tcp --permanent
# firewall-cmd --reload # aplicar cambios permanentes
Sin --permanent la regla es temporal y desaparece al reiniciar. Con --permanent se guarda
pero no se aplica hasta hacer --reload.
Eliminar reglas:
# firewall-cmd --remove-service=http --permanent
# firewall-cmd --remove-port=8080/tcp --permanent
# firewall-cmd --reload
Ver servicios disponibles:
$ firewall-cmd --get-services # lista de servicios predefinidos
UFW vs firewalld
Herramienta Distribución Backend Modelo
UFW Ubuntu / Debian iptables/nft Reglas simples, sin zonas
firewalld RHEL / Fedora / Rocky nftables Zonas, servicios predefinidos, rico en opciones
En ambos casos, la regla de oro es: permitir SSH antes de activar el firewall para no perder el acceso remoto al servidor.