É possível ativar o isolamento de portas em pontes Linux?

5

Na maioria dos switches gerenciados, você pode ativar o Isolamento de portas da camada 2. A implementação e a terminologia são diferentes de fornecedor para fornecedor, mas em geral você mantém uma ou mais portas no estado promíscuo (Cisco) ou Uplink (HP) padrão e configura outras portas como Isolada (Cisco) ou Privada (HP). Depois, os portos isolados só podem falar com os promíscuos, mas não uns com os outros.

Existe alguma maneira de implementar isso com pontes Linux para, por exemplo. isolar as VMs umas das outras? Talvez via ebtables?

    
por mss 12.05.2012 / 21:48

3 respostas

2

você pode tentar usar ebtables e criar regras próprias envolvendo a porta de entrada / saída.

Eu não tenho servidor com bridge na mão, mas eu faria algo assim:

ebtables -P FORWARD DROP
ebtables -F FORWARD
ebtables -A FORWARD -i $uplinkPort -j ACCEPT # let the traffic flow from uplink to any ports
ebtables -A FORWARD -o $uplinkPort -j ACCEPT # let the traffic flow from any ports to uplink
    
por 12.05.2012 / 23:22
2

Como solicitado por @pQd, aqui está um exemplo prático de isolamento de portas com VMs (aqui: com base em Proxmox VE ) quando o host é o uplink e todas as VMs devem ser isoladas umas das outras. Eu uso isso para uma rede de serviço interno (DNS, atualizações, etc). A ponte é vmbr1 , os dispositivos Ethernet virtuais são vethNNN.1 (onde NNN é o VID). Se você quer apenas isolamento, isso deve ser suficiente:

ebtables --append FORWARD --logical-in vmbr1 --jump DROP

Se várias pontes forem configuradas e outras VMs também devem ser Uplinks (aqui: veth100.1 e veth102.1 ), algo como isto é mais apropriado (não testado):

for br in $(seq 0 1); do
    br=vmbr$br
    ebtables --new-chain $br
    ebtables --policy $br DROP
    ebtables --append FORWARD --logical-in $br --jump $br
done
for if in 100.1 102.1; do
    br=vmbr$(echo $if | cut -d. -f2)
    if=veth$if
    ebtables --append $br --in-if $if
    ebtables --append $br --out-if $if
done

Se o host não deve ser um uplink, isso deve funcionar (eu não tentei também):

ebtables --append INPUT --logical-in vmbr1 --jump vmbr1
ebtables --append OUTPUT --logical-out vmbr1 --jump vmbr1
    
por 13.05.2012 / 21:35
0

Esta pode ser uma maneira mais simples de isolar VMs / outros clientes uns dos outros, enquanto ainda permite que eles se comuniquem com o gateway upstream - usando endereços IP (IPv4, aqui).

por exemplo, as VMs estão em 192.168.12.x/24 , o gateway está em 192.168.12.254 . Primeiras 2 linhas permitem cada direção para / do gateway. A terceira linha bloqueia todo o tráfego IPv4 entre outros hosts na sub-rede:

ebtables -A FORWARD -p IPv4 --ip-src 192.168.12.0/24 --ip-dst 192.168.12.254 -j ACCEPT ebtables -A FORWARD -p IPv4 --ip-src 192.168.12.254 --ip-dst 192.168.12.0/24 -j ACCEPT ebtables -A FORWARD -p IPv4 --ip-src 192.168.12.0/24 --ip-dst 192.168.12.0/24 -j DROP

Eu não trabalhei como bloquear também "todo o resto" (tráfego não-IPv4) entre esses clientes, porque eu espero que você provavelmente ainda precise permitir algumas coisas como o ARP?

    
por 11.02.2017 / 14:01