viernes, 10 de mayo de 2013

Ejercicios de Iptables 4.d

d.- Explorar las extensiones de "marcado" como –mark.

Al igual que en el caso anterior modificábamos los bits de TOS  ahora podemos emplear números enteros positivos (hasta el 4.294.967.296) para clasificar y diferenciar a unos paquetes de otros en función de dicho valor.
El modo de empleo es para la comparación:
-t mark --mark {número} -j OBJETIVO
pero también podemos modificar las marcas para asignarle un valor determinado:
-j MARK --set-mark {número}
Las marcas se suelen emplear en combinación con iproute2 o colas para definir las rutas por dónde ha de ir determinado tráfico o incluso para realizar balanceos de carga entre varios interfaces de red.
Por ejemplo vamos a hacer que todo el tráfico que llegue por la interfaz eth1 y el generado por el propio equipo destinados a los puertos 80 (tráfico http) los marque con el número "1".
iptables -t mangle -A PREROUTING -i eth1  -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
Ahora de las tres conexiones que tengo eth0, eth1 y eth2 en realidad podría salir a Internet por eth0 (estoy haciendo nat en la tarjeta) o por eth2 (la interfaz en modo puente que es la que está configurada por defecto para salir). Lo que voy a hacer es crear y configurar una tabla para que todos los paquetes marcados con un "1" - el tráfico web- emplee esta tabla y salga por la interfaz eth0 mientras el resto sigue saliendo por eth2 (podríamos desear hacer esto en caso de querer hacer que un determinado tráfico salga siempre por un determinado interfaz, o que los costes de ambas líneas sean distintas, o en procesos de balanceos).
Para controlar por qué interfaz sale el tráfico inserto reglas para que se registre el tráfico saliente por cada una de las interfaces destinado al puerto 80:
iptables -A OUTPUT -i eth0 -p tcp --dport 80 -j LOG
iptables -A OUTPUT -i eth1 -p tcp --dport 80 -j LOG
iptables -A OUTPUT -i eth2 -p tcp --dport 80 -j LOG
como podemos ver en la siguiente imagen, por defecto el tráfico sigue saliendo por eth2
Dado que hemos marcado los paquetes con "1" vamos a trabajar con ello.
En primer lugar y por cuestiones de legibilidad creamos una tabla de enrutamiento y le asignamos el número 201 y nombre web.salida:
echo 201 web.salida >> /etc/iproute2/rt_tables
añadimos una regla para que todo el tráfico marcado a uno emplee esta tabla
ip rule add fwmark 1 table web.salida
nos aseguramos de que la regla ha sido añadida correctamente
ip rule ls


 
finalmente generamos la tabla web.salida enlazándola a la interfaz eth0 cuya puerta de enlace es la 10.0.2.2
ip route add default via 10.0.2.2 dev eth0 table web.salida

tras hacerlo podemos ver cómo la iptables marca los paquetes salientes y cómo el tráfico http comienza a pasar por la interfaz eth0 en lugar de por eth2:
iptables -L OUTPUT -vn
en la última imagen podemos ver cómo ha dejado de enviar tráfico por eth2 y comienza a hacerlo por eth0.
 << Anterior                                                                                                                Siguiente >>

No hay comentarios: