Marcar pacotes com iptables pelo endereço MAC de destino

3

Eu preciso marcar os pacotes que vão para um endereço MAC especificado.

Eu preciso disso para usar no shaper com tc .

--mac-destination não existe em iptables .

Também tentei usar ebtables :

ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT

mas não marca nada (pelo menos ebtables -t nat -L --Lc mostra 0 contadores)

Por favor me ajude! Muito obrigado!

    
por Serhii Matrunchyk 25.09.2015 / 11:55

2 respostas

2

O truque é combinar iptables --mac-source com CONNMARK :

  • Primeiro use --mac-source para corresponder aos pacotes vindos do endereço MAC em que você está interessado. É a direção errada, já que você está interessado em pacotes que vão para esse endereço mac, mas agora você pode
  • use CONNMARK para marcar a conexão inteira, ou seja, ambas as direções (!) e
  • define a marca da marca de conexão com --restore-mark


# lan interface
if_lan=eth0

# create 'mark_mac' table for marking connections:
iptables -t mangle -N mark_mac
iptables -t mangle -A mark_mac -j MARK --set-mark 1234
iptables -t mangle -A mark_mac -j CONNMARK --save-mark

# mark connections involving mac address:
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 9c:4e:36:aa:bb:cc -j mark_mac

# mark packets going to mac:
iptables -t mangle -A POSTROUTING -o $if_lan -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark


Inicialmente eu pensei que isso só funcionaria para conexões tcp originárias da lan, mas dada a definição de --state NEW , deveria funcionar em ambas as direções para ambos tcp e udp (!)

Veja também Roteamento de políticas no Linux com base no endereço MAC do remetente que foi a inspiração para esta resposta.

    
por 10.07.2017 / 22:07
-1

iptables funciona na camada OSI 3, por isso não sabe nada sobre endereços MAC.

Na verdade, ele tem um módulo mac , que, no entanto, contém apenas o filtro adicional --mac-source : isso ocorre porque os pacotes Ethernet que chegam carregam o endereço MAC de sua origem. No entanto, tal endereço MAC não existe para pacotes que chegam através de wifi, e não é relevante para pacotes de saída. A referência acima afirma:

Note that this only makes sense for packets coming from an Ethernet device and entering the PREROUTING, FORWARD or INPUT chains.

Quanto ao ebtables , antes de tudo, ele pode ser usado apenas com quadros Ethernet, porque os quadros wi-fi perdem um atributo MAC. Segundo, os endereços de origem MAC, como eu disse acima, não existem em pacotes IP.

Se você quiser controlar os pacotes ARP, descobrirá rapidamente que há uma instrução

arp-mac-dst [!] address[/mask]

The (R)ARP MAC destination address specification

mas, mais uma vez, isso ocorre porque o protocolo ARP faz usar endereços MAC, ao contrário do protocolo IP.

    
por 25.09.2015 / 12:50