Bloquer les requêtes DHCP avec iptables

Bloquer les requêtes DHCP avec iptables - réseaux et sécurité - Linux et OS Alternatifs

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 :
 

Code :
  1. #Mise à 0 de toutes les règles de pare-feu
  2. iptables -F
  3. iptables -X
  4. #Politique "DROP", on supprime par défaut les paquets
  5. iptables -P INPUT DROP
  6. iptables -P OUTPUT DROP
  7. iptables -P FORWARD DROP


 
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 :
 

Code :
  1. #blocage des ports DHCP 67 et 68
  2. iptables -A INPUT -p udp --sport 67:68 --dport 67:68 -j DROP


 
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

Reply

Marsh Posté le 23-11-2006 à 16:07:27   

Reply

Marsh Posté le 23-11-2006 à 16:43:38    

Je pense que tu aurais du poster sur OSR :(


---------------
"I intend to live the first half of my life.I don't care about the rest."Errol Flynn."The difference between genius and stupidity is that genius has its limits."Albert Einstein
Reply

Marsh Posté le 23-11-2006 à 16:51:25    

Pas la bonne section. Je déplace.

Reply

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)

Reply

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.


Message édité par l0ky le 23-11-2006 à 18:32:27
Reply

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 !!


Message édité par Tchek14 le 23-11-2006 à 18:45:44
Reply

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...


Message édité par l0ky le 23-11-2006 à 19:31:34
Reply

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...  :pt1cable:  
 
Merci d'avance !  :jap:

Reply

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 ?


Serveur DHCP eth1 ------------ SWITCH ----------------- eth1 Client


 
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
    eth0
     |
     |
   autres client en DHCP


 
il faut que tu dises a dhcpd de n'écouter que sur eth0 !

Reply

Marsh Posté le 24-11-2006 à 10:33:05    

Tchek14 a écrit :


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...  


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...) [:spamafote]

 

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... [:spamafote]


Message édité par l0ky le 24-11-2006 à 10:35:10
Reply

Marsh Posté le 24-11-2006 à 10:33:05   

Reply

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 !!


Message édité par Tchek14 le 24-11-2006 à 10:42:30
Reply

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
 
[:spamafote]
 
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.

Reply

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...  :cry:  
 
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 :D
 
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 !

Reply

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 [:god]

Reply

Marsh Posté le 24-11-2006 à 11:25:33    

arf [:spamafote] 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...
 
[:athome]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed