Inicio Iptables para novatos
Entrada
Cancelar

Iptables para novatos

iptables para novatos

Lo primero: ¿Qué es iptables?

iptables es un programa CLI (Command Line Interface / Por interfaz de comandos) que hace de interfaz al programa netfilter, estos programas se encargan de configurar el cortafuegos del núcleo de sistemas GNU/Linux mediante reglas.

  • Existen frontends gráficos para interactuar con iptables.
  • iptables se usa para IPv4 y ip6tables para IPv6.
  • Podemos anidar tantas cadenas como queramos.
  • Una regla puede ser simplemente un puntero a la cadena.

Seguramente ahora mismo estarás pensando: ¿Para qué me voy a complicar la vida si tengo firewalld o ufw? Y entiendo tu inquietud, hay casos en los que realmente no prima usar iptables en sobre otro cortafuegos pero iptables es mucho más configurable que cualquiera de ellos, haciéndolo mucho más versátil y flexible a tus necesidades.

Arquitectura de iptables:

iptables usa tablas para organizar sus reglas. Estas tablas clasifican reglas en base al tipo de decisiones que se van a tomar. Como ejemplo, si una regla filtra un tipo de paquetes en específico se pondrá en la tabla filter. En cada tabla las reglas se organizan en distintas cadenas. Las cadenas permiten al administrador controlar donde en la entrega de un paquete se evaluará una regla.

Cadenas

Hay 5 cadenas en iptables y cada una se encarga de una tarea en específico. Son responsables de los paquetes desde que llegan hasta que o se reenvían, descartan o procesan. Estas cadenas son: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.

Tablas

Cada tabla se encarga de una cosa distinta. Hay otras 5 tablas: filter, nat, mangle, raw y security. Las dos primeras son las que más se usan.

  • filter es la más usada, se encarga de decidr si un paquete debe continuar su camino o perecer en el intento.
  • nat se usa para redireccionar paquetes de una máquina a otra (en resumen que podemos usar una máquina como router).
  • mangle puede ser usado para alterar la cabecera de un paquete IP de distintas maneras, se puede usar para cosas como por ejemplo ajustar el TTL (Time To Live) de un paquete. Otro tipo de cabeceras se pueden modificar de la misma manera.
  • raw se usa para configurar excepciones del seguimiento de conexiones.
  • security se usa para gestionar reglas especiales.

Cada tabla puede hacer uso de distintas cadenas:

TablasPREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
filter
nat
mangle
raw
security

El usuario puede crear sus propias cadenas dentro de cada tabla para organizar reglas. Las reglas se ejecutan de manera secuencial y tienen una jerarquía, la última es la que prevalece sobre la anterior, por lo que si en una deniego el acceso a por ejemplo un protocolo en específico y en la siguiente lo habilito será posible hacer uso de ese protocolo.

Parámetros comunes de iptables:

  • iptables -A: Append, añadir una regla.
  • iptables -D: Borrar una regla.
  • iptables -F: Eliminta todas las reglas.
  • iptables -P: Modifica las políticas de una cadena.
  • iptables -L: Lista todas las reglas.
  • iptables -N: Crea una cadena de un usuario.
  • iptables -R: Reemplaza una regla.
  • iptables -X: Elimina una cadena definida por un usuario.
  • iptables -t <table>: Selecciona la tabla que se va a manipular.

Ejercicio: Elimina las reglas en la tabla NAT:

Solución: iptables -t nat -F


Para ver una lista de todos los argumentos que se pueden usar en iptables recomiendo leer el sagrado man iptables para buscar en profundidad algún parámetro que te haga falta o iptables --help para una lista de los parámetros comunes del programa.

Reglas

  • -i: Interfaz de red por donde entrará el paquete. Solo se puede usar para INPUT, FORWARD y PREROUTING.
  • -o: Iterfaz de red por donde saldrá el paquete.
  • -s 0.0.0.0/0: Permite comparar los paquetes entrantes que vienen de una dirección. (En este caso cualquiera).
  • -d: Compara los paquetes salientes que llegan de la dirección de origen, la IP se puede sustituir por un hostname tanto en -s como en -d (Porque al fin y al cabo te lo va a resolver el DNS).
  • -p: Tipo de protocolo a usar que será comparado con la regla.
  • -sport: Puerto de origen. Se puede especificar un rango usando ‘:’ ejemplo: 1090:65535
  • -dport: Puerto de destino.
  • -m: Se aplica la regla si se cumple una condición específica.
  • -j: Destino de la regla:
DestinoInformación
ACCEPTAcepta la conexión
DROPDeniega el acceso
QUEUEEnvía el paquete a las reglas del usuario
REJECTRechaza la conexión y envía el paquete a su origen
  • LOG: Todos los paquetes que coincidan por esta regla se guardan en un log.
  • SNAT: Un estado virtual donde difiere si la dirección fuente original difiere del envío destinado.
  • DNAT: Un estado virtual donde coincide si el destino difiere del lugar donde son reenviados.

Políticas

En este apartado veremos algunos ejemplos sobre como aplicar políticas en iptables.

  • Denegar el tráfico entrante: iptables -P INPUT DROP
  • Denegar el tráfico saliente: iptables -P OUTPUT DROP
  • Denegar el reenvío de paquetes: iptables -P FORWARD DROP

Eso sería todo, muchas gracias por leer, Happy Hacking!

Si encuentras algún error o errata házmelo saber.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.
Contenido