J'essaie de créer des règles de couplage IP-MAC dans ebtables . Il existe peu de didacticiels et de questions connexes [1], mais j'ai un type de paramètre spécifique.
ENVIRONNEMENT: J'ai de nombreux hôtes physiques . Chaque hôte possède peu de cartes Ethernet, jointes en liaison et utilisées comme esclave pour le pont. Il existe de nombreuses machines virtuelles sur chaque hôte (kvm, qemu, libvirt). Chaque machine virtuelle est connectée à un pont de son hôte physique via un nouveau port appelé vnet [0-9] +. Il n'y a pas de NAT. La mise en réseau fonctionne très bien, tous les hôtes physiques peuvent être cinglés, toutes les machines virtuelles aussi. Chaque machine virtuelle a sa propre adresse IP et adresse MAC.
PROBLÈME: à l' intérieur d'une machine virtuelle, l'adresse IP peut être remplacée par une autre.
SOLUTION TROUVÉE: Il existe une solution connue sur le site ebtables [2], mais cette solution est applicable quand un seul hôte est utilisé. Il autorise tout le trafic et s'il y a un paquet IP avec un autre MAC que celui autorisé, le paquet est abandonné. S'il existe plusieurs hôtes, il faut que toutes les paires IP-MAC existantes soient enregistrées sur tous les hôtes. Il faut une solution politique inversée.
SOLUTION ARTISANALE: J'ai essayé d'utiliser des ebtables de manière inversée. Voici un exemple de ce que j'ai essayé.
EXEMPLE 1
Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
EXEMPLE 2
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Le cœur de ce que je veux est d'avoir DROP par défaut et d'autoriser uniquement le trafic provenant de machines virtuelles avec la bonne paire IP-MAC déployée sur l'hôte donné. Cependant, ces solutions ne fonctionnent pas.
QUESTION: Comment autoriser le trafic sur le pont uniquement pour les paires IP-MAC spécifiées de machines virtuelles en cours d'exécution et supprimer toutes les paires IP-MAC inconnues provenant des ports vnet [0-9] +?
Merci beaucoup pour toutes les réponses.
Réponses:
J'ai finalement réussi à élaborer une solution de travail.
Donc, au début, il n'y a aucune règle et toutes les politiques sont configurées pour ACCEPTER. Il n'y a pas de chaînes définies par l'utilisateur. Le tableau des filtres ressemble à ceci:
Une nouvelle chaîne est ajoutée. Cette chaîne contient toutes les paires IP-MAC autorisées. Cela s'appelle VMS.
Maintenant, la partie importante. Pour chaque trame contenant un paquet IP (ou ses parties) qui passe par le pont depuis le port vnet [0-9] +, appliquez la politique de chaîne et les règles de chaîne VMS. En d'autres termes, pour chaque paquet IP provenant de n'importe quelle machine virtuelle, appliquez la chaîne VMS.
La politique par défaut de la chaîne VMS doit être DROP. De cette façon, chaque paquet IP provenant de n'importe quelle machine virtuelle est supprimé par défaut. Plus tard, des exceptions de paires IP-MAC autorisées sont ajoutées. La stratégie par défaut DROP provoque que tout le trafic provenant de n'importe quelle machine virtuelle avec une paire IP-MAC inconnue est supprimé à la fois, ce qui rend l'usurpation d'adresse IP impossible.
Le filtre de table se présente maintenant de cette façon. En outre, de cette façon, il semble quand aucune machine virtuelle n'est en cours d'exécution (autorisée).
Supposons qu'il existe deux machines en cours d'exécution. Si nous essayons de faire un ping vers / depuis eux, le trafic est abandonné et la destination est inaccessible. C'est le résultat souhaité, car ce trafic n'a pas encore été autorisé. Une seule commande suffit pour autoriser le trafic de chaque machine virtuelle.
Désormais, le trafic provenant des machines virtuelles autorisées circule correctement et l'usurpation d'adresse IP est empêchée.
Cette solution peut être imparfaite et si vous avez des commentaires ou des améliorations, je serai heureux de les entendre.
la source