Pregunta ¿Es posible habilitar el aislamiento de puertos en puentes de Linux?


En la mayoría de los switches administrados, puede habilitar el Aislamiento de puertos de Capa 2. La implementación y la terminología son diferentes de un proveedor a otro, pero en general, se mantienen uno o más puertos en el estado Promiscuo (Cisco) o Uplink (HP) predeterminado y se configuran otros puertos como Aislados (Cisco) o Privados (HP). Después, los puertos aislados solo pueden hablar con los promiscuos, pero no entre sí.

¿Hay alguna manera de implementar esto con puentes de Linux a, por ejemplo. ¿Aíslan las máquinas virtuales unas de otras? Tal vez a través de ebtables?


5
2018-05-12 19:48


origen


Acabo de enterarme de que esto también se llama una VLAN privada y se define en RFC 5517. - mss


Respuestas:


puedes intentar usar ebtables y crear reglas propias que involucren puerto de entrada / salida de puente.

No tengo el servidor con el puente a mano pero haría algo como esto:

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

2
2018-05-12 21:22



Eso es lo que pensé (ver la última oración de mi pregunta) pero no tengo idea de cómo hacer esto ... bueno, eso es una mentira, busqué un poco en Google desde que hice esa pregunta y podría haber encontrado una solución pero no Lo probé todavía. Cualquiera que publique las reglas de ebtables de trabajo es bienvenido :) - mss
He añadido algo que probablemente debería funcionar. retroalimentación es bienvenida. - pQd
Me señalaste en la dirección correcta. Para el caso simple (común) donde tiene un puente virtual como vmbr0 y quieren aislar todas las máquinas virtuales entre sí, un simple ebtables -A FORWARD --logical-in vmbr0 -j DROP en el host es suficiente. Si también desea definir otras máquinas virtuales como enlaces ascendentes, debería saltar a una cadena adicional con la política DROP. Allí puedes agregar reglas por ejemplo. basado en las interfaces (recuerde agregar ambos -i y -o aunque las reglas). - mss
@mss podrías publicar tu configuración completa, ya sea en pastebin.como aquí como respuesta separada. Gracias. - pQd


Según lo solicitado por @pQd, aquí hay un ejemplo práctico para el aislamiento de puertos con máquinas virtuales (aquí: basado en Proxmox VE) cuando el host es el enlace ascendente y todas las máquinas virtuales deben estar aisladas unas de otras. Lo uso para una red de servicio interna (DNS, Actualizaciones, etc.). El puente es vmbr1, los dispositivos virtuales de Ethernet son vethNNN.1 (dónde NNN es el VID). Si solo quieres aislamiento, esto debería ser suficiente:

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

Si se deben configurar varios puentes y otras VM también deben tener enlaces ascendentes (aquí: veth100.1 y veth102.1), algo como esto es más apropiado (no probado):

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

Si el host no debería ser un enlace ascendente, esto debería funcionar (no lo intenté también):

ebtables --append INPUT --logical-in vmbr1 --jump vmbr1
ebtables --append OUTPUT --logical-out vmbr1 --jump vmbr1

2
2018-05-13 19:35





Esta podría ser una forma más sencilla de aislar las máquinas virtuales / otros clientes entre sí, al tiempo que les permite comunicarse con la puerta de enlace ascendente, utilizando Direcciones IP (IPv4, aquí).

por ejemplo, las máquinas virtuales están en 192.168.12.x/24la puerta de entrada está en 192.168.12.254. Las primeras 2 líneas permiten cada dirección hacia / desde la puerta de enlace. La tercera línea bloquea el resto del tráfico IPv4 entre otros hosts en la subred:

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

No he descubierto cómo bloquear también "todo lo demás" (tráfico que no es ipv4) entre estos clientes, porque supongo que probablemente todavía necesitarás permitir que pasen cosas como ARP.


0
2018-02-11 13:01