Administración avanzada de red en Linux. Filtrado de tráfico con Iptables

El Kernel de Linux, a través de Netfilter y las heramientas iptables, es capaz de implementar potentes firewalls hasta nivel 4 de red.

La configuración de un firewall a través de la herramienta iptables puede hacerse de 2 maneras diferentes:

  • Mediante un script de comandos iptables.
  • Mediante la carga y volcado de reglas iptables en memoria a través de los comandos iptables-save e iptables-restore.

Tablas iptables

Iptables no sólo se utiliza para filtrar tráfico (FILTER), sino que también sirve para modificar cabeceras ip de estos paquetes (NAT) y para marcar paquetes (MANGLE). Cada una de estas características se utiliza añadiendo las reglas correspondientes a la table filter, nat o mangle.

Cadenas iptables

Cada vez que un paquete “matchea” una regla de cualquiera de las tablas, iptables toma una acción. La cuestión clave del uso de iptables es en qué momento el paquete “matchea” una regla.

para ello existen 5 puntos o cadenas que un paquete va a ir atravesando o enlazando según atraviese el firewall. Estas cadenas por defecto son las siguientes:

  • PREROUTING: Es la primera cadena en la que entra un paquete nada más llegar a la interfaz física. Es muy útil para establecer, por ejemplo, reglas de Nat por destino.
  • INPUT: En esta cadena caerían los paquetes que fuesen dirigidos contra el propio firewall. Aquí se definen las reglas de filtrado que afectarían al tráfico entrante al sistema que define las reglas.
  • FORWARD: Si el tráfico que entra por el firewall no tiene como destino el propio firewall significa que va a ser atravesado. En ese caso los paquetes caerían dentro de la cadena forward. Es la cadena clave para implementar un firewall en la red.
  • OUTPUT: Afecta al tráfico saliente del firewall pero con origen el propio firewall.
  • POSTROUTING: Es la última cadena en la que entraría un paquete antes de abandonar el firewall. Muy útil para marcar paquetes o para hacer nat de origen (masquerading).

Adicionalmente el administrador puede definirse sus propias cadenas a las que redirigir el tráfico que cumpla determinadas condiciones.

 

Reglas de filtrado

A continuación se muestran comentadas algunas reglas de filtrado de tráfico. Importante destacar que el filtrado se aplica con reglas dentro de la tabla de reglas filter:

#iptables -t filter -A INPUT -p tcp -s 192.168.0.0/16 -i eth0 –dport 23 -j DROP

esta regla añade (A) una nueva entrada a la tabla de filtrado (filter) que tira (DROP) todo el tráfico proveniente (s) de la red 192.168.0.0/16 que entre por la interfaz eth0 (i) con destino al puerto 23 (–dport) tcp (-p tcp). Esta regla únicamente afectaría al tráfico con destino el propio firewall (INPUT).

#iptables -t filter -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.10 –dport 80 -j ACCEPT

Esta regla añade una nueva entrada a la tabla de filtrado que permitirá el tráfico tcp que entre por la interfaz eth0 y salga por la eth1 con destino la ip 192.168.1.10 y el puerto tcp 80. Es importante ver que esta regla únicamente afectará al tráfico de red que atraviese al firewall (FORWARD).

 

Reglas de Nat

Las reglas de Nat suelen utilizarse en esquemas de red donde el firewall levanta en su interfaz expuesta a Internet una serie de direcciones ip públicas a las que les aplica filtrado. El tráfico recibido contra dichas ips públicas es redirigido mediante reglas de Nat a servidores internos con direccionamiento privado y aislados en una red DMZ.

Igualmente el firewall puede “enmascarar” con una ip pública el tráfico saliente desde direcciones internas privadas, cambiando su ip de origen mediante reglas SNAT o enmascaramiento de origen. Linux permite esto mediante reglas iptables en la tabla NAT.

#iptables -t NAT -a PREROUTING -p tcp -d 212.11.1.10 –dport 80 -j DNAT –to-destination 192.168.1.3:80

Esta regla añadirá una nueva entrada a la cadena prerouting de la tabla NAT para redirigir el tráfico entrante con destino la ip pública 212.11.1.10 y el puerto tcp/80 hacia una ip privada ubicada en un segmento de red especialmente aislado.

Es importante ver que las reglas de DNAT se aplican antes que las reglas de filtrado (FORWARD). Por lo que a la hora de aplicar reglas de filtrado contra este tráfico “nateado”, hay que hacerlo para los paquetes con la nueva cabecera ip, donde la dirección de destino ya será la nueva, la ip privada.

#iptables -t NAT -a POSTROUTING -p tcp -s 192.168.1.3 –sport 80 -o eth0 -j SNAT –to-source 212.11.1.10

Esta regla enmascara el tráfico saliente procedente de la ip privada 192.168.1.3 con puerto de origen 80/tcp con una ip pública para que pueda obtener respuestas desde Internet.

Reglas de Mangle

Iptables puede utilizarse para manejar el tráfico detectado. En concreto permite marcar paquetes que cumplan determinadas características para ser detectados posteriormente por otras aplicaciones, como priorizadores de tráfico o enrutadores dinámicos.

La siguiente regla utiliza la tabla mangle para marcar un paquete de tráfico smtp destinado a un servidor concreto. Esta marca (1) puede utilizarse posteriormente por TC (traffic control) o por IPROUTE2 para aplicar reglas de priorización o enrutamiento concretas como veremos en apartados posteriores.

#iptables -t mangle -A PREROUTING -i eth0  -p tcp -d 192.168.1.3 –dport 25                      -j MARK –set-mark 1 

Comments are closed.