Para supervisar y proteger FirewallD en un servidor Linux, verifique su estado, establezca una configuración de privilegios mínimos con zonas y servicios, habilite el registro de paquetes denegados y automatice las alertas y los bloqueos con herramientas como Fail2Ban. Utilice firewall-cmd para listar, auditar y reforzar las reglas, y luego revise continuamente los registros y actualice las políticas ante amenazas en constante evolución.
FirewallD en entornos de servidor Linux es la primera línea de defensa para sus aplicaciones públicas. En esta guía, aprenderá a supervisar la actividad de FirewallD, auditar reglas y reforzar las configuraciones mediante comandos prácticos y flujos de trabajo seguros. Abordaremos el registro, las reglas enriquecidas, la limitación de velocidad, la integración con Fail2Ban y la higiene de seguridad continua.
¿Qué es FirewallD y por qué es importante??
FirewallD es un firewall de host dinámico que managered s Reglas a través de zonas y servicios. En RHEL, Rocky, AlmaLinux y Fedora modernos, utiliza backend de nftablesLe permite cambiar políticas sin interrumpir las conexiones, lo que lo hace ideal para servidores de producción que requieren un tiempo de actividad continuo y una seguridad sólida.
Conceptos clave: Zonas, Servicios, Tiempo de ejecución vs. Permanente
Las zonas agrupan interfaces y fuentes por nivel de confianza (por ejemplo, público, interno, de confianza). Los servicios son conjuntos de reglas predefinidas (como ssh, http, https) asignadas a puertos y protocolos.
- Ejecución: Cambios inmediatos; se pierden al reiniciar o recargar a menos que se guarden.
- Permanente: Guardado en el disco; aplicado al recargar o reiniciar.
- Mejores prácticas: Construya de forma permanente, pruébelo en tiempo de ejecución y luego vuelva a cargar para persistir.
Prerrequisitos y proceso de cambio seguro
- Tener acceso a la consola o fuera de banda managepensamiento antes de cambiar SSH reglas.
- Conozca su zona predeterminada y sus interfaces activas.
- Incluya en la lista blanca sus direcciones IP de administrador para SSH antes de endurecer las políticas.
- Planifique una ventana de mantenimiento para recargas en sistemas críticos.
Verificar el estado y la línea base de FirewallD
Para empezar, verifique que FirewallD esté instalado , activo y que sepa qué zona está en uso. Esto establece la base de monitoreo y evita bloqueos accidentales.
sudo systemctl status firewalld
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-allSi estás usando una distribución que usa de manera predeterminada otro firewall (por ejemplo, UFW de Ubuntu), usa un servicio de firewall a la vez para evitar conflictos.
Construir una política de base segura
Tu objetivo es el mínimo privilegio: permitir solo lo que el servidor necesita. Para un servidor web típico, eso es SSH para acceso de administrador y HTTP/HTTPS para visitantes.
Establecer la zona predeterminada y permitir los servicios requeridos
# Set default zone to "public" and allow core services
sudo firewall-cmd --permanent --set-default-zone=public
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
# Optional: open a specific port (e.g., PostgreSQL 5432)
sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
# Apply changes
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-allCierre de emergencia SSH A direcciones IP conocidas (recomendado)
Restringiendo SSH La propiedad intelectual de origen reduce drásticamente la fuerza bruta. riesgo. Utilice reglas enriquecidas para permitir SSH Solo desde direcciones de confianza.
# Allow SSH only from admin IPs
sudo firewall-cmd --permanent --zone=public
--add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public
--add-rich-rule='rule family=ipv6 source address=2001:db8::/64 service name="ssh" accept'
# Optionally drop SSH for everyone else (place after accepts)
sudo firewall-cmd --permanent --zone=public
--add-rich-rule='rule service name="ssh" drop'
sudo firewall-cmd --reload
sudo firewall-cmd --list-rich-rulesSupervisar la actividad y los registros de FirewallD
Habilitar el registro de paquetes denegados
Habilite la función de registro denegado para ver el tráfico rechazado. Esto es esencial para la monitorización, las alertas y la respuesta a incidentes.
# Enable logging (options: off, all, unicast, broadcast, multicast)
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --get-log-denied
# Tail recent firewall logs
sudo journalctl -u firewalld -fLeer y filtrar registros de manera eficaz
FirewallD escribe en systemd-journald. Use journalctl para consultar rangos de tiempo o grep para un análisis sin ruido.
# Last hour of FirewallD logs
sudo journalctl -u firewalld --since "1 hour ago"
# Kernel-level drops (network stack)
sudo journalctl -k | grep -i "IN="
# Summarize hits for a specific port (e.g., SSH)
sudo journalctl -k | grep -i "DPT=22" | awk '{print $NF}' | sort | uniq -c | sort -nr | headEn RHEL 8+/Rocky/AlmaLinux/Fedora, FirewallD usa nftables. Evite editar las reglas nft directamente. manage reglas con firewall-cmd para mantener la configuración consistente.
Alertas y prohibiciones automatizadas con Fail2Ban
Fail2Ban lee los registros del servicio (por ejemplo, SSH (fallos de autenticación) y utiliza FirewallD para bloquear automáticamente las direcciones IP abusivas. Este es un método probado para reducir el ruido de los ataques de fuerza bruta y proteger los recursos del servidor.
# Install fail2ban (RHEL/Rocky/AlmaLinux/Fedora)
sudo dnf install -y fail2ban
# Basic jail for SSH using FirewallD rich rules
sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = firewallcmd-rich-rules
[sshd]
enabled = true
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdMonitorear prohibiciones con fail2ban-client status sshd. Si opera varios servicios (Postfix, Dovecot, Nginx), Habilite sus cárceles y use banaction = firewallcmd-rich-rules para FirewallD cohesivo la aplicación.
Endurecimiento avanzado con reglas enriquecidas
Límite de velocidad SSH Para estrangular la fuerza bruta
La limitación de velocidad complementa a Fail2Ban. La siguiente regla permite hasta 10 conexiones por minuto. SSHLos intentos excesivos se descartan. Adapta la solución a tu entorno y a los patrones de uso legítimos.
# Rate-limit SSH globally
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="10/m" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" drop'
sudo firewall-cmd --reloadBloquear direcciones IP y subredes conocidas como incorrectas
# Block a single IPv4 address
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=198.51.100.23 drop'
# Block an IPv4 subnet
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=198.51.100.0/24 drop'
# Block an IPv6 subnet
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv6 source address=2001:db8:bad::/48 drop'
sudo firewall-cmd --reloadModo de pánico y modo de bloqueo
El modo de pánico bloquea todo el tráfico entrante y saliente inmediatamente, lo cual resulta útil durante incidentes. El modo de bloqueo restringe qué aplicaciones locales pueden modificar el firewall, lo que reduce el riesgo de manipulación.
# Panic mode (emergency only)
sudo firewall-cmd --panic-on
sudo firewall-cmd --panic-off
# Lockdown mode
sudo firewall-cmd --lockdown-on
sudo firewall-cmd --lockdown-off
# Manage lockdown whitelist (XML or firewall-cmd helpers on newer versions)
# /etc/firewalld/lockdown-whitelist.xmlMantenimiento y auditoría continuos
- Normas de auditoría periódicas:
firewall-cmd --list-ally--list-rich-rules. - Promover cambios en tiempo de ejecución probados a permanentes:
firewall-cmd --runtime-to-permanent. - Validar configuraciones después de las ediciones:
firewall-cmd --check-config. - Realice una copia de seguridad de las configuraciones de FirewallD desde
/etc/firewalld/. - Coordínese con los firewalls de la nube (grupos de seguridad de AWS, grupos de seguridad de red de Azure, firewall de VPC de GCP) para evitar reglas no coincidentes.
- Revisar los registros semanalmente; ajustar las reglas según las tendencias de tráfico denegado.
Errores Comunes que se deben Evitar
- El uso de iptables-services junto con FirewallD genera conflictos. Elija una opción.
- Editar nftables directamente en lugar de usar firewall-cmd.
- Abrir puertos de forma permanente sin documentar propósito y propietario.
- Olvidar recargar después de cambios permanentes.
- Lista blanca 0.0.0.0/0 para SSH; siempre restrinja o utilice VPN/bastión.
- No se habilita el registro denegado; no se puede monitorear lo que no se registra.
Ejemplo del mundo real: Fortalecer un servidor web en minutos
# 1) Confirm status and active zones
sudo systemctl is-active firewalld && sudo firewall-cmd --get-active-zones
# 2) Allow only SSH (restricted), HTTP, HTTPS
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --permanent --zone=public
--add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public
--add-rich-rule='rule service name="ssh" drop'
# 3) Enable denied logging and rate-limit SSH
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="10/m" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" drop'
# 4) Apply and verify
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
sudo firewall-cmd --list-rich-rules
# 5) Watch logs
sudo journalctl -u firewalld -fFAQ’s
1. ¿Cómo puedo comprobar si FirewallD se está ejecutando?
Uso: systemctl status firewalld y firewall-cmd --stateSi está inactivo, ejecutar sudo systemctl enable --now firewalld. Luego verifique las zonas y reglas con firewall-cmd --get-active-zones y --list-all.
2. ¿Cómo habilito el registro de paquetes denegados en FirewallD?
Ejecutar sudo firewall-cmd --set-log-denied=all Para registrar todos los paquetes denegados. Ver registros con journalctl -u firewalld or journalctl -kPuedes cambiar a unicast, broadcast, o multicast para reducir el ruido.
3. ¿Cuál es la diferencia entre tiempo de ejecución y permanente en FirewallD?
Los cambios en tiempo de ejecución son inmediatos, pero temporales; desaparecen tras una recarga o reinicio. Los cambios permanentes se guardan en el disco y se aplican después. firewall-cmd --reload. Convertir cambios en tiempo de ejecución con firewall-cmd --runtime-to-permanent.
4. ¿Cómo lo permito? SSH ¿Desde una única dirección IP?
Utilice una regla enriquecida: sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=203.0.113.10 service name="ssh" accept' seguido por sudo firewall-cmd --reload. Opcionalmente, agregue una regla de descarte para todos los demás. SSH intentos.
5. ¿Es FirewallD mejor que iptables para servidores?
Para la mayoría de los servidores Linux modernos, sí. FirewallD proporciona actualizaciones dinámicas de reglas, zonas y abstracciones de servicios, y utiliza nftables en las distribuciones actuales. Es más fácil mantenerlo seguro en producción que administrar directamente las reglas de iptables sin procesar.
