arp problemas com ponte transparente no linux

1

Estou tentando proteger minhas máquinas virtuais no servidor esx colocando-as atrás de uma ponte transparente com duas interfaces, uma na frente e outra na parte de trás.

Minha intenção é colocar todas as regras de firewall em um único lugar (em vez de em cada servidor virtual).

Eu tenho usado como bridge uma nova máquina virtual em branco baseada no arch linux (mas eu suspeito que não importa qual a marca do linux que seja).

O que eu tenho são 2 comutadores virtuais (portanto, dois Virtual Network, VN_front e VN_back), cada um com 2 tipos de portas (comutadas / separadas ou promíscuas / onde a máquina pode ver todos os pacotes).

Na minha máquina bridge, eu configurei 2 NICs virtuais, uma em VN_front, uma em VN_back, ambas em modo promisc.

Eu criei uma bridge br0 com ambas as NIC:

brctl addbr br0
brctl stp br0 off
brctl addif br0 front_if
brctl addif br0 back_if

Então eles os criaram:

ifconfig front_if 0.0.0.0 promisc
ifconfig back_if 0.0.0.0 promisc
ifconfig br0 0.0.0.0

(Eu uso o promisc mode, porque não tenho certeza se posso fazer sem, pensando que talvez os pacotes não cheguem às NICs)

Então eu peguei um dos meus servidores virtuais em VN_front e os conectei a VN_back (esse é o ótimo caso de uso em que estou pensando, poder mover meus servidores apenas mudando o VN em que eles estão conectados, sem alterar nada na configuração).

Então eu olhei para os macs "vistos" pela minha ponte sem endereço usando brctl showmacs br0 e ele mostrou meu servidor de ambos os lados:

Eu recebo algo parecido com isto:

port no mac addr                is local?       ageing timer
  2     00:0c:29:e1:54:75       no                 9.27
  1     00:0c:29:fd:86:0c       no                 9.27
  2     00:50:56:90:05:86       no                73.38
  1     00:50:56:90:05:88       no                 0.10
  2     00:50:56:90:05:8b       yes                0.00  << FRONT VN
  1     00:50:56:90:05:8c       yes                0.00  << BACK  VN
  2     00:50:56:90:19:18       no                13.55
  2     00:50:56:90:3c:cf       no                13.57

a coisa é que o servidor que está conectado na frente / trás não é mostrado na porta correta.

Eu suspeito que alguma coisa horrível esteja acontecendo no mundo ARP ...: - /

Se eu pingar de um servidor virtual frontal para um servidor virtual de volta, só poderei ver a máquina de trás se essa máquina de trás colocar alguma coisa na frente. Assim que eu paro o ping da máquina de trás, o ping da máquina da frente pára de passar ...

Eu notei que, se a máquina traseira pica, então a sua porta na ponte é a correta ...

Eu tentei jogar com a opção arp_ de / proc / sys, mas sem efeito claro no resultado final ... / proc / sys / net / ipv4 / ip_forward não parece ser de alguma utilidade quando se usa uma bridge (parece que tudo foi resolvido pelo brctl) / proc / sys / net / ipv4 / conf / / arp _ não parece mudar muito ... (tentou arp_announce para 2 ou 8 - como sugerido em outro lugar - e arp_ignore para 0 ou 1)

Todos os exemplos que vi têm uma sub-rede diferente em ambos os lados, como 10.0.1.0/24 e 10.0.2.0/24 ... No meu caso, eu quero 10.0.1.0/24 em ambos os lados (assim como um transparente switch - exceto que é um fw oculto).

Ativar / desativar o stp parece não ter impacto no meu problema.

É como se os pacotes arp passassem pela ponte, corrompendo o outro lado com dados falsos ... Eu tentei usar o -arp em cada interface, br0, frente, verso ... ele quebra o coisa completamente ... Eu suspeito que tem algo a ver com ambos os lados sendo na mesma sub-rede ...

Eu pensei em colocar toda a minha máquina atrás do fw, para ter a mesma sub-rede na parte de trás ... mas estou preso com o gateway do meu provedor em pé na frente com parte da minha sub-rede (em fato 3 appliance para rotear toda a sub-rede), então eu sempre terei ips da mesma sub-rede em ambos os lados, o que eu fizer ... (Estou usando IPs frontais fixos na minha sub-rede delegada).

Eu estou perdido ... -_- '' Thx por sua ajuda.

(Como alguém tentou algo assim? de dentro do ESXi?)

(Não é apenas um truque, a idéia é ter algo como o fail2ban sendo executado em alguns servidores, enviando seu IP proibido para o bridge / fw para que também possa bani-los - salvando todos os outros servidores desse mesmo atacante uma vez, permitindo algum honeypot que acionaria o fw de qualquer tipo de resposta adequada, e coisas do tipo ...

Estou ciente de que poderia usar algo como snort, mas trata de um tipo completamente diferente de problemas, de uma maneira completamente diferente ... )

    
por Mink 01.06.2014 / 04:15

1 resposta

0

Se bem entendi, sua rede desejada é:

         +----------+  +-----+  +---------+
<--inet--+ VN_front +--+ br0 +--+ VN_back |
         +--+-------+  +-----+  +------+--+
            |                          |       
            |                          |       
         +--+----------+    +----------+--+
         | VM          |    | VM          |
         | 10.0.1.2/24 |    | 10.0.1.3/24 |
         +-------------+    +-------------+

Com o gateway da internet pela seta à esquerda?

E você usa ebtables ou iptables na bridge para firewall o que está na parte "back" da rede?

Tenho certeza de que isso poderia funcionar, mas eu não faria assim. É uma configuração complexa e incomum. Como dizem os programadores, sempre há duas pessoas que depurarão qualquer coisa que você criar - você e você em seis meses, quando você esquecer de tudo.

Todos os exemplos que você viu com duas sub-redes (e presumivelmente com um firewall muito mais simples) são a prática comum por uma razão - eles trabalham pela primeira vez, são óbvios para configurar, alterar, manter e solucionar problemas. / p>

Simplicidade é tudo em rede. Evite construir uma rede complexa. Tenha orgulho de sua rede simples e estável que um macaco bem treinado (ou até mesmo um MCSE) poderia executar. Peça ao seu chefe para lhe dar KPIs sobre o número de bilhetes que você não gera para provar e dar incentivos para essa estabilidade.

(Se seus MACs estão aparecendo como estando atrás da ponte errada, será porque você criou um loop de rede e as solicitações ARP estão sendo transmitidas para ambas as interfaces da bridge, e a última interface recebida aprende onde o MAC está De seus comentários posteriores, parece que você fez exatamente isso.)

    
por 21.07.2014 / 14:16