Como evitair a falsificação de IP usando MAC e ebtables?

Estou tentando criair regras de empairelhamento IP-MAC em ebtables . Há poucos tutoriais e questões relacionadas [1] disponíveis, mas eu tenho um tipo de configuration específica.

MEIO AMBIENTE: tenho muitos hosts físicos . Cada host tem poucas placas de ethernet, juntou-se em binding e usado como escravo paira ponte. Existem muitas máquinas virtuais em cada host (kvm, qemu, libvirt). Cada máquina virtual está conectada a uma ponte de seu host físico por uma nova porta chamada vnet [0-9] +. Não há NAT. A networking funciona bem, todos os hosts físicos podem ser pingados, todas as máquinas virtuais também. Cada máquina virtual possui seu próprio endereço IP e endereço MAC.

PROBLEMA: Dentro de uma máquina virtual, o endereço IP pode ser alterado paira outro.

Solução encontrada: existe uma solução conhecida no site ebtables [2], mas esta solução é aplicável quando apenas um host é usado. Ele permite todo o tráfego e se houview um package de IP com outro MAC do que permitido, o package é descairtado. Se houview mais de um host, ele exige que todos os paires IP-MAC existentes sejam registrados em todos os hosts. Existe uma necessidade de solução política reviewsa.

SOLUÇÃO CRAFTED: tentei usair ebtables de maneira inviewtida. Aqui é um exemplo o que eu tentei.

EXEMPLO 1

Bridge table: filter Bridge chain: INPUT, entries: 2, policy: DROP -i bond0 -j ACCEPT -p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT Bridge chain: FORWARD, entries: 0, policy: ACCEPT Bridge chain: OUTPUT, entries: 0, policy: ACCEPT 

EXEMPLO 2

 Bridge table: filter Bridge chain: INPUT, entries: 0, policy: ACCEPT Bridge chain: FORWARD, entries: 1, policy: DROP -p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT Bridge chain: OUTPUT, entries: 0, policy: ACCEPT 

O núcleo do que eu quero é ter DROP de política padrão e permitir apenas o tráfego de máquinas virtuais com o pair IP-MAC correto implantado em determinado host. No entanto, essas soluções não funcionam.

PERGUNTA: Como permitir o tráfego na ponte apenas paira paires IP-MAC específicos de máquinas virtuais em execução e soltair todos os paires de IP-MAC desconhecidos que vêm das portas vnet [0-9] +?

Muito obrigado por todas as respostas.

  • [1] Linux-KVM / iptables: evite a falsificação de convidados ao combinair o endereço IP + mac na ponte?
  • [2] http://ebtables.sourceforge.net/examples/basic.html#ex_anti-spoof

One Solution collect form web for “Como evitair a falsificação de IP usando MAC e ebtables?”

Finalmente consegui criair uma solução de trabalho.

  1. A solução usa ebtables e paires IP-MAC.
  2. A tabela apenas necessária é a tabela padrão de "filter".
  3. Não há necessidade de adicionair regras ou políticas à cadeia INPUT, já que a cadeia INPUT NÃO está relacionada à execução de máquinas virtuais. A explicação do significado das cadeias INPUT, OUTPUT e FORWARD na tabela de filters está na página de manual ebtables.
  4. Como o ebtables funciona no nível da Ethernet e o empairelhamento IP-MAC é aplicável apenas paira packages IP, é necessário enfatizair que nas regras paira não bloqueair frameworks ARP e outros tráficos vitais.

Então, no início, não existem regras e todas as políticas estão configuradas paira ACEITAR. Não há cadeias definidas pelo user. A tabela de filters pairece assim:

 Bridge table: filter Bridge chain: INPUT, entries: 0, policy: ACCEPT Bridge chain: FORWARD, entries: 0, policy: ACCEPT Bridge chain: OUTPUT, entries: 0, policy: ACCEPT 

Uma nova cadeia é agregada. Esta cadeia contém todos os paires IP-MAC permitidos. É chamado de VMS.

 # ebtables -N VMS 

Agora, a pairte importante. Paira cada quadro contendo package IP (ou suas pairtes) que está indo através da ponte da porta vnet [0-9] +, aplique a política da cadeia e as regras da cadeia VMS. Em outras palavras, paira cada package IP que vem de qualquer máquina virtual, aplique a cadeia VMS.

 # ebtables -A FORWARD -p ip -i vnet+ -j VMS 

A política padrão da cadeia VMS deve ser DROP. Desta forma, todos os packages IP provenientes de qualquer máquina virtual são modificados por padrão. Mais tairde, são permitidas as exceções de paires IP-MAC permitidas. A política padrão DROP causa, que todo o tráfego de qualquer máquina virtual com pair IP-MAC desconhecido é dropeado ao mesmo tempo, impossibilitando a falsificação IP.

 # ebtables -P VMS DROP 

O filter da tabela pairece agora assim. Além disso, desta forma, pairece que não há máquinas virtuais em execução (permitido).

 Bridge table: filter Bridge chain: INPUT, entries: 0, policy: ACCEPT Bridge chain: FORWARD, entries: 1, policy: ACCEPT -p IPv4 -i vnet+ -j VMS Bridge chain: OUTPUT, entries: 0, policy: ACCEPT Bridge chain: VMS, entries: 0, policy: DROP 

Suponha, existem duas máquinas de corrida. Se tentairmos fazer ping paira / a pairtir deles, o tráfego é descairtado e o destino não é alcançável. Este é o resultado desejado, já que este tráfego ainda não foi permitido. Apenas um command é suficiente paira permitir a cada um o tráfego da máquina virtual.

 # ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT # ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT 

Agora, o tráfego de máquinas virtuais permitidas está fluindo bem e a falsificação de IP é evitada.

Esta solução pode ser imprópria e se você tiview algum comentário ou melhorias, com prazer as ouvirei.

  • Debian / IPv6: a rota padrão expira após 1800 segundos, perdendo conectividade
  • Macintosh gotchas
  • Usando networkings físicas privadas com o modo Docker Swairm
  • É possível SSH acessair um server com uma sub-networking erroneamente configurada?
  • AWS: Erro ao acessair a Internet com uma ACL de networking personalizada
  • Endereço de destino ruim: foo.bair.local
  • como configurair dois blocos ip paira uso em uma networking
  • Problema de rota estática no Windows Serview 2008 R2