[HACK] Duplicar/Multiplicar paquetes con Iptables

Roman Medina-Heigl Hernandez roman at rs-labs.com
Fri Feb 25 08:59:30 CET 2005


Hola,

Lo primero agradecer a todos vuestras respuestas aunque he de decir que 
más o menos esas ideas ya las había pensado (no es por bajar la moral, 
¿eh? xD). El caso es que me pareció ver en Internet hace tiempo alguien 
que lo hacía de forma "simple" (=sin programar) pero ahora que me he 
puesto a buscarlo no hay manera, y de hecho tampoco estoy seguro de que 
no fuera una alucinación mía. Lo mismo no era sólo con iptables, sino 
que también usaba iproute2 y tal, aunque tb me he repasado el manual y 
no veo como "generar" copias de paquetes, que es la parte más chunga.

Sobre las soluciones que se han comentado, las que implican tocar 
kernel+compilador son las más elegantes y quizás las más o menos obvias 
(de palabra, claro), pero no de implementar. Me parece que hay un howto 
para desarrollar módulos de iptables pero vamos, que no tengo tiempo, 
necesito algo más sencillo y rápido; aparte me temo que Netfilter pueda 
presuponer en algún punto que el paquete entra y sale (como es normal) 
pero no que se multiplican, y que haya que hacer más cambios que los que 
a priori pueda parecer. Por cierto, que el target "mirror" (su código) 
tb lo había mirado ya (muy por encima), pero me remito a mitad del 
párrafo... aparte me extrañó que venga en el kernel 2.4 y no aparezca en 
el 2.6... no me fio mucho :-)

Estoy pensando en algo más de la linea que se comenta aquí, estilo 
pillar el tráfico y generarlo con tcpreplay o similar. De hecho estoy 
probando una idea que se me ocurrió ayer, que podría funcionar, basada 
en tcpdump + "named pipe" + tcpreplay. Por ahora consigo regenerar los 
paquetes en tiempo real con el cotarro anterior, pero estoy mirando un 
pequeño "detalle": los paquetes inyectados con tcpreplay no parecen 
atravesar las cadenas de iptables (puse un LOG en todas las cadenas 
posibles y nada, que parece que no pasa por ahi), y lo necesito pq la 
cosa es un poquito más complicada de lo que conté (no quería asustar 
xD): los traps duplicados/triplicados/etc se envian a diferentes IPs 
según de donde provengan, así que en algún punto debe haber una lógica 
que discrimine. Yo con que los paquetes que tcpreplay inyecta pasen 
alguna cadena de iptables (PREROUTING u OUTPUT, que es donde puedo 
aplicar DNAT) me es suficiente. Yo pensaba que al ser paquetes generados 
por un proceso local (tcpreplay) deberían atravesar el OUTPUT, pero no 
parece ser así... cuando tenga otro ratillo seguiré investigando :-). De 
todas formas, si se os ocurre algo sobre esto último, y os animais a 
compartirlo...

Saludos,
-Román

zgor wrote:
> La verdad es que nunca he tenido que montar nada asi pero se me ocurre 
> una historieta un poco bricolaje:
> utilizar el target ulog para loguear los paquetes que te interesan y en 
> ulogd utilizar el modulo pcap para que lo guarde en formato libpcap
> Y por otra parte tener un scriptillo que cada segundo (si es aceptable 
> ese tiempo) procese el ultimo registro del log y construya/envie los 
> paquetes clonados (no se si con sendip o similar valdria)
> Sino, habia pensado tambien en que quizas no sea muy dificil modificar 
> el target mirror de netfilter que hace algo parecido a lo que quieres 
> pero solo intercambiando origen y destino, podria funcionar cambiando el 
> destino y repitiendo el proceso varias veces, lo unico que los paqeutes 
> enviados por mirror luego no son vistos por netfilter (aunque en 
> principio no te haria falta)



More information about the hacking mailing list