Marquez les paquets avec iptables par adresse mac de destination

4

Je dois marquer les paquets qui vont à une adresse MAC spécifiée.

J'ai besoin de cela pour utiliser dans shaper avec tc.

--mac-destinationn'existe pas dans iptables.

Aussi j'ai essayé d'utiliser ebtables:

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

mais cela ne marque rien (au moins ebtables -t nat -L --Lc, il me montre 0 pions)

S'il vous plaît aider! Merci beaucoup!

Serhii Matrunchyk
la source

Réponses:

2

L'astuce consiste à combiner iptables --mac-sourceavec CONNMARK:

  • Commencez par --mac-sourcefaire correspondre les paquets provenant de l’adresse Mac qui vous intéressent. C’est une mauvaise direction, car vous êtes intéressé par les paquets allant à cette adresse Mac, mais vous pouvez maintenant.
  • utiliser CONNMARKpour marquer l’ensemble de la connexion, c’est-à-dire les deux sens (!) et
  • définir la marque de la marque de connexion avec --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


Initialement, je pensais que cela ne fonctionnerait que pour les connexions TCP provenant du LAN, mais étant donné sa définition, --state NEWcela devrait fonctionner dans les deux sens pour TCP et UDP (!)

Voir également le routage de règles sous Linux basé sur l'adresse MAC de l'expéditeur, qui a inspiré cette réponse.

citron
la source
-1

iptablesfonctionne sur la couche 3 de l'OSI, de sorte qu'il ne sait absolument rien sur les adresses MAC.

En fait, il possède un module mac , qui ne contient cependant que le filtre suivant --mac-source: cela est dû au fait que les paquets Ethernet qui arrivent portent l’adresse MAC de leur source. Cependant, une telle adresse MAC n’existe pas pour les paquets entrant en Wi-Fi et n’est pas pertinente pour les paquets sortants. La référence ci-dessus indique:

Notez que cela n'a de sens que pour les paquets provenant d'un périphérique Ethernet et entrant dans les chaînes PREROUTING, FORWARD ou INPUT.

En ce qui concerne ebtables, tout d’abord, il ne peut être utilisé qu’avec les trames Ethernet, car les trames wifi manquent une adresse MAC. Deuxièmement, les adresses source MAC, comme je l’ai dit plus haut, n’existent pas dans les paquets IP.

Si vous vouliez contrôler les paquets ARP, vous découvririez rapidement qu’il existe une instruction

arp-mac-dst [!] adresse [/ masque]

La spécification de l'adresse de destination MAC (R) ARP

mais, encore une fois, cela est becausethe protocole ARP ne pas utiliser les adresses MAC, contrairement au protocole IP.

MariusMatutiae
la source
Je vous remercie. J'ai utilisé ebtables -t nat -A PREROUTING -p arp --arp-mac-dst bc:5f:f4:aa:bb:cc -j mark --mark-set 0x2003et ebtables -t nat -L --Lvne montre aucun match ..
Serhii Matrunchyk
2
Cette réponse est trompeuse: les réseaux wifi ont des adresses mac et iptables --mac-sourcefonctionnent bien avec elles. La page de manuel devrait probablement
indiquer