Iptables, adresse mac dans un fichier

Bonjour,

Avec iptables il est possible de créer des règles en fonction de l’adresse mac. Il faut donc écrire une règle pour chaque adresse mac. Ceci ne pose pas de problème avec 2 ou 3 machines mais quand on commence à en avoir 50 ou 100 …

Du coup je voulais savoir s’il existe un moyen pour stocker toutes les adresses mac que l’on souhaite dans un fichier à part pour n’avoir qu’une seule règle iptables à écrire ?

Si quelqu’un à la réponse ou bien une autre solution plus pratique ce serait génial :slightly_smiling:

Merci.

peut être un truc du genre

while read ligne do commande iptables $ligne done < fichier

ipset permet de gérer des listes de paires IP-MAC, mais je ne suis pas sûr que ça correspond à ton besoin. Sinon, il reste possible de faire une boucle de script qui prend chaque adresse MAC dans un fichier et crée une règle correspondante.

Je pensais pouvoir faire ça directement avec iptables mais finalement un petit script bash suffit.

nbl=`awk 'END {print NR}' adresse.mac`

for ((i = 1; i <= $nbl; i += 1))
do
mac=`sed -n "$i"p adresse.mac` 
iptables -t mangle -I PREROUTING 2 -m mac --mac-source $mac -j MARK --set-mark 2 
done

Pas sûr que ce soit la méthode optimale pour extraire des adresses d’un fichier, mais je suis trop nul en script shell pour proposer mieux.

Effectivement. Inutile de mélanger awk, sed et une boucle bash. On pourrait imaginer plutôt ceci:

[code]# si une seule colonne dans le fichier mac
awk ‘{system(“iptables -t mangle -I PREROUTING 2 -m mac --mac-source “$0” -j MARK --set-mark 2”)}’ fichier_mac

si plusieurs avec la virgule comme séparateur. Adresse mac dans la deuxième colonne.

awk -F, ‘{system(“iptables -t mangle -I PREROUTING 2 -m mac --mac-source “$2” -j MARK --set-mark 2”)}’ fichier_mac[/code]

Et encore l’appel à system à chaque ligne de awk n’est pas la solution optimale pour de gros fichiers. Il est préférable de rediriger le stdout de awk vers un fichier et ensuite exécuter celui-ci en une fois.