Iptables — Contabilidad de Paquetes y Bloqueo de Puertos
Configuración de iptables: contadores de paquetes, reglas ACCEPT/DROP por IP y puerto, exclusión de loopback y reseteo limpio de todas las cadenas.
1. Operational Scope & Technical Objective
iptables es el framework netfilter de Linux: filtra, cuenta y modifica paquetes en las cadenas INPUT/OUTPUT/FORWARD y las tablas nat/mangle/raw. En operaciones sirve para dos fines opuestos: contabilidad de tráfico (contar qué paquetes pasan, -vn -L con contadores) y corte selectivo (denegar un puerto salvo para ciertos orígenes). El orden de las reglas importa: la primera coincidencia manda, por eso las excepciones se insertan con -I en la cabecera de la cadena antes de la política por defecto.
2. High-Impact Syntax & Command Cheatsheet
# Contabilidad: resetea contadores y reglas, luego mide
iptables -Z && iptables -F # -Z resetea contadores; -F vacía las reglas
iptables -I INPUT 1 -s IP -j ACCEPT # -I <cadena> <posición>: inserta en la posición 1
iptables -I OUTPUT 1 -d IP -j ACCEPT # acepta tráfico saliente hacia esa IP
iptables -vn -L # lista reglas con contadores (packets/bytes)
# Denegar tráfico a un puerto salvo desde IPs concretas
iptables -A INPUT -p tcp --destination-port 13327 ! -d $ip -j DROP
iptables -A INPUT -p tcp --destination-port 9991 ! -d $ip -j DROP
# ! -d $ip -> la regla aplica a destinos distintos de $ip
# efecto: el puerto solo responde a $ip; el resto recibe DROP (sin respuesta TCP)
# Reseteo completo y limpio del firewall (recuperar acceso si algo se cierra)
iptables -P INPUT ACCEPT # políticas por defecto a ACCEPT primero
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F # -t <tabla>: operar sobre nat/mangle/raw
iptables -t mangle -F
iptables -F # vacía cadenas de la tabla filter
iptables -X # elimina cadenas definidas por el usuario
iptables -t raw -F iptables -t raw -X
3. Real-World Offensive/Defensive Scenarios
Blindaje de un puerto de escucha (pivoting). Tras montar un listener de reverse shell o un túnel en un puerto alto (13327/9991), la regla ! -d $ip -j DROP restringe las conexiones solo al equipo de control: si el puerto se detecta en un escaneo externo, no responderá para nadie más. Como el DROP no genera RST, el puerto "no existe" para el resto del mundo — el clásico firewall de un C2 discreto.
Recuperación tras un bloqueo accidental. El bloque secuencial -P ... ACCEPT + -F + -X sobre todas las tablas restaura el estado por defecto: la secuencia imprescindible cuando una regla mal escrita corta tu propio acceso SSH (ejecutar primero las políticas ACCEPT evita quedarse fuera a mitad del reset).
Defensa y hardening. Usa -vn -L con contadores para detectar tráfico inesperado a puertos de gestión, y reglas de cierre por defecto (-P INPUT DROP) con excepciones explícitas. La regla con ! es también la base de los port-knocking/single-packet-auth: solo el origen autorizado recibe servicio en el puerto abierto, y todo lo demás se descarta silenciosamente.