Firewalls
This content is not available in your language yet.
7.1 Firewalls en Linux: UFW y NFTables
Sección titulada «7.1 Firewalls en Linux: UFW y NFTables»Introducción
Sección titulada «Introducción»En cualquier sistema expuesto a red, el firewall es la primera línea de defensa. Su función es controlar qué tráfico puede entrar o salir del sistema, aplicando políticas de seguridad basadas en reglas. Sin un firewall correctamente configurado, incluso un servidor perfectamente parcheado sigue siendo vulnerable.
En Linux moderno existen múltiples herramientas, pero destacan dos enfoques:
- UFW (Uncomplicated Firewall) → interfaz simplificada (ideal para administración rápida).
- NFTables → herramienta avanzada y moderna que sustituye a iptables.
Como Sysadmin, debes ser capaz de trabajar con ambos: UFW para operaciones rápidas y NFTables para configuraciones complejas y altamente optimizadas.
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Comprender cómo funciona un firewall a nivel de filtrado de paquetes.
- Configurar reglas básicas con UFW.
- Implementar políticas avanzadas con NFTables.
- Gestionar tráfico entrante, saliente y reenviado.
- Diagnosticar problemas de conectividad relacionados con firewall.
- Diseñar políticas seguras en entornos de producción.
Conceptos Teóricos
Sección titulada «Conceptos Teóricos»1. ¿Qué es un Firewall?
Sección titulada «1. ¿Qué es un Firewall?»Un firewall es un sistema que inspecciona paquetes de red y decide si deben ser:
- Aceptados (ACCEPT)
- Rechazados (REJECT)
- Descartados (DROP)
Se basa en reglas que analizan:
- IP origen/destino
- puerto
- protocolo (TCP, UDP, ICMP)
2. Tipos de filtrado
Sección titulada «2. Tipos de filtrado»Stateless
Sección titulada «Stateless»- No mantiene estado.
- Analiza paquetes individualmente.
Stateful (moderno)
Sección titulada «Stateful (moderno)»- Mantiene seguimiento de conexiones.
- Permite tráfico relacionado automáticamente.
Ejemplo:
- Permites conexión saliente HTTP → respuestas permitidas automáticamente.
3. Cadenas y tablas (concepto base)
Sección titulada «3. Cadenas y tablas (concepto base)»En motores como nftables:
- INPUT → tráfico entrante
- OUTPUT → tráfico saliente
- FORWARD → tráfico encaminado
4. Políticas por defecto
Sección titulada «4. Políticas por defecto»Definen comportamiento cuando no hay reglas:
- deny all → todo bloqueado (recomendado)
- allow all → inseguro
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Configurar un servidor seguro:
- Solo permitir SSH y HTTP
- Bloquear resto de tráfico entrante
- Permitir salidas
Parte 1: Configuración con UFW
Sección titulada «Parte 1: Configuración con UFW»Paso 1: Instalar y activar UFW
Sección titulada «Paso 1: Instalar y activar UFW»sudo apt install ufwsudo ufw enablePaso 2: Definir políticas por defecto
Sección titulada «Paso 2: Definir políticas por defecto»sudo ufw default deny incomingsudo ufw default allow outgoingPaso 3: Permitir SSH
Sección titulada «Paso 3: Permitir SSH»sudo ufw allow 22/tcpPermitir SSH antes de activar el firewall evita perder acceso al servidor.
Paso 4: Permitir HTTP
Sección titulada «Paso 4: Permitir HTTP»sudo ufw allow 80/tcpPaso 5: Ver estado
Sección titulada «Paso 5: Ver estado»sudo ufw status verboseOutput esperado
Sección titulada «Output esperado»Status: activeDefault: deny (incoming), allow (outgoing)22/tcp ALLOW80/tcp ALLOWPaso 6: Eliminar regla
Sección titulada «Paso 6: Eliminar regla»sudo ufw delete allow 80/tcpPaso 7: Limitar acceso SSH
Sección titulada «Paso 7: Limitar acceso SSH»sudo ufw limit 22/tcpMitiga ataques brute-force.
Parte 2: Configuración con NFTables
Sección titulada «Parte 2: Configuración con NFTables»Paso 1: Ver estado
Sección titulada «Paso 1: Ver estado»sudo nft list rulesetPaso 2: Crear configuración básica
Sección titulada «Paso 2: Crear configuración básica»Editar:
sudo nano /etc/nftables.confContenido:
table inet filter { chain input { type filter hook input priority 0; policy drop;
ct state established,related accept iif lo accept
tcp dport 22 accept tcp dport 80 accept }
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }}Explicación
Sección titulada «Explicación»- policy drop → bloqueo por defecto
- ct state established → tráfico legítimo permitido
- lo → loopback permitido
- reglas específicas → puertos abiertos
Paso 3: Aplicar configuración
Sección titulada «Paso 3: Aplicar configuración»sudo systemctl enable nftablessudo systemctl start nftablesPaso 4: Validar reglas
Sección titulada «Paso 4: Validar reglas»sudo nft list rulesetPaso 5: Añadir regla en caliente
Sección titulada «Paso 5: Añadir regla en caliente»sudo nft add rule inet filter input tcp dport 443 acceptErrores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Pérdida de conexión SSH
Sección titulada «1. Pérdida de conexión SSH»-Causa:*
- Firewall bloqueó puerto 22.
-Solución:*
- Acceso por consola (KVM / rescue).
- Corregir reglas.
2. Servicio no accesible
Sección titulada «2. Servicio no accesible»Verificar:
ss -tulnpY firewall:
ufw status3. Reglas duplicadas
Sección titulada «3. Reglas duplicadas»Revisar:
ufw status numbered4. NFTables no persistente
Sección titulada «4. NFTables no persistente»Asegurar:
systemctl enable nftables5. Conflicto UFW vs NFTables
Sección titulada «5. Conflicto UFW vs NFTables»Usar múltiples firewalls simultáneamente puede generar conflictos imprevisibles.
Buenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Política “deny by default”
Sección titulada «1. Política “deny by default”»Siempre:
deny incoming2. Principio de mínimo acceso
Sección titulada «2. Principio de mínimo acceso»Solo abrir puertos necesarios.
3. Logging selectivo
Sección titulada «3. Logging selectivo»En nftables:
log prefix "DROP: "4. Hardening SSH junto a firewall
Sección titulada «4. Hardening SSH junto a firewall»- limitar conexiones
- usar fail2ban
5. Segmentación de red
Sección titulada «5. Segmentación de red»Separar:
- frontend
- backend
- bases de datos
6. Automatización
Sección titulada «6. Automatización»Ejemplo Ansible:
- name: Configurar firewall ufw: rule: allow port: 227. Auditorías periódicas
Sección titulada «7. Auditorías periódicas»nmap localhost8. Evitar reglas demasiado permisivas
Sección titulada «8. Evitar reglas demasiado permisivas»❌ Incorrecto:
ufw allow 0.0.0.0/0Resumen y Siguiente Paso
Sección titulada «Resumen y Siguiente Paso»Has aprendido a implementar firewalls en Linux utilizando tanto UFW como NFTables, entendiendo desde la teoría del filtrado hasta la aplicación práctica en entornos reales. Este conocimiento es clave para proteger infraestructuras frente a accesos no autorizados.
El siguiente paso es profundizar en la visibilidad del sistema:
➡️ 7.2 Auditoría y Logs, donde aprenderás a monitorizar eventos, detectar intrusiones y analizar actividad del sistema en profundidad.
