iptables port-mirroring


8

Necesito poder obtener una copia de los paquetes recibidos en el puerto 8001 al puerto 8002. He intentado lo siguiente, pero aparece un error que --tee no está definido.

sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee


Respuestas:


6

La --teebandera no es parte de la cadena DNAT, es parte de ROUTE. Solo puede usarlo después de una declaración de -j ROUTE. Puede obtener ayuda específica de iptables sobre el tema de esta manera:

 $ iptables -j ROUTE help

Estaba mirando su comando iptables, y no tiene ningún sentido para mí. ¿Por qué está tratando de hacer coincidir el origen y el puerto de origen de un paquete cuando en su pregunta dijo "paquetes recibidos en el puerto"? ¿Está tratando de dividir el tráfico entrante para alcanzar dos puertos o tomar la salida de un puerto y vincularlo a la entrada de otro?

Si es lo primero, realmente hay dos pasos. No puede usar tee para obtener una copia del paquete Y manipular el paquete para cambiar los números de puerto al mismo tiempo. Puede intentar esto en dos pasos, primero enviándose una copia duplicada del paquete, luego haciendo coincidir solo la copia y destrozando el puerto de destino. ADVERTENCIA: no probado, considere este pseudocódigo:

$ sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

1
Advertencia ... ¡otro visitante del sitio ha notado que una versión similar de esto realmente resulta en un bucle infinito! Probablemente necesite descubrir cómo etiquetar el paquete duplicado en la misma acción, luego hacer coincidir la etiqueta.
Caleb

La RUTA parece obsoleta, ¿verdad?
margarita

Es solo un error tipográfico, 172.0.0.1 -> 127.0.0.1.
Aki

1
NB a los lectores de SE: El ROUTEobjetivo utilizado en la respuesta anterior es obsoleto a partir de este escrito y no está disponible en iptables en las distribuciones más recientes. Ver serverfault.com/questions/333155/…
Jonathan Ben-Avraham

6

Además de la respuesta de Caleb , si está trabajando con una iptablesversión más reciente (v1.4.14) que ya no tiene el ROUTEobjetivo, necesitará algo como lo siguiente, probado en Debian Wheezy *:

iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

Prueba con "netcat" ( man nc). En una ventana de terminal, escriba lo siguiente y presione la Entertecla:

nc -l 8002

El comando esperará la entrada que escribirá en una segunda ventana de terminal.

En la segunda ventana de terminal, escriba lo siguiente y presione la Entertecla:

nc 127.0.0.1 8001

El comando esperará más información. Escriba cualquier cosa y presione la Entertecla. Después de presionar la Entertecla en la segunda ventana de terminal, el texto que escribió en la segunda ventana de terminal debe aparecer en la primera ventana de terminal. Presione Ctrl-c en la segunda ventana para finalizar la sesión.


* Esta sintaxis no es compatible con RHEL / Centos (6.5 o anterior) :-(, por lo que debe utilizarla socatpara enviar y enviar paquetes entrantes en el puerto original a dos puertos nuevos. Si tuvo procesos de escucha en el puerto de recepción original, entonces necesita reconfigurarlos para que escuchen en uno de los puertos en T, ya socatque ahora es el oyente en el puerto original. Vea esta publicación SE, por ejemplo, la socatsintaxis para la clonación de puertos.


Por alguna razón en debian, debe especificar el puerto explícitamente con netcatnc -l -p 8002
Marcelo Lacerda

He estado tratando de replicar esta solución en mi Mint 19 Tessa en vano. Descubrí que algunos paquetes simplemente rebotan dentro y solo uno de los dos puertos recibe el paquete. Si cometo el error de agregar el registro para tratar de solucionar una regla, los registros (kernel, syslog, journal) rápidamente se comen mi almacenamiento.
hanzo2001

Tampoco entiendo por qué el DNAT está configurado en la cadena de SALIDA. ¿No está el paquete dejando mi proceso al mundo exterior? ¿O las direcciones de bucle invertido se comportan de manera diferente?
hanzo2001
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.