DHCP3 comment refuser des plage mac address

hello
j’ai un soucis avec mon serveur dhcp
je voudrais qu’il refuse des plages address mac
cela faits quelque jours que je me penche dessus
mais je 'ai pas encore trouver quelle option pouvait faire mon bonheur dans mon serveur dhcp

yy:yy:yy:xx:xx:xx;
donc en disant a mon serveur si tu vois yy:yy:yy tu refuse de lui donner une adresse ip

merci

Salut,
Pas sur que ce soit possible avec dhcp ?

Mais avec iptables quelque chose comme ça devrait fonctionner :

@ lol : marchera pas.

  1. -m mac ne prend qu’une adresse MAC complète, pas un préfixe.
    1.5) EDIT Ce n’est pas dans FORWARD mais dans INPUT qu’il faudrait filtrer.
  2. dhcpd écoute directement sur l’interface et court-circuite les règles iptables.

On pourrait éventuellement faire du filtrage ethernet avec ebtables si dhcpd écoute sur un pont.

@ vincs974 :
Je n’ai pas essayé, mais une approche possible serait d’utiliser une classe et un pool. Quelque chose du genre :

class "oui-banni" {
  match if substring(hardware, 0, 10) = "1 xx:xx:xx"; # cf. man dhcp-eval
}

subnet a.a.a.a netmask b.b.b.b { # subnet existant
  # parametres existants
  pool {
    deny members of "oui-banni";
    range x.x.x.x y.y.y.y; # range existante
  }
}

[quote=“PascalHambourg”]…2) dhcpd écoute directement sur l’interface et court-circuite les règles iptables.[/quote]J’avais oublié ce “détail”…

[quote=“PascalHambourg”]Je n’ai pas essayé, mais une approche possible serait d’utiliser une classe et un pool.[/quote]Intéressant. Il faut que je fasse un essai :wink:

Ne te gênes pas et tiens-moi au courant stp, ça m’intéresse toujours d’avoir un retour sur mes élucubrations.

j’essairai aussi demain

Re,
De mon côté je n’y arrive pas, le dhcp ne peut pas s’empêcher d’offrir un bail… C’est un service difficile à maîtriser, il répond à toutes les demandes, même celles des inconnus… :mrgreen:

Que ce soit avec

match if substring(hardware, 0, 10) = “1 xx:xx:xx”;
match if substring(hardware, 0, 10) = “xx:xx:xx”;
match if substring(hardware, 0, 10) = “1:xx:xx:xx”;
match if binary-to-ascii(16,8,":",substring(hardware, 1, 2)) = “1 xx:xx:xx”;
match if binary-to-ascii(16,8,":",substring(option dhcp-client-identifier,0,4)) = “1 xx:xx:xx”;

Je pense que tu n’es pas loin de la solution. En fait il s’avère que l’opérateur hardware retourne le type de lien et l’adresse MAC au format binaire (donc 1+6 octets) et non sous forme de chaîne de caractères ASCII en représentation hexadécimale. Il faut donc soit spécifier la valeur de comparaison sous la même forme (“colon-separated hexadecimal list”, sans guillemets)

soit convertir le résultat en chaîne de caractères ASCII comme tu as essayé de le faire

Attention dans la chaîne ASCII de comparaison le zéro de poids fort des octets doit être omis, par exemple : 00:b5:09 -> 0:b5:9

Bravo… :038

Ça marche avec ça : MAC > 08:00:27:02:65:60 traduit en 8:0:27 (en fait cela met dans le groupe banni toutes les adresses mac qui commencent par 08:00:27)

[code]default-lease-time 120;
max-lease-time 120;
authoritative;

class “banni” {
match if binary-to-ascii(16, 8, “:”, substring(hardware, 1, 3)) = “8:0:27”;
}

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.254;
pool {
deny members of “banni”;
range 192.168.0.70 192.168.0.71;
}
pool {
range 192.168.0.72 192.168.0.73;
}
}[/code]

Le matériel réseau détecté dans le groupe “banni” obtient l’IP 72. Celui qui n’est pas dans le groupe banni obtient 70.
Le filtre fonctionne.

Merci.
Je mettrais un paragraphe dans le Wiki à ce sujet, car beaucoup de demandes à ce sujet sont sans réponses sur le net.

Une dernière question : comment convertir une adresse MAC en binaire ?

Merci d’avoir testé. Tu as essayé l’autre proposition, qui a l’air plus simple ?

Comment ça ?

[quote=“PascalHambourg”]Merci d’avoir testé. Tu as essayé l’autre proposition, qui a l’air plus simple ?

Comment ça ?[/quote]

Non je n’ai pas testé l’autre solution car tu disais [quote]l’opérateur hardware retourne le type de lien et l’adresse MAC au format binaire (donc 1+6 octets) et non sous forme de chaîne de caractères ASCII en représentation hexadécimale[/quote]
Ce qui, je ne le cache pas est un peu obscure pour moi, d’où la question : faut-il, et comment, convertir l’adresse MAC ?

Normalement non, il n’y a rien à convertir. Si j’ai bien lu la page de manuel le format “colon-separated hexadecimal list” devrait créer directement une chaîne de données binaire qui peut être comparée à la partie de l’adresse MAC extraite par substring(). Et on devrait même pouvoir écrire les zéros de poids fort, dans ton cas 08:00:27 (sans guillemets).

Excellent !

Merci.

Dans le Wiki > isalo.org/wiki.debian-fr/ind … resses_MAC

Menteur… :005

Re,
Je passe en résolu avant que ce fil ne tombe dans l’oubli. :wink:

pour ma par j’ai aussi regler le soucis voici ma conf

au lieu de mettre deny banni , j’ai mis un allow car sinon mon fichier de conf aller etre enorme si je devais mettre plusieur group de banni puis a la fin la plage de
fonctionnenement de mon reseau
ainsi maintenant j’ai des group pour les telephone portable, netbook ( a adapte suivant le dhcp lease)
conf epurer

class “banni” {
match if substring ( hardware, 1,3) = 08:00:27;
}

class “banni2” {
match if substring ( hardware, 1,3) = 12:36:27;
}

pool {
allow members of “banni”;
default-lease-time 1;
max-lease-time 2;
range 192.168.1.245 192.168.1.250 ; # plage adresse pour les banni telephone(avec cette conf les bannie telephone a notre service pour savoir )
}

pool {
allow members of “banni2”;
default-lease-time 1;
max-lease-time 2;
range 192.168.1.240 192.168.1.245 ; # plage adresse pour les banni pc(avec cette conf les bannie telephone a notre service pour savoir )
}

pool {
range 192.168.1.5 192.168.1.205;
}

merci

Compte tenu qu’on peut changer les mac adresses facilement je ne vois pas trop l’intérêt d’en bannir.

Que se passe t il si deux ordinateurs portent la même mac adresse?

Pour changer de mac adresse voila ce que je fais

ifconfig eth0 down ifconfig eth0 hw ether 00:1E:C8:38:EA:8F ifconfig eth0 up

je regarde de temps en temps les bails