Configurar Firewalld en AlmaLinux: Guía de Seguridad
Configurar correctamente Firewalld en AlmaLinux es esencial para proteger tu servidor VPS. Esta guía te enseña a usar firewall-cmd para abrir puertos, gestionar zonas, crear reglas personalizadas y mantener tu servidor seguro ante ataques.
Firewalld es el firewall predeterminado en AlmaLinux y RHEL, ofreciendo una interfaz moderna para gestionar reglas de iptables/nftables. Aprende a configurarlo correctamente para tu servidor VPS.
Contenido
1. ¿Qué es Firewalld?
Firewalld es un gestor de firewall dinámico que proporciona una interfaz D-Bus para gestionar reglas de red. A diferencia de iptables, firewalld permite cambios en caliente sin perder conexiones activas.
Características principales:
- Zonas: Agrupan interfaces y conexiones con reglas predefinidas
- Servicios: Conjuntos de puertos predefinidos (ssh, http, https)
- Cambios en caliente: No requiere reiniciar para aplicar reglas
- Runtime vs Permanente: Cambios temporales o persistentes
- Rich rules: Reglas complejas con sintaxis extendida
Verificar estado de Firewalld
# Ver estado del servicio
sudo systemctl status firewalld
# Verificar si está activo
sudo firewall-cmd --state
# running
# Instalar si no está disponible
sudo dnf install firewalld -y
# Iniciar y habilitar
sudo systemctl enable --now firewalld
2. Comandos Básicos
Comandos esenciales de firewall-cmd
# Ver configuración actual
sudo firewall-cmd --list-all
# Ver todas las zonas y sus configuraciones
sudo firewall-cmd --list-all-zones
# Ver zona activa
sudo firewall-cmd --get-active-zones
# Ver zona por defecto
sudo firewall-cmd --get-default-zone
# Recargar configuración (aplicar cambios permanentes)
sudo firewall-cmd --reload
Runtime vs Permanente
# Cambio RUNTIME (temporal, se pierde al reiniciar)
sudo firewall-cmd --add-service=http
# Cambio PERMANENTE (persiste después de reiniciar)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# Hacer un cambio runtime permanente
sudo firewall-cmd --runtime-to-permanent
3. Abrir y Cerrar Puertos
Usando servicios predefinidos
# Ver servicios disponibles
sudo firewall-cmd --get-services
# Agregar servicio (HTTP, HTTPS, SSH)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
# Remover servicio
sudo firewall-cmd --permanent --remove-service=telnet
# Aplicar cambios
sudo firewall-cmd --reload
# Verificar servicios activos
sudo firewall-cmd --list-services
Abriendo puertos específicos
# Abrir puerto TCP
sudo firewall-cmd --permanent --add-port=8080/tcp
# Abrir puerto UDP
sudo firewall-cmd --permanent --add-port=53/udp
# Abrir rango de puertos
sudo firewall-cmd --permanent --add-port=3000-3100/tcp
# Cerrar puerto
sudo firewall-cmd --permanent --remove-port=8080/tcp
# Aplicar cambios
sudo firewall-cmd --reload
# Ver puertos abiertos
sudo firewall-cmd --list-ports
Puertos comunes para servidores
# Servidor web típico
sudo firewall-cmd --permanent --add-service=http # 80/tcp
sudo firewall-cmd --permanent --add-service=https # 443/tcp
# MySQL/MariaDB (solo si acceso remoto)
sudo firewall-cmd --permanent --add-port=3306/tcp
# PostgreSQL
sudo firewall-cmd --permanent --add-port=5432/tcp
# FTP
sudo firewall-cmd --permanent --add-service=ftp
# Mail (SMTP, IMAP, POP3)
sudo firewall-cmd --permanent --add-service=smtp
sudo firewall-cmd --permanent --add-service=smtps
sudo firewall-cmd --permanent --add-service=imap
sudo firewall-cmd --permanent --add-service=imaps
# cPanel/WHM
sudo firewall-cmd --permanent --add-port=2082/tcp
sudo firewall-cmd --permanent --add-port=2083/tcp
sudo firewall-cmd --permanent --add-port=2086/tcp
sudo firewall-cmd --permanent --add-port=2087/tcp
sudo firewall-cmd --reload
4. Zonas de Firewalld
Las zonas definen el nivel de confianza para conexiones de red:
| Zona | Descripción | Uso típico |
|---|---|---|
| drop | Descarta todo, sin respuesta | Máxima seguridad |
| block | Rechaza conexiones entrantes | Denegar con respuesta |
| public | Redes públicas no confiables | VPS, servidores públicos |
| external | Redes externas con NAT | Routers |
| dmz | Zona desmilitarizada | Servidores accesibles públicamente |
| work | Redes de trabajo | Oficina |
| home | Redes domésticas | Casa |
| internal | Redes internas | Intranet |
| trusted | Acepta todas las conexiones | Solo redes 100% confiables |
Gestionar zonas
# Ver zona por defecto
sudo firewall-cmd --get-default-zone
# public
# Cambiar zona por defecto
sudo firewall-cmd --set-default-zone=public
# Asignar interfaz a una zona
sudo firewall-cmd --zone=public --change-interface=eth0
# Ver configuración de una zona
sudo firewall-cmd --zone=public --list-all
# Agregar servicio a zona específica
sudo firewall-cmd --zone=public --permanent --add-service=http
5. Reglas Avanzadas (Rich Rules)
Las rich rules permiten reglas más complejas:
Permitir IP específica
# Permitir acceso SSH solo desde IP específica
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
# Permitir acceso desde subred
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
Bloquear IP
# Bloquear IP específica
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject'
# Bloquear subred
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" drop'
Limitar conexiones (rate limiting)
# Limitar conexiones SSH a 3 por minuto por IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" accept limit value="3/m"'
Logging
# Registrar conexiones bloqueadas
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" log prefix="Blocked-IP: " level="info" drop'
Ver y eliminar rich rules
# Ver rich rules
sudo firewall-cmd --list-rich-rules
# Eliminar rich rule (usar la misma sintaxis)
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.0.0.100" reject'
sudo firewall-cmd --reload
6. Troubleshooting
Problemas comunes y soluciones
No puedo acceder al servidor después de configurar firewall
# Desde consola VNC/KVM (si perdiste acceso SSH):
# Opción 1: Deshabilitar temporalmente
sudo systemctl stop firewalld
# Opción 2: Abrir SSH
sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --runtime-to-permanent
Verificar si un puerto está abierto
# Desde el servidor
sudo ss -tulnp | grep :80
# Verificar en firewalld
sudo firewall-cmd --query-port=80/tcp
# Desde otra máquina
nc -zv ip_servidor 80
nmap -p 80 ip_servidor
Ver logs de firewall
# Ver logs del kernel
sudo dmesg | grep -i firewall
# Ver logs de journald
sudo journalctl -u firewalld
# Ver logs en tiempo real
sudo journalctl -f -u firewalld
Resetear configuración
# Restaurar zona a valores por defecto
sudo firewall-cmd --zone=public --set-default --permanent
# O eliminar todas las reglas personalizadas
sudo rm /etc/firewalld/zones/public.xml
sudo firewall-cmd --reload
Preguntas Frecuentes
¿Cómo abrir el puerto 80 en AlmaLinux?
Ejecuta sudo firewall-cmd --permanent --add-service=http para abrir el puerto 80, o sudo firewall-cmd --permanent --add-port=80/tcp. Luego aplica los cambios con sudo firewall-cmd --reload. Verifica con sudo firewall-cmd --list-all.
¿Cómo ver qué puertos están abiertos en el firewall?
Usa sudo firewall-cmd --list-ports para ver puertos individuales y sudo firewall-cmd --list-services para ver servicios (que incluyen sus puertos asociados). Para ver toda la configuración: sudo firewall-cmd --list-all.
¿Cuál es la diferencia entre firewalld e iptables?
Firewalld es una interfaz moderna sobre nftables/iptables. Las ventajas de firewalld incluyen: cambios en caliente sin perder conexiones, concepto de zonas para diferentes niveles de confianza, y configuración más simple. En AlmaLinux 9+, firewalld usa nftables como backend por defecto.
¿Necesitas un VPS con AlmaLinux?
Nuestros servidores VPS vienen con AlmaLinux preinstalado, firewall configurado y soporte técnico en español 24/7.
Ver Planes VPS¿Necesitas un VPS con AlmaLinux?
Nuestros servidores VPS vienen con AlmaLinux preinstalado y soporte técnico en español 24/7.
Ver Planes VPS



