Para configurar FirewallD en un servidor Linux , instale y habilite el servicio, seleccione una zona predeterminada y, a continuación, permita los servicios y puertos necesarios mediante firewall-cmd. Aplique los cambios de forma permanente, reinicie y verifique. Utilice zonas, reglas avanzadas y enmascaramiento para un control granular. Esta guía paso a paso de 2026 abarca RHEL, Rocky/AlmaLinux, CentOS Stream, Fedora, Ubuntu y Debian.
En esta guía, aprenderá a configurar FirewallD en un servidor Linux de forma segura y eficaz con firewall-cmd. Abordaremos zonas, servicios, puertos, reglas enriquecidas, NAT/reenvío de puertos, reglas de tiempo de ejecución vs. reglas permanentes, y resolución de problemas. Ya sea que... manage un VPS, servidor dedicado, o VM en la nube, este tutorial está diseñado para ser fácil de usar y estar listo para producción.
¿Qué es FirewallD y por qué usarlo en 2026?

FirewallD es un firewall dinámico manager que utiliza nftables (o iptables en sistemas heredados) para aplicar políticas de red sin interrumpir las conexiones. Introduce zonas (niveles de confianza), servicios con nombre y reglas complejas, lo que facilita la seguridad de servidores a gran escala. Es la opción predeterminada en RHEL 8/9, Rocky/AlmaLinux, CentOS Stream, Fedora y está disponible en Ubuntu/Debian.
Requisitos previos y lista de verificación de seguridad
- SSH de la máquina con privilegios sudo
- Acceso a consola/KVM o un segundo SSH sesión para evitar el bloqueo
- Conozca los nombres de sus interfaces (por ejemplo, eth0, ens160)
- Notas de la nube: abra puertos también en el grupo de seguridad de su proveedor (AWS SG, Azure NSG, reglas de firewall de GCP)
- En Ubuntu, no ejecute UFW y FirewallD simultáneamente (deshabilite UFW si usa FirewallD)
Instalar y habilitar FirewallD
Instale e inicie FirewallD según su distribución de Linux.
# RHEL / Rocky / AlmaLinux / CentOS Stream / Fedora
sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state # running
# Ubuntu 22.04/24.04 and Debian
sudo apt update && sudo apt install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state # running
# If UFW is enabled on Ubuntu, disable it to avoid conflicts:
sudo systemctl stop ufw && sudo systemctl disable ufwInicio rápido: valores predeterminados seguros en 60 segundos
Establezca la zona predeterminada y permita SSH para que no te quedes sin acceso. Luego, abre HTTP/HTTPS si se trata de un servidor web.
# Set default zone
sudo firewall-cmd --set-default-zone=public
# Allow SSH (runtime), then make it permanent
sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --add-service=ssh --permanent
# Allow web traffic (HTTP/HTTPS)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
# Apply persistent rules
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-allDescripción de las zonas de FirewallD
Las zonas representan niveles de confianza. Las zonas comunes incluyen:
- Drop: Descartar todas las entradas; solo se permiten las salientes
- Bloquear: Rechazar entrada, salida permitida
- público: redes no confiables (predeterminado para servidores)
- externo: Para NAT con enmascaramiento
- Interno: LAN confiable detrás de su servidor
- de confianza: aceptar todo (usar con cuidado)
Ver y configurar la zona predeterminada
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --get-zones
sudo firewall-cmd --get-active-zonesAsignar interfaces y fuentes a zonas
# Assign interface to a zone (permanent)
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
# Put a subnet into trusted zone (e.g., office IP range)
sudo firewall-cmd --zone=trusted --add-source=203.0.113.0/24 --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --get-active-zonesPermitir servicios y puertos
FirewallD utiliza servicios con nombre (los archivos de servicio definen puertos/protocolos). Para mayor claridad, se prefieren los servicios a los puertos sin formato.
Permitir servicios
# Common services
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reloadAbrir puertos específicos
# Single TCP port
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# Port range and UDP
sudo firewall-cmd --zone=public --add-port=6000-6010/tcp --permanent
sudo firewall-cmd --zone=public --add-port=1194/udp --permanent
sudo firewall-cmd --reloadCrear un servicio personalizado
Defina su aplicación una vez y haga referencia a ella por nombre.
# /etc/firewalld/services/myapp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>myapp</short>
<description>Custom app on port 9000/tcp</description>
<port protocol="tcp" port="9000"/>
</service>
# Load and allow it
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --add-service=myapp --permanent
sudo firewall-cmd --reloadEliminar reglas limpiamente
sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadTiempo de ejecución vs. Configuración permanente
FirewallD mantiene configuraciones de tiempo de ejecución y permanentes independientes. Los cambios en tiempo de ejecución son inmediatos, pero se pierden al reiniciar. Los cambios permanentes persisten tras la recarga o el reinicio.
Comandos de teclado
# Make current runtime rules persistent
sudo firewall-cmd --runtime-to-permanent
# Apply permanent rules to runtime
sudo firewall-cmd --reload
# See what’s active
sudo firewall-cmd --list-all
sudo firewall-cmd --list-all --zone=publicReglas enriquecidas, enmascaramiento y reenvío de puertos
Las reglas enriquecidas permiten una lógica granular (origen, destino, registro, límites de velocidad) y funciones NAT como enmascaramiento y reenvío de puertos.
Permitir un servicio desde una única IP
sudo firewall-cmd --add-rich-rule='rule family="ipv4"
source address="198.51.100.10" service name="ssh" accept' --permanent
sudo firewall-cmd --reloadLímite de velocidad y acceso a registros
# Log and limit SSH accepts to 10 per minute
sudo firewall-cmd --add-rich-rule='rule family="ipv4" service name="ssh"
log prefix="FW-SSH " level="notice" limit value="2/m" accept' --permanent
sudo firewall-cmd --reload
# Global log of denied packets (optional)
sudo sed -i 's/^#*LogDenied=.*/LogDenied=all/' /etc/firewalld/firewalld.conf
sudo systemctl reload firewalldNAT: enmascaramiento y reenvío de puertos
Utilice la zona externa para las tarjetas de red conectadas a Internet al aplicar NAT. Asegúrese de que el reenvío de IP esté habilitado.
# Enable IP forwarding (runtime and persistent)
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-firewalld.conf
sudo sysctl -p /etc/sysctl.d/99-firewalld.conf
# Enable masquerade (NAT) on public zone
sudo firewall-cmd --zone=public --add-masquerade --permanent
# Forward external port 80 to local 8080
sudo firewall-cmd --zone=public
--add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# Forward external 2222 to internal host 10.0.0.10:22
sudo firewall-cmd --zone=public
--add-forward-port=port=2222:proto=tcp:toaddr=10.0.0.10:toport=22 --permanent
sudo firewall-cmd --reloadMonitoreo, pruebas y resolución de problemas
Inspeccionar reglas activas
sudo firewall-cmd --list-all
sudo firewall-cmd --list-all --zone=public
sudo firewall-cmd --list-services
sudo firewall-cmd --list-portsPrueba de conectividad
Desde una máquina remota, valide los puertos abiertos con curl o nmap. Si usa una máquina virtual en la nube, confirme que el firewall de la nube permita los mismos puertos.
curl -I http://your.server.ip
nmap -Pn -p 22,80,443 your.server.ipProblemas comunes y soluciones
- Bloqueado fuera de SSH: Utilice la consola/KVM, permita SSH servicio, o coloque su IP de administrador en la zona de confianza.
- Conflicto UFW en Ubuntu: deshabilite UFW si FirewallD está en uso.
- El servicio no abre: Verifique la zona correcta, los grupos de seguridad en la nube y si la aplicación escucha en la interfaz correcta.
- Gotas inesperadas: Revisar LogDenied y los registros del diario: journalctl -u firewalld -f.
- Confinamiento de emergencia: firewall-cmd –panic-on (bloquea todas las entradas y salidas). Desactívelo con –panic-off cuando esté listo.
Consejos de endurecimiento para 2026
- Principio del mínimo privilegio: Abra únicamente lo que necesite; prefiera listas de permitidos por IP para puertos de administración.
- Utilice la zona pública para Internet, la interna para redes privadas y evite las de confianza excepto en casos especiales.
- Registra estratégicamente y limita la velocidad de los servicios sensibles (SSH, RDP sobre túnel).
- Automatice con Ansible o cloud-init para mantener las reglas consistentes en todos los servidores.
- Realizar copias de seguridad de las configuraciones: tar /etc/firewalld antes del mantenimiento; use el control de versiones para XML de servicio personalizado.
- Alinee el firewall del sistema operativo con los firewalls de nivel de proveedor para una defensa en profundidad.
Ejemplo de extremo a extremo: Web + SSH + Administrador privado
Este ejemplo permite el tráfico web público, restringe SSH a la IP de su oficina y asigna la NIC principal a la red pública.
# Set public as default and assign interface
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
# Public web
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# Restrict SSH to office IP
sudo firewall-cmd --add-rich-rule='rule family="ipv4"
source address="203.0.113.50/32" service name="ssh" accept' --permanent
# Deny other SSH implicitly (no generic ssh allow in public)
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=publicPreguntas frecuentes: FirewallD en servidores Linux
¿Cuál es la diferencia entre tiempo de ejecución y permanente en FirewallD?
Las reglas de ejecución se aplican inmediatamente, pero desaparecen tras reiniciar. Las reglas permanentes se almacenan en /etc/firewalld y se aplican tras recargar o reiniciar. Use –permanent para escribir reglas persistentes y luego ejecute firewall-cmd –reload. Para guardar la configuración de ejecución actual como permanente, use firewall-cmd –runtime-to-permanent.
¿Cómo abro un puerto en FirewallD?
Utilice un servicio con nombre o una regla de puerto. Por ejemplo: firewall-cmd –zone=public –add-service=http –permanent o firewall-cmd –zone=public –add-port=8080/tcp –permanent, y luego firewall-cmd –reload. Verifique con firewall-cmd –list-all y pruebe desde un host remoto.
¿Qué distribuciones de Linux utilizan FirewallD de forma predeterminada en 2026?
RHEL 8/9, Rocky Linux, AlmaLinux, CentOS Stream y Fedora usan FirewallD por defecto. En Ubuntu 22.04/24.04 y Debian, FirewallD está disponible mediante apt, pero UFW puede ser el predeterminado; deshabilítelo si cambia a FirewallD.
¿Cómo puedo permitir que sólo una IP específica acceda a un puerto?
Cree una regla enriquecida que acepte el tráfico de esa IP para el servicio o puerto de destino. Ejemplo: firewall-cmd –add-rich-rule='rule family=”ipv4″ source address=”198.51.100.10″ port port=”3306″ protocol=”tcp” accept' –permanent; luego recargue. Evite permisos genéricos que omitan este límite.
¿FirewallD reemplaza a iptables o nftables?
FirewallD es un firewall de alto nivel manager que programa filtros de paquetes. En distribuciones modernas, usa nftables como backend; en sistemas más antiguos, puede usar iptables. Obtienes comandos consistentes (firewall-cmd) sin tener que escribir manualmente las reglas de nftables/iptables.
