
Configurar un firewall en Linux es una de las medidas más importantes para proteger servidores, aplicaciones, bases de datos, paneles administrativos, servicios internos e infraestructura empresarial. Un firewall permite controlar qué tráfico entra, qué tráfico sale, qué puertos quedan expuestos y qué conexiones deben bloquearse.
En Linux existen varias herramientas para administrar reglas de firewall. Las más usadas son UFW en Ubuntu y derivados, firewalld en Red Hat, Rocky Linux, AlmaLinux, Fedora y derivados, y nftables como framework moderno de filtrado de paquetes. Debian documenta que nftables es el framework recomendado para firewall y NAT, y que reemplaza a las herramientas antiguas basadas en iptables.
Idea clave: un firewall no hace invulnerable a un servidor, pero reduce la superficie de ataque. Su objetivo es permitir solo los servicios necesarios y bloquear todo lo que no debería estar expuesto.
¿Qué es un firewall en Linux?
Un firewall es un mecanismo de seguridad que controla el tráfico de red mediante reglas. Estas reglas permiten o bloquean conexiones según criterios como puerto, protocolo, dirección IP, interfaz de red, zona, servicio o estado de la conexión.
Red Hat explica que un firewall ayuda a proteger máquinas frente a tráfico no deseado desde el exterior, permitiendo que los administradores controlen el tráfico entrante mediante reglas que ordenan si el tráfico debe bloquearse o permitirse. En servidores Linux, esto es esencial porque muchos servicios pueden quedar escuchando en puertos que no deberían estar disponibles públicamente.
Un firewall permite
- Permitir solo puertos necesarios.
- Bloquear servicios internos expuestos por error.
- Restringir acceso por IP o red.
- Separar tráfico público, privado e interno.
- Proteger SSH, bases de datos y paneles administrativos.
- Reducir la superficie de ataque del servidor.
- Registrar intentos de conexión sospechosos.
- Aplicar políticas de seguridad por servicio o zona.
UFW, firewalld o nftables: ¿cuál usar?
La herramienta adecuada depende de la distribución, el nivel técnico y el tipo de infraestructura. Ubuntu documenta UFW como una forma sencilla de gestionar reglas y controlar tráfico de red. Red Hat documenta firewalld como una herramienta basada en zonas y políticas. Debian recomienda nftables como framework moderno para firewall y NAT.
| Herramienta | Distribuciones comunes | Mejor para | Nivel |
|---|---|---|---|
| UFW | Ubuntu, Linux Mint, Debian. | Configuración rápida y sencilla de reglas. | Básico a intermedio. |
| firewalld | RHEL, Rocky Linux, AlmaLinux, Fedora. | Servidores empresariales con zonas y servicios. | Intermedio. |
| nftables | Debian, Ubuntu, RHEL, Fedora y otras. | Reglas avanzadas, NAT, filtrado moderno y control detallado. | Intermedio a avanzado. |
Principio básico: denegar por defecto y permitir lo necesario
Una política segura suele partir de una idea simple: bloquear conexiones entrantes por defecto y permitir únicamente los servicios necesarios. Por ejemplo, si un servidor solo debe ofrecer una página web y administración por SSH, no tiene sentido dejar abiertos puertos de bases de datos, paneles internos o servicios de prueba.
Reglas mínimas típicas
- SSH: puerto 22 o puerto personalizado solo para administración.
- HTTP: puerto 80 si el servidor publica sitio web.
- HTTPS: puerto 443 para tráfico web seguro.
- Base de datos: permitir solo desde IPs internas o servidores autorizados.
- Panel administrativo: restringir por IP, VPN o red privada.
Error crítico: abrir puertos “por si acaso”. Cada puerto abierto debe tener una justificación, un responsable, un servicio asociado y una regla clara de acceso.
Paso 1: identifica servicios y puertos abiertos
Antes de configurar el firewall, revisa qué servicios están escuchando. Esto te ayuda a saber qué puertos debes permitir y cuáles deberías cerrar o restringir.
# Ver puertos abiertos y procesos asociados sudo ss -tulpen # Ver servicios activos systemctl --type=service --state=running # Ver IP del servidor ip addr # Ver rutas de red ip route
Tip: si encuentras un servicio escuchando en todas las interfaces con 0.0.0.0, verifica si realmente debe estar expuesto a la red pública.
Paso 2: configurar firewall con UFW en Ubuntu o Debian
UFW, Uncomplicated Firewall, es una herramienta diseñada para simplificar la configuración del firewall. La documentación de Ubuntu la presenta como una forma de administrar reglas y controlar tráfico de red en servidores Ubuntu.
Instala UFW si no está disponible:
sudo apt update sudo apt install ufw -y
Define políticas por defecto:
sudo ufw default deny incoming sudo ufw default allow outgoing
Permite SSH antes de activar el firewall:
sudo ufw allow ssh # Si usas un puerto SSH personalizado, por ejemplo 2222: sudo ufw allow 2222/tcp
Permite tráfico web:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp
Activa UFW y revisa el estado:
sudo ufw enable sudo ufw status verbose sudo ufw status numbered
Restringir SSH por IP con UFW
Una buena práctica es permitir SSH solo desde una IP o red autorizada. Esto reduce intentos de acceso desde ubicaciones desconocidas.
# Permitir SSH solo desde una IP específica sudo ufw allow from 203.0.113.10 to any port 22 proto tcp # Permitir SSH desde una red privada sudo ufw allow from 192.168.10.0/24 to any port 22 proto tcp
Para eliminar una regla, primero lista reglas numeradas:
sudo ufw status numbered # Luego elimina por número sudo ufw delete NUMERO_DE_REGLA
Atención: si tu IP pública cambia con frecuencia, restringir SSH a una sola IP puede bloquearte. En ese caso, evalúa VPN, acceso por red privada o consola de emergencia.
Paso 3: configurar firewall con firewalld en RHEL, Rocky, AlmaLinux o Fedora
firewalld organiza reglas mediante zonas, como public, internal, trusted y otras. Red Hat documenta que firewalld usa zonas y políticas, y que cada zona tiene su propio conjunto de reglas.
Instala e inicia firewalld:
sudo dnf install firewalld -y sudo systemctl enable --now firewalld sudo systemctl status firewalld
Revisa la zona activa:
sudo firewall-cmd --get-active-zones sudo firewall-cmd --get-default-zone sudo firewall-cmd --list-all
Permite servicios comunes:
# Permitir SSH sudo firewall-cmd --permanent --add-service=ssh # Permitir HTTP y HTTPS sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # Recargar configuración sudo firewall-cmd --reload # Ver reglas activas sudo firewall-cmd --list-all
Permitir un puerto personalizado:
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
Tip: en firewalld, recuerda usar --permanent si quieres que la regla sobreviva después de reiniciar o recargar el servicio.
Usar zonas con firewalld
Las zonas permiten aplicar políticas diferentes según la interfaz o contexto de red. Por ejemplo, una interfaz pública puede tener reglas más restrictivas que una interfaz interna. Red Hat documenta que las zonas contienen información como servicios, puertos, protocolos, bloqueo ICMP, masquerade, forward ports y reglas avanzadas.
# Ver zonas disponibles sudo firewall-cmd --get-zones # Ver reglas de una zona sudo firewall-cmd --zone=public --list-all # Asignar una interfaz a una zona sudo firewall-cmd --permanent --zone=public --change-interface=eth0 # Recargar sudo firewall-cmd --reload
Recomendación: usa zonas para separar interfaces públicas, privadas, internas o de administración. Esto evita aplicar la misma política a redes con niveles de confianza distintos.
Paso 4: configuración básica con nftables
nftables es el framework moderno de filtrado de paquetes en Linux. Netfilter lo describe como un nuevo framework de clasificación de paquetes en el kernel, junto con una herramienta de usuario llamada nft. Debian lo recomienda como reemplazo de iptables para firewall y NAT.
Instala nftables:
# Debian/Ubuntu sudo apt install nftables -y # RHEL/Rocky/AlmaLinux/Fedora sudo dnf install nftables -y sudo systemctl enable --now nftables
Ejemplo de configuración básica para permitir SSH, HTTP y HTTPS:
sudo nano /etc/nftables.conf
Contenido sugerido:
#!/usr/sbin/nft -f
flush ruleset
table inet filtro {
chain entrada {
type filter hook input priority 0;
policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 accept
tcp dport {80, 443} accept
ip protocol icmp accept
ip6 nexthdr ipv6-icmp accept
}
chain salida {
type filter hook output priority 0;
policy accept;
}
chain reenvio {
type filter hook forward priority 0;
policy drop;
}
}
Valida y aplica:
sudo nft -c -f /etc/nftables.conf sudo systemctl restart nftables sudo nft list ruleset
Cuidado: nftables ofrece mucho poder, pero también exige precisión. Un error en una política por defecto puede bloquear servicios críticos.
Proteger bases de datos con reglas de firewall
Una base de datos no debería quedar expuesta públicamente salvo que exista una razón técnica muy clara y controles adicionales. En la mayoría de casos, MySQL, MariaDB, PostgreSQL, Redis o MongoDB deben aceptar conexiones solo desde la red interna o desde servidores autorizados.
# UFW: permitir PostgreSQL solo desde un servidor de aplicación sudo ufw allow from 192.168.10.20 to any port 5432 proto tcp # UFW: permitir MySQL/MariaDB solo desde red interna sudo ufw allow from 192.168.10.0/24 to any port 3306 proto tcp
En firewalld:
# Permitir PostgreSQL desde una IP específica usando rich rules sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.20" port protocol="tcp" port="5432" accept' sudo firewall-cmd --reload
Importante: proteger una base de datos no depende solo del firewall. También debes configurar usuarios, contraseñas fuertes, cifrado cuando corresponda, permisos mínimos y logs.
Registrar eventos y revisar logs del firewall
Los logs ayudan a detectar conexiones rechazadas, intentos repetidos o errores de configuración. Sin embargo, registrar demasiado tráfico puede llenar el disco o generar ruido. Activa logs de forma moderada y revisa resultados.
# UFW: activar logs sudo ufw logging on sudo ufw logging medium # Revisar logs en Ubuntu/Debian sudo grep UFW /var/log/syslog | tail -50 # firewalld: revisar servicio sudo journalctl -u firewalld --since "1 hour ago" # nftables: revisar reglas activas sudo nft list ruleset
Tip: si el firewall bloquea un servicio que debería funcionar, revisa primero puertos, reglas, zona activa, interfaz de red y logs del servicio.
Validar la configuración del firewall
Después de aplicar reglas, valida desde dentro y fuera del servidor. No basta con ver que el firewall está activo: debes confirmar que solo los puertos necesarios están accesibles.
# Desde el servidor: ver puertos escuchando sudo ss -tulpen # Probar servicio web localmente curl -I http://localhost curl -I https://localhost # Ver estado UFW sudo ufw status verbose # Ver firewalld sudo firewall-cmd --list-all # Ver nftables sudo nft list ruleset
Recomendación: valida siempre desde una segunda sesión SSH antes de cerrar la sesión actual. Si algo sale mal, aún podrás corregir la regla.
Buenas prácticas para firewall en Linux
Recomendaciones esenciales
- Bloquea tráfico entrante por defecto.
- Permite solo puertos necesarios.
- Restringe SSH por IP o VPN cuando sea posible.
- No expongas bases de datos a Internet.
- Documenta cada regla y su propósito.
- Elimina reglas antiguas o temporales.
- Prueba reglas antes de aplicarlas en producción.
- Revisa logs y alertas de conexión.
- Combina firewall con actualizaciones, hardening y monitoreo.
- Usa zonas o redes separadas para administración, producción y servicios internos.
Errores comunes al configurar un firewall Linux
Errores que debes evitar
- Activar el firewall sin permitir SSH previamente.
- Abrir rangos completos de puertos sin necesidad.
- Exponer bases de datos directamente a Internet.
- No diferenciar red pública, privada e interna.
- Dejar reglas temporales activas indefinidamente.
- No revisar qué servicios están escuchando.
- No documentar cambios.
- No probar conectividad después de aplicar reglas.
- Mezclar UFW, firewalld y reglas manuales sin control.
- Creer que el firewall reemplaza actualizaciones, contraseñas seguras o monitoreo.
Checklist rápido para proteger tu infraestructura
- Identificar servicios activos con
ss -tulpen. - Definir qué puertos deben estar abiertos.
- Permitir SSH antes de activar el firewall.
- Bloquear tráfico entrante por defecto.
- Permitir HTTP y HTTPS solo si el servidor publica web.
- Restringir bases de datos por IP o red privada.
- Activar logs moderados.
- Validar reglas desde otra sesión.
- Documentar reglas y responsables.
- Revisar reglas periódicamente.
Artículos que recomendamos
- Guía práctica de ciberseguridad: cómo proteger servidores Linux frente a ataques comunes
- Cómo detectar si tu servidor Linux tiene problemas de seguridad
- Las mejores herramientas de monitoreo para servidores Linux y entornos empresariales
- Cómo instalar y configurar un servidor Linux desde cero
- Cómo automatizar tareas en Linux utilizando Bash y Cron paso a paso
Tip final: un firewall debe revisarse como parte de la operación normal del servidor. Cada nuevo servicio, migración, cambio de IP o despliegue debe incluir revisión de reglas.
Conclusión
Configurar un firewall en Linux es una acción básica pero crítica para proteger infraestructura. UFW facilita reglas simples en Ubuntu y Debian; firewalld ofrece zonas y servicios útiles en entornos Red Hat, Rocky Linux, AlmaLinux y Fedora; y nftables proporciona una base moderna y flexible para filtrado avanzado.
La mejor estrategia es permitir solo lo necesario, bloquear lo demás, restringir servicios sensibles por IP o red privada, proteger SSH, evitar exposición directa de bases de datos, revisar logs y documentar cada regla. Un firewall bien configurado reduce riesgos y ayuda a ordenar la seguridad del servidor.
Sin embargo, el firewall no trabaja solo. Debe formar parte de una estrategia más amplia que incluya actualizaciones, hardening, usuarios con mínimos privilegios, monitoreo, backups, revisión de logs, autenticación fuerte y respuesta ante incidentes.
Resumen final
Para configurar un firewall en Linux, identifica primero servicios y puertos abiertos, define una política de bloqueo por defecto, permite SSH antes de activar reglas, habilita solo puertos necesarios como 80 y 443, restringe bases de datos por IP o red privada, revisa logs y valida conectividad. Usa UFW para configuraciones simples, firewalld para entornos empresariales con zonas y nftables para control avanzado.


