Porta de espelho via iptables

11

Eu tenho um servidor raiz Linux (Debian 7.5) dedicado, com vários convidados configurados. Os convidados são instâncias KVM e obtêm acesso à rede via utilitários de ponte (NAT, IPs internos, usam o host como um gateway).

Por exemplo, um KVM é meu convidado do servidor da Web e fica acessível via IP do host da seguinte maneira:

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

Eu faço o mesmo com outros serviços, mantendo-os independentes, com NAT e isolados.

Mas um convidado deve ser um monitor de rede e deve executar a inspeção do tráfego de rede (como um IDS). Normalmente, em uma instalação não virtual, eu usaria portas VACLs ou SPAN para espelhar o tráfego. Obviamente, dentro deste host, não posso fazer isso ( facilmente , porque não quero usar abordagens de comutação virtual complexas).

  1. Posso obter um espelho de porta usando o iptables e redirecionar todo o tráfego de entrada e saída para um convidado KVM? Todos os hóspedes têm uma interface dedicada, como vnet1.
  2. É possível encaminhar seletivamente o tráfego, com base no protocolo (como uma regra de encaminhamento de VACL, que captura apenas HTTP)?
  3. os convidados precisam de uma configuração de interface específica, quando eu preciso manter vnet1como uma interface de gerenciamento (com um IP)?

Eu ficaria feliz por um ponto na direção certa:

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

Muito obrigado :)

wishi
fonte

Respostas:

14

e quanto a anexar as regras da tabela Mangle do módulo de pré-roteamento do servidor raiz por algo como:

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

e, em seguida, anexando as regras da tabela Mangle do módulo pós-roteamento por algo como

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

onde 192.168.200.1 é o monitor de rede.

Essas regras espelharão todo o tráfego de entrada e saída encaminhando-o para 192.168.200.1

editar:

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

mas você também pode usar algo como

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

e

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

onde TEEagora é um alvo que PREROUTINGrequer mais opções, como -i, por exemplo -p, etc.

Pat
fonte
Leitores de NB para SE que usam versões mais recentes iptablesque não têm mais o ROUTEdestino, veja minha resposta em unix.stackexchange.com/a/174619/31228 .
Jonathan Ben-Avraham