← Blog

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.