marca mangle en tcpdump

Aldrin Martoq amartoq en dcc.uchile.cl
Jue Abr 17 13:59:37 CLT 2008


On Thu, Apr 17, 2008 at 1:09 PM, Miguel Oyarzo O. <admin en aim.cl> wrote:
> At 07:07 17/04/2008, Aldrin Martoq wrote:
> > On Thu, Apr 17, 2008 at 12:06 AM, Miguel Oyarzo O. <admin en aim.cl> wrote:
> > >  No puedo encontrar documentacion que me diga qué octeto o posicion
> > >  de la cabecera tcp afecta mangle.
> > >  Intento hacer tcpdump -n -i iface tcp[octeto] == marca
> > >  para ver en tiempo real por que interfaz
> > >  se intentan ir unos paquetes con ciertas marcas que puse
> > >  si hay algun parametro especifico mejor (en iptables 1.4/debian) no lo
> > > puedo encontrar
>  No... me referia a un comando en tcpdump mas arriba... lamentablemente
> escribi /iptables 1.4/debian/
>  (quizas eso confundio a varios q saben la respuesta)
> > Si es asi, depende de que hace tu regla. Puedes mostrarla?
>  Mira, es algo similar a lo que muetras arriba, pero con
>  -j MARK --set-mark X
>  Presisamente esa marca intento encontrar la cabecera tcp
[...]
>  Mi primer intento fue localizar dicha marca en alguno de los octetos
>  de la cabecera TCP, pero no estoy seguro si encontrare esa marca
>  alli y/o no se cual octeto y posicion tiene.
>   tcpdump -n -i iface tcp[octeto] == marca   ????    (eso es lo que busco)
>  Conoces exactamente que parte de la cabecera afectaría
>  iptables -t mangle -A PREROUTING  -s 10.0.15.0/24 -j MARK --set-mark 5  ?
>  antes que se tome la desicion de Routing?

Ok. Como trate de explicar, hay algunas marcas que no son almacenadas
en el paquete de red, sino que cambian estados internos del kernel. En
particular, el target -J MARK hace eso: cambiar un campo en el struct
skbuff [/lib/modules/$(uname -r)/build/include/linux/skbuff.h]. El
skbuff es la estructura interna en la que se encapsula un paquete de
red mientras "viaja" dentro de linux, una vez que sale a la tarjeta de
red, esos campos se pierden y por eso no vez la marca en ninguna parte
con tcpdump. Monisticamente:

  Net    -->    Kernel    -->   Net
+Packet+     +--skbuff--+     +Packet+
|*IP   |     |*conntrack|     |*IP   |
|*port |     |*mark     |     |*port |
|*proto| (1) |etc...    | (2) |*proto|
|data..|     | +Packet+ |     |data..|
+------+     | |*IP   | |     +------+
             | |*port | |
             | |*proto| |
             | |data..| |
             | +------+ |
             +----------+


Ahora, libpcap no lee exactamente el paquete desde la red sino que se
lo pide al kernel. Estuve viendo el man de pcap(3) y el contenido de
skbuff no lo veo, por lo que creo que no lo puedes obtener sin alguna
"ayuda" extra. Me puedo equivocar en esto, asi que revisa el codigo de
ambas bestias y ahi tendrias una solucion. Otra solucion es que lo
modifiques tu mismo, he cambiado partes de netfilter/iptables para
cosas como esta pero siempre como juego ;)

[...]

> > BTW, que estas haciendo ???
>  Busco ver en tiempo real  la marca asignada a cada paquete que atraviesa
>  el Router . SI lo logro podre depurar mas rapidamente varias cosas hechas
> aqui


Hmm.... Lo unico que se me ocurre es que hagas logging del paquete en
base a la marca, con -j LOG o -j ULOG en iptables .... bastante pobre
lo que ofrezco.


-- 
Aldrin Martoq
Episodio 002 (Lunes 24 Marzo)!
http://aldrinvideopodcast.podshow.com/



Más información sobre la lista de distribución Linux