Bloquer les requêtes DHCP avec iptables - réseaux et sécurité - Linux et OS Alternatifs
Marsh Posté le 23-11-2006 à 16:43:38
Je pense que tu aurais du poster sur OSR
Marsh Posté le 23-11-2006 à 17:00:00
OK grand chef, il me paraissait que c'était une question de réseau malgré tout donc j'ai posté dans Réseaux, désolé
Du coup quelqu'un a une idée ? J'suis bien bloqué là, y'a malheureusement que DHCP qu'est pas bloqué (hmm)
Marsh Posté le 23-11-2006 à 18:30:55
C'est dut a ton serveur DHCP. le serveur DHCP implémenté par les gars de l'isc utilise des raw sockets. C'est a dire qu'ils sont au plus bas niveau et bypass netfilter.
Le meilleur moyen pour toi est de configurer correctement ton dhcpd.conf pour que ton serveur n'écoute pas sur les interfaces où il ne doit pas écouter.
edit: De plus, avec ethereal tu verras toujours les paquets non filtrés. la libpcap (utilisé par ethereal, wireshark, tcpdump) récupère les paquets AVANT que netfilter n'ai eut le temps d'agir.
Marsh Posté le 23-11-2006 à 18:43:49
Salut l0ky, merci beaucoup pour ta réponse !!
Pour Ethereal ouais je me posais la question au début, et effectivement il affiche les paquets avant qu'ils soient éventuellement détruits.
En fait quand je fais ma requête DHCP, y'a d'autres paquets bizarres qui apparaissent :
- ICMPv6 Router Solicitation
- ICMPv6 Multicast Listener Report Message v2
- ICMPv6 neighbour Solicitation
Je capte pas ce que vient faire IPv6 la dedans... Du coup, comment dois-je configurer mon /etc/dhcpd.conf ? pour l'instant, voilà ce que j'ai dedans :
ddns-update-style interim;
ignore client-updates;
subnet 192.168.16.0 255.255.255.0 {
range 192.168.16.65 192.168.16.75;
option routers 192.168.16.64;
option domain-name-servers 192.168.16.64;
option domain-name "mondomaine.fr";
option broadcast-address 192.168.16.255;
default-lease-time 86400;
max-lease-time 604800;
}
L'adresse de mon serveur DHCP est 192.168.16.64, il écoute sur eth1 (Wifi), et sur eth0 il n'y a rien de branché, l'interface est désactivée.
Comment mieux configurer le truc pour que les requêtes DHCP soient bloquées ? Merci beaucoup d'avance !!
Marsh Posté le 23-11-2006 à 19:30:44
Je ne connais pas la version de dhcpd que tu utilises
si tu spécifies sur la ligne de commande de lancement de ton daemon dhcpd aucune interfaces d'écoute il va écouter sur toutes.
tu peux modifier le scripts /etc/init.d/dhcpd pour spécifier la bonne interface.
a priori, on peut pas le faire dans le fichier /etc/dhcpd.conf
et le faire dans le /etc/default/dhcpd c'est pas tip top...
Marsh Posté le 24-11-2006 à 10:10:22
J'ai fait un dhcpd --version, voici ce que ça me renvoit :
isc-dhcpd-V3.0.3-RedHat ; j'ai une distribe Fedora.
Pour le truc des interfaces, je ne suis pas certain que cela vienne de là, car j'ai deux PC :
- PC1, qui a le serveur DHCP
- PC2, le client
Sur chacun de ces PC, seule l'interface eth1 est activée, l'interface Ethernet est désactivée et il n'y a pas de câble de branché.
j'ai interdit tout trafic avec iptables sur les deux machines (cf mon premier post), et la requête arrive non seulement à partir de PC 2 (ce qui est déjà incroyable), mais en plus PC1 la recoit, y répond et PC 2 se configure tranquillement, alors que je répète aucun autre service (ping, SSH, Telnet, traceroute...) ne passe (ça me dit : "Operation not permitted", ce qui est tout à fait normal).
Donc l0ky, penses-tu vraiment que cela vienne d'un problème d'interface ? Parce que j'ai aussi lancé le daemon en faisant un dhcpd -i eth1, et le résultat est le même, les requêtes passent bien par cette interface. Si quelqu'un a une idée vraiment ça serait sympa, parce que là j'suis bien dans la panade...
Merci d'avance !
Marsh Posté le 24-11-2006 à 10:31:40
1. Non ce n'est pas "incroyable" c'est l'implémentation de ton serveur DHCP et de ton client qui le permet. Le fait est que le protocole DHCP est un peu spéciale. Les clients non adressé émet des requetes en broadcast avec en source une adresse 0.0.0.0, donc le seveur doit pouvoir recevoir ces messages. Y répondre. Le client, lui doit pouvoir récupérer la réponse. Pour des faciliter d'implémentation, ISC utilise des raw sockets. Le traffic passant dans ce type de socket ne sont pas impactés par netfilter.
2. Donc, si ton serveur DHCP écoute sur une interface, TOUS les paquets à destination du port UDP 67, qui toucheront ton interface seront captés par ton serveur DHCP. Que netfilter soit la ou pas.
3. Quel est l'intéret de vouloir bloquer DHCP si tu es dans la configuration suivante ?
|
Si tu veux que ton serveur serve de serveur DHCP il n'y a pas de probleme. Apres, si tu veux que ton serveur écoute seulement sur interface autre:
Serveur DHCP eth1 -------- Switch --------- eth1 client |
il faut que tu dises a dhcpd de n'écouter que sur eth0 !
Marsh Posté le 24-11-2006 à 10:33:05
Tchek14 a écrit :
|
Ce qui est un peu normal !
Tu dis a dhcpd de n'écouter que sur eth1
tu as un client connecté via eth1
Donc si ton client fait des requetes DHCP sur le lien, ton serveur y répondra (vu netfilter ne bloquera pas le traffic a cause des raw socket...)
Je ne suis pas sur de saisir ce que tu veux effectivement...
Si ton serveur dhcp ne doit pas servir de serveur dhcp, désactive le service...
Marsh Posté le 24-11-2006 à 10:41:48
Merci beaucoup l0ky pour cette réponse complète !! Je ne connaissais pas l'existence de ces "raw sockets".
Effectivement ma question parait bizarre si je ne donne pas d'explication. Je vais expliquer sans non plus entrer dans tous les détails.
Donc pourquoi je veux faire ça, en fait c'est pour une démo un peu particulière au travail. On veut faire voir comment fonctionne le DHCRelay, avec 3 PC Wifi dans la même salle. Du coup, ce que je veux faire, c'est ça :
Client eth1 ------- DHCRelay eth1 ------- Serveur DHCP eth1 |
Comme le client eth1 est à portée direct du serveur (ils sont dans la même salle), je voulais faire un filtrage via netfilter sur le serveur DHCP tout d'abord pour interdire les broadcast venant de l'adresse MAC du client. Ca n'a pas fonctionné, donc après j'ai augmenté les protections pour voir d'où venait le problème (blocage des ports 67 et 68, puis blocage de tout), et donc ça passe encore, mais maintenant j'ai l'explication.
Du coup, comme le filtrage via netfilter ne semble pas possible, comment puis-je faire pour interdire au client de se configurer directement au serveur, et le forcer à passer par le relais ?
Merci beaucoup !!
Marsh Posté le 24-11-2006 à 11:00:24
Ben le plus simpe que je vois c'est de mettre le lien client1/dhcp relay en wifi et le lien RELAY/DHCP serveur en filaire
Pas sur mais je crois qu'il existe une option lors de la compilation de dhcpd pour utiliser des sockets classiques. Ce qui pourrait éventuellement rendre possible le filtrage via netfilter.
j'ai pas le man en tete, mais sinon il est possible que l'on puisse configurer le serveur dhcpd en serveur pour uniquement les relays.
ie: il n'acceptera les DISCOVER/REQUEST/RELEASE... que si il vienne d'un relay. Faut taper dans le dhcpd.conf.
Marsh Posté le 24-11-2006 à 11:16:34
Pour le dhcpd.conf, y'a un manpage ici :
http://www.delafond.org/traducmanf [...] onf.5.html
Et il n'est question ni de relais, ni de raw socket, donc j'ai pas l'impression que ça soit possible par ce biais là malheureusement...
Pour ta première solution c'est sûr que passer par de l'Ethernet solutionnerait le pb, mais le chef va pas être d'accord avec cette solution je pense, étant donné que l'on travaille sur des réseaux Wifi maillés et ad-hoc
Et pour la compilation bah c'est à voir, je sais pas trop comment ça se passe dans la pratique, pour l'instant même google n'a pas l'air d'avoir d'idées sur la question... Si t'as une idée à venir (ou d'autres) n'hésitez pas, en tout cas merci beaucoup pour cette explication j'y vois beaucoup plus clair !
Marsh Posté le 24-11-2006 à 11:18:59
en googlant hier soir, j'étais tomber sur une config qui n'acceptait que le traffic venant de relay DHCP. Bien sûr je ne l'ai pas sauvegarder
Marsh Posté le 24-11-2006 à 11:25:33
arf C'est con ça, ça m'aurait sauvé la vie ! Si tu retrouves ça ça serait cool, sinon j'vais essayer de secouer google pour qu'il me donne la réponse...
Marsh Posté le 23-11-2006 à 16:07:27
Bonjour à tous,
Voilà mon problème est simple : j'aimerais bloquer les requêtes DHCP venant de l'interface eth1 sur mon serveur DHCP.
Au préalable, mon serveur DHCP est donc lancé : /etc/init.d/dhcpd start
Ensuite sur le serveur, j'ai mis les règles :
Là, si je n'ajoute aucune règle, normalement RIEN ne doit passer, n'est-ce pas ? Cela sur toutes les interfaces ??
Car là, de fait, le ping ne passe pas, le traceroute non plus, le SSH non plus, le telnet non plus..... Par contre, les requêtes DHCP passent !!!!! Un petit Ethereal sur le serveur sniffant l'interface eth1, et toutes les requêtes DHCP (broadcast, réponse du serveur...) passent, et le noeud arrive à bien se configurer.
J'ai tenté d'ajouter ça :
Mais ça ne change rien, les requêtes passent toujours.
Qu'en pensez-vous, le problème vient-il du fait que mon serveur DHCP est mal configuré, que se passe-t-il ?
D'avance merci beaucoup, car je n'y comprends plus rien