Até onde sei, não há como distinguir o tráfego da VLAN em iptables
na interface principal (que é a interface à qual as interfaces da VLAN virtual são adicionadas com vconfig ou ip link add link; não sei se esse é o termo correto, eu encorajo você a me corrigir).
Em geral, isso não é problema, pois você pode fazer a correspondência usando a interface VLAN virtual em vez da interface principal, por exemplo,
iptables -A INPUT -i eth0.1 -p tcp -m tcp --dport 22 -j ACCEPT
Isso permitirá que os pacotes da porta TCP 22 (SSH) cheguem em eth0.1
, que são pacotes que chegam em eth0
marcados com VLAN-ID 1.
Surgem problemas quando você deseja corresponder apenas ao tráfego não marcado na interface principal, por exemplo,
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT
Nossa intenção é combinar os pacotes TCP 53 (DNS) que chegam na eth0 sem uma tag VLAN, o que fazemos, mas também combinamos pacotes com qualquer outra tag VLAN chegando em eth0
.
Portanto, uma possível solução alternativa seria incluir o endereço IP / sub-rede da interface principal na regra. Vamos supor que estamos usando 10.0.0.0/24 em eth0
e 10.0.1.0/24 em eth0.1
:
iptables -A INPUT -i eth0 -d 10.0.0.0/24 -p tcp -m tcp --dport 53 -j ACCEPT
Infelizmente, isso tem dois inconvenientes:
- Também estamos combinando pacotes com endereço IP falso, nada impede que clientes mal-intencionados ou mal configurados enviem pacotes com 10.0.0.0/24 e VLAN-ID 1. Em geral, isso não deve ser um problema, porque as respostas a esse pacote serão outro caminho de volta e não vai chegar ao original
- Ele não funciona com tráfego de transmissão, como DHCP , por exemplo, que não usa o endereço IP da interface.
Especialmente o último problema me incomoda. Por exemplo, o seguinte tem efeitos colaterais indesejados:
iptables -A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT
Esta regra corresponderá a qualquer tráfego DHCP recebido em eth0, independentemente de qual tag VLAN um pacote tenha. Se quisermos excluir o tráfego DHCP com VLAN-ID 1, estamos perdidos.
Alguma sugestão?