Sintaxis de iptables e ip6tables

  • Posted on: 27 March 2020
  • By: ReYDeS

Los comandos “iptables” e “ip6tables”, son utilizando para manipular tablas, cadenas y reglas. Su opción “-t tabl” indica sobre cual tabla operar (por defecto “filter”).

Comandos

Las principales opciones para interactuar con las cadenas son las siguientes:

    -L cadena: Lista las reglas en la cadena Esto es comúnmente utilizado con la opción “-n” para deshabilitar la resolución de nombres (por ejemplo, iptable -N -L INPUT mostrará las reglas relacionadas con los paquetes entrantes).

    -N cadena: Crea una nueva cadena. Se pueden crear nuevas cadenas para diversos propósitos, incluyendo probar un nuevo servicio de red, o defenderse de un ataque de red.

    -X cadena: Borra una cadena vacía o no utilizada (por ejemplo, iptables -X ddos-attack).

    -A cadena regla: Añade una regla al final de la cadena definida. Recordar las reglas son procesadas desde la parte superior hacia la inferior, por lo tanto tener esto en consideración cuando se añadan reglas.

    -l cadena rule_num regla: Inserta un regla antes del número de regla rule_num. Como con la opción -A, tener en consideración el orden de procesamiento cuando se inserten nuevas reglas en la cadena.

    -D cadena rule_num (o -D cadena regla): Borra una regla en una cadena; la primera sintaxis identifica la regla a ser borrada por su número (iptables -L --line-numbers mostrará estos números), mientras lo posterior lo identifica por su contenido.

    -F cadena: Drena una cadena (borra todas sus reglas). Por ejemplo, para borrar todas las reglas relacionadas con paquetes salientes, se ejecuta iptables -F OUTPUT. Si no se define la cadena, todas las reglas en la tabla serán borradas.

    -P cadena acción: Define la acción por defecto o “política” para una cadena definida; notar únicamente cadenas estándar pueden tener una política de este tipo. Para descartar todo el tráfico entrante por defecto, se debe ejecutar iptables -P INPUT DROP.

Reglas

Cada regla es expresada como “condiciones -j acción opciones_accion”. Si muchas condiciones son descritas en la misma regla, entonces el criterio es la conjunción ((AND) Y lógico ) de las condiciones, lo cual es al menos tan restrictivo como cada condición individual.

La condición “-p protocolo” coincide el campo del protocolo del paquete IP. Los valores más comunes son tcp, udp, icmp, e icmp6. Esta condición puede ser complementada con condiciones sobre los puertos TCP, con clausulas como “--source-port puerto” y “--destination-port puerto”.

Las condiciones “-s dirección” o “-s red/mascara” coinciden con la dirección fuente de paquete. Correspondientemente “-d dirección” o “-d red/mascara” coincide con la dirección destino.

La condición “-i interfaz” selecciona paquetes viniendo desde una interfaz de red definida, “-o interfaz” selecciona paquetes saliendo sobre una interfaz específica.

La condición “--state estado” coincide el estado de un paquete en un conexión (esto requiere el módulo del kernel “ipt_conntrack”, para rastreo de conexiones). El estado NEW describe un paquete iniciando una nueva conexión, ESTABLISHED coincide paquetes correspondientes hacia una conexión ya existente, y RELATED coincide paquetes iniciando una nueva conexión relacionada hacia una existente (lo cual es útil para la conexión ftp-data en el modo “activo” del protocolo FTP).

Existen muchas opciones disponibles para iptables e ip6tables, dominarlos todos requiere una gran cantidad de estudio y experiencia. Sin embargo, una de las opciones a utilizar más frecuentemente es una para bloquear tráfico malicioso de red desde un host o rango de hosts. Por ejemplo tráfico entrando desde la dirección IP10.10.1.5 y el la subred de clase C 31.13.74.0/24.

# iptables -A INPUT -s 10.0.1.5 -j DROP
# iptables -A INPUT -s 31.13.74.0/24 -j DROP
# iptables -n -L INPUT

Otro comando iptables comúnmente utilizado es para permitir tráfico de red para un servicio específico o puerto. Para permitir los usuarios conectarse hacia SSH, HTTP , e IMAP, se debe ejecutar los siguientes comandos:

# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT
# iptables -n -L INPUT

Se considera una buena higiene de computadora limpiar todas las reglas antiguas e innecesarias. La manera más fácil de borrar reglas iptables es referenciar las reglas es por el número de línea lo cual puede ser obtenido con la opción “--line-numbers”. Sin embargo tener cuidado, descartar una regla enumerará nuevamente toda las reglas en la parte inferior de la cadena.

# iptables -n -L INPUT –line-numbers
# iptables -D INPUT 2
# iptables -D INPUT 1
# iptables -n -L INPUT --line-numbers

Existen condiciones más específicas, dependientes de las condiciones genéricas descritas anteriormente. Para mayor información consultar iptables(8) e ip6tables(8).

Fuentes:

https://kali.training/downloads/Kali-Linux-Revealed-1st-edition.pdf
https://linux.die.net/man/8/iptables
https://linux.die.net/man/8/ip6tables

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1