Puerto espejo a través de iptables

11

Tengo un servidor raíz de Linux (Debian 7.5) dedicado, con una serie de invitados configurados. Los invitados son instancias KVM y obtienen acceso a la red a través de bridge-utils (NAT, IP internas, usan el host como puerta de enlace).

Por ejemplo, un KVM es mi invitado WebServer, y se puede acceder a través de la IP del host de esta manera:

    iptables -t nat -I PREROUTING -p tcp -d 148.251.Y.Z 
--dport 80 -j DNAT --to-destination  192.168.100.X:80 

Hago lo mismo con otros servicios, manteniéndolos independientes, con NAT y aislados.

Pero se supone que un invitado es un monitor de red y debe realizar una inspección del tráfico de la red (como un IDS). Por lo general, en una configuración no virtual, usaría VACL o puertos SPAN para reflejar el tráfico. Por supuesto, dentro de este host, no puedo hacer esto ( fácilmente , porque no quiero usar enfoques complejos de conmutación virtual).

  1. ¿Puedo obtener un espejo de puerto usando iptables y redirigir todo el tráfico de entrada y salida a un invitado KVM? Todos los invitados tienen una interfaz dedicada, como vnet1.
  2. ¿Es posible reenviar selectivamente el tráfico, basado en el protocolo (como una regla de reenvío VACL, que solo toma HTTP)?
  3. ¿Los invitados necesitan una configuración de interfaz específica, cuando necesito mantenerla vnet1como interfaz de administración (con una IP)?

Sería feliz por un punto en la dirección correcta:

iptables         1.4.14-3.1
linux            3.2.55
bridge-utils     1.5-6

Muchas gracias :)

wishi
fuente

Respuestas:

14

¿Qué hay de anteponer el módulo de pre-enrutamiento del servidor raíz Mangle reglas de la tabla por algo como:

iptables -I PREROUTING -t mangle -j ROUTE --gw 192.168.200.1 --tee

y luego anteponer las reglas de la tabla Mangle del módulo posterior al enrutamiento por algo como

iptables -I POSTROUTING -t mangle -j ROUTE --gw 192.168.200.1 --tee 

donde 192.168.200.1 es el monitor de red.

Estas reglas reflejarán todo el tráfico entrante y saliente que lo reenviará a 192.168.200.1

editar:

mangle table specific
  -j ROUTE            (explicitly route packets, valid at PREROUTING)
      options:
      --iface <iface_name>
      --ifindex <iface_idx> 

pero también podrías usar usar algo como

iptables -I PREROUTING –t mangle –i eth0 –j TEE –gateway 192.168.200.1

y

iptables -I POSTROUTING –t mangle –j TEE –gateway 192.168.200.1

donde TEEahora es un objetivo que PREROUTINGtoma más opciones como -i, por ejemplo -p, etc.

Palmadita
fuente
Los lectores de NB a SE que usen versiones más nuevas iptablesque ya no tengan el ROUTEobjetivo ver mi respuesta en unix.stackexchange.com/a/174619/31228 .
Jonathan Ben-Avraham