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
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:
No hay comentarios:
Publicar un comentario