7.5 iptables y nftables
UFW (módulo 4.4) es una capa de abstracción sobre iptables, que a su vez es la interfaz de espacio de usuario para netfilter, el subsistema de filtrado de paquetes del kernel. El examen LFCS puede pedirte trabajar directamente con iptables cuando UFW no está disponible o cuando necesitas reglas más precisas.
1. Arquitectura: tablas y cadenas
Sección titulada “1. Arquitectura: tablas y cadenas"iptables organiza las reglas en tablas, y cada tabla contiene cadenas:
| Tabla | Propósito | Cadenas principales |
|---|---|---|
filter | Filtrado de paquetes (la más usada) | INPUT, FORWARD, OUTPUT |
nat | Traducción de direcciones | PREROUTING, POSTROUTING, OUTPUT |
mangle | Modificación de paquetes | PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING |
El flujo de un paquete entrante:
Paquete llega → PREROUTING → ¿destino local? → INPUT → proceso local ↘ ¿reenvío? → FORWARD → POSTROUTING → red2. Ver las reglas actuales
Sección titulada “2. Ver las reglas actuales"# Listar reglas de la tabla filter (por defecto)sudo iptables -L
# Listado detallado con contadores y sin resolución de nombres (más útil)sudo iptables -L -n -v
# Listar con números de línea (para insertar/borrar en posición concreta)sudo iptables -L -n -v --line-numbers
# Listar la tabla NATsudo iptables -t nat -L -n -v3. Políticas por defecto
Sección titulada “3. Políticas por defecto"La política por defecto determina qué pasa con los paquetes que no coinciden con ninguna regla:
# Ver políticas actualessudo iptables -L | grep "Chain "# Chain INPUT (policy ACCEPT)# Chain FORWARD (policy ACCEPT)# Chain OUTPUT (policy ACCEPT)
# Cambiar política de INPUT a DROP (bloquea todo por defecto)# ¡PELIGRO: hazlo DESPUÉS de añadir reglas para no bloquearte!sudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT ACCEPT4. Añadir y eliminar reglas
Sección titulada “4. Añadir y eliminar reglas"Añadir reglas
Sección titulada “Añadir reglas"# -A = Append (añade al final de la cadena)# -I = Insert (inserta en la posición indicada, por defecto al inicio)
# Permitir conexiones establecidas y relacionadas (fundamental)sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Permitir loopbacksudo iptables -A INPUT -i lo -j ACCEPT
# Permitir SSHsudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Permitir HTTP y HTTPSsudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Permitir desde una IP concretasudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# Permitir desde una subredsudo iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
# Denegar explícitamente (con respuesta al origen)sudo iptables -A INPUT -j REJECT
# Descartar silenciosamente (sin respuesta)sudo iptables -A INPUT -j DROPEliminar reglas
Sección titulada “Eliminar reglas"# Eliminar una regla concreta (misma sintaxis que al añadir, pero con -D)sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
# Eliminar por número de línea (obtener con --line-numbers)sudo iptables -D INPUT 3
# Vaciar todas las reglas de una cadenasudo iptables -F INPUT
# Vaciar todas las reglas de todas las cadenassudo iptables -F5. Reglas avanzadas: logging y rate limiting
Sección titulada “5. Reglas avanzadas: logging y rate limiting"# Registrar intentos de conexión rechazados (antes del DROP)sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: " --log-level 4sudo iptables -A INPUT -j DROP
# Limitar intentos SSH (anti fuerza bruta: máx 3 conexiones nuevas por minuto)sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \ -m limit --limit 3/min --limit-burst 3 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 22 -j DROP
# Bloquear una IP concretasudo iptables -I INPUT 1 -s 203.0.113.5 -j DROP6. Persistir las reglas entre reinicios
Sección titulada “6. Persistir las reglas entre reinicios"Las reglas de iptables se pierden al reiniciar. Para persistirlas:
# Instalar herramienta de persistenciasudo apt install iptables-persistent
# Guardar reglas actualessudo netfilter-persistent save# Se guardan en:# /etc/iptables/rules.v4 (IPv4)# /etc/iptables/rules.v6 (IPv6)
# Restaurar manualmentesudo netfilter-persistent reload
# Ver las reglas guardadascat /etc/iptables/rules.v47. nftables — El sucesor moderno
Sección titulada “7. nftables — El sucesor moderno"nftables reemplaza a iptables en sistemas modernos (Debian 10+). Es más eficiente, tiene sintaxis más clara y combina las funciones de iptables, ip6tables, arptables y ebtables en una sola herramienta.
# Ver el estado actual de nftablessudo nft list ruleset
# Estructura básica de nftables# tabla → familia (ip, ip6, inet) + nombre# cadena → tipo (filter/nat) + hook (input/output/forward) + prioridad
# Crear una tabla y cadenas básicassudo nft add table inet mi_firewallsudo nft add chain inet mi_firewall input \ { type filter hook input priority 0 \; policy drop \; }sudo nft add chain inet mi_firewall output \ { type filter hook output priority 0 \; policy accept \; }
# Añadir reglassudo nft add rule inet mi_firewall input iif lo acceptsudo nft add rule inet mi_firewall input ct state established,related acceptsudo nft add rule inet mi_firewall input tcp dport 22 acceptsudo nft add rule inet mi_firewall input tcp dport { 80, 443 } accept
# Ver el resultadosudo nft list rulesetPersistir nftables:
# Guardar la configuración activasudo nft list ruleset > /etc/nftables.conf
# Habilitar el servicio para que cargue al arrancarsudo systemctl enable nftablessudo systemctl start nftables8. UFW vs iptables vs nftables — Cuándo usar cada uno
Sección titulada “8. UFW vs iptables vs nftables — Cuándo usar cada uno"| Herramienta | Cuándo usarla |
|---|---|
| UFW | Servidor estándar, reglas simples, gestión rápida |
| iptables | Compatibilidad con scripts antiguos, entornos legacy, examen LFCS |
| nftables | Sistemas nuevos, alta carga de paquetes, reglas complejas |