[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