Tag Archives: dhcp

Linux – Mise en place d’un serveur DHCP

Présentation

Le service DHCP (Dynamic Host Configuration Protocol) permet de configurer dynamiquement des hôtes en leurs envoyant des informations sur leur adresse, le routage, les DNS etc. Il n’y a en général qu’un serveur DHCP par segment du réseau, le plus souvent, si un second est présent, il aura comme rôle DHCP relay. Nous ne parlerons pas des DHCP Relay dans cet article.
DHCP est une sur couche de BOOTP (Bootstrap Protocol), quand le client veut contacter le DHCP, c’est BOOTP qui est utilisé pour fournir les informations qui valident sur une durée donnée (un bail)Un client, va donc, au travers de BOOTP, broadcasté le réseau (sur 255.255.255.255 donc) avec une trame contenant, entre autre, sa MAC, le type de request, le port, etc. Il effectue une DHCPDISCOVER, ensuite, une fois que le serveur a detecté un DHCPDISCOVER, il va répondre au client avec un DHCPOFFER (via sa MAC donc, on est toujours en Layer 2, il n’y a pas encore d’IP ici, d’où la limitiation du champ qux subnets) qui contient une première configuration. L’hôte établit cette configuration et renvoi un DHCPREQUEST pour confirmer que la configuration envoyé plus tôt est correcte. Si c’est le cas, le DHCP renvoi un DHCPHACK avec des informations complémentaires (durée de bail par exemple).
Voici une analyse de cette négociation, réalisé sur mon LAN avec Wireshark.

Dans mon cas, pour une question de facilité, mon serveur et mon client sont connecté en mode AdHoc.

Installation

La première chose à faire est d’installer le DHCP, rien de plus simple :
apt-get install dhcpd

DHCPD est donc un daemon. Il se lance via “/etc/init.d/dhcpd start” ou “service dhcpd start” selon la distribution. Il y a deux fichiers importants, /etc/dhcpd.conf et /var/lib/dhcpd/dhcpd.leases. Le premier contient les configurations à envoyer  aux clients, le second, les configurations déjà envoyées.

Configuration.

Nous allons faire deux configurations. Un première avec des hôtes entièrement dynamique, une seconde où l’on voudra que certains hôtes aient toujours la même ip ou une route différente par exemple.
Configuration A – Full Dynamic
Il n’y a qu’un fichier a éditer, /etc/dhcpd.conf
Voici une configuration de “base”, mais pleinement fonctionnelle qui conviendra  aussi  bien à un réseau domestique que d’entreprise. Avant de configurer notre DHCP nous devons connaître certains infos :

Quel est le subnet ?
Quels sont les DNS à utiliser ?
Quel est le nom de domaine transmit au client ?
Le DNS est-il dynamique ?
Quelles sont les durées de bail ?
Quelle est la route par défaut ?
Il y a-t-il des hôtes statiques ?
Quel est le range d’ip disponible a attribué ?

Dans notre exemple :

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quels sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponible a attribué ?
De 192.168.1.2 a 192.168.1.253
192.168.1.1 = DHCP, 192.168.1.254 = Gateway

Ce qui nous donne un fichier de ce type :

ddns-update-style none;  #Pas de mise a jours du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Addresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.254; #route par défaut
option subnet-mask 255.255.255.0; #masque de sous réseau
range 192.168.1.2 192.168.1.253; #Range d'ip a attribué
}

Configuration B – Mixed DHCP

Nous voulons maintenant que certaines machines dans notre réseau aient toujours la même ip. Pour ce faire nous allons préciser une ip par Mac Address. Les hôtes, n’étant pas dans la liste, auront une ip dymanique “classique”. Il nous faut juste nous poser une question supplémentaire,  quels sont les hôtes statiques et quels sont leurs ip ?

Quel est le subnet ?  192.168.1.0/24 (255.255.255.0)
Quel sont les DNS à utiliser ?  194.7.1.4
Quel est le nom de domaine transmit au client ?  404Network.local
Le DNS est-il dynamique ?  Non
Quelles sont les durées de bail ?  21600 secondes
Quelle est la route par défaut ?  192.168.1.254
Il y a-t-il des hôtes statiques ? Non
Quel est le range d’ip disponnible a attribué ?
De 192.168.1.100 a 192.168.1.253
192.168.1.254 = Gateway
192.168.1.1 -> 192.168.1.100 = Hôtes statiques

Quels sont les hôtes statiques ?
00:04:ad:41:5c:98 -> Maxime
00:b1:57:c5:75:ad -> Julie

Quelles sont les ips des hôtes statiques ?
Maxime -> 192.168.1.2
Julie -> 192.168.1.3

Le fichier de configuration devient donc :

ddns-update-style none;  #Pas de mise à jour du DNS
option domain-name "404Netowork.local";  #Domaine
option domain-name-servers 194.7.1.4; #Adresse ip des DNS
default-lease-time 21600; #Bail par défaut
max-lease-time 43200; #Bail envoyé lorsque le client demande un bail plus élevé
#Nous allons ici créer une zone ou spool DHCP
subnet 192.168.1.0 netmask 255.255.255.0
{
 option routers 192.168.1.254; #route par defaut
 option subnet-mask 255.255.255.0; #masque de sous réseau
 range 192.168.100 192.168.1.253; #Range d'ip a attribué
 host Maxime
 {
 hardware ethernet 00:04:ad:41:5c:98;
 fixed-address 192.168.1.2;
 }

 host Julie
 {
 hardware ethernet 00:b1:57:c5:75:ad;
 fixed-address 192.168.1.3;
 }
}

Il ne reste plus qu’à relancer le serveur DHCP pour prendre en compte la nouvelle configuration.
Il se peut que le fichier dhcp.leases ne soit pas créé à l’installation, dans ce cas, le serveur DHCP grognera. Il suffit de le créé avec touch, et le serveur fonctionnera correctement.
Pour la sécurisation de serveurs DHCP contre le DHCP Spoofing (en résumé, se faire passer pour un dhcp et donc, envoyer des informations corrompues aux hôtes), j’ai écris un article pour éviter ce type d’attaque que vous pouvez le lire à cette adresse

DHCP snooping : Défense contre le DHCP spoofing


Un petit article pour vous présenter une parade au dhcp spoofing implémenté sur des switchs cisco.
Cette parade s’apel le DHCP snooping. Elle consiste a mettre en place un liste de port sur le switch sur lequel se trouvent les “trusted dhcp server”.
De cette manière, il sera impossible de rajouter un dhcp sur le LAN.
Tout d’abord, un peux de théorie sur les DHCP.

1. Théorie

Un DHCP est un serveur permettant de configurer l’ip, le netmask, les serveurs dns et la passerelle d’un machine cliente.
Le danger est, dans le cas ou un dhcp externe est apporter au réseau, que les informations envoyé au clients ne sont pas intègre. Par exemple, le dhcp “pirate” peux renseigner comme passerelle du réseau sa propre IP, dans ce cas, tout le trafic des clients transitera par le dhcp “pirate” (MITM), ou alors, renseigner une machine cliente comme gateway ce qui cause premièrement un DoS du réseau, et si le client n’est pas suffisamment puissant pour gérer toutes les requêtes, un crash de la machine gateway.
Voici comment se déroule une transaction DHCP.

1. Le client émet un dhcp discover, le tout se joue en couche 2  vu que le client n’ pas d’ip. Il broadcast donc en FF:FF:FF:FF:FF:FF pour obtenir la liste des serveurs dhcp a proximité.
2. Les serveurs DHCP s’annoncent avec un DHCP OFFER et offre une configuration au client.
3. Le client envoi a tout les serveur dhcp quel serveur il a choisis et envoi donc un DHCP REQUEST
4. Le serveur DHCP ayan été choisis confirme au clietn que sa demande a bien été enregistré.
Tout ces machanismes permettent par exemple, dans le cas ou il y a  deux serveurs DHCP avec chacun le subnet 192.168.1.0/24 de disponible, de se synchronisé . Ainsi si l’ip 192.168.1.2 a été attribué depuis le dhcp A, le dhcp B sera informé que cette ip a été attribué et l’enlèvera de son pool d’adresse disponible.

Imaginons maintenant que un serveur dhcp externe a été apporté au réseau

On voi que le serveur DHCP pirate envoi aussi un DHCP OFFER, ce qui fait qu’il est potentiellement choisissable par la machine cliente.

2. DHCP Snooping

Le dhcp snooping est simple, vu que n’importe qui est autorisé a emttre des DHCP OFFER et ACK, nous allons autoriser que certains ports sur le switch a les émettre.
Ainsi nous aurons une listes des port “trusted” et “untrusted”. Seul les ports Trusted pourront émettre des DHCP OFFER et ACK, ainsi, la machine pirate du shema ci-dessus, n’étant pas sur un port trusted, ne pourra donc pas émettre de DHCP OFFER et ACK.
C’est très simple a mettre en place :

1. Switch(config)# ip dhcp snooping
2. Switch(config)# ip dhcp snooping vlan 3 15
3. Switch(config)# ip dhcp snooping information option
4. Switch(config)# interface fastethernet0/0
5. Switch(config-if)# ip dhcp snooping trust
6. Switch(config-if)# ip dhcp snooping limit rate 50

1. On active le dhcp snoooping
2. On définit sur quels VLAN le dhcp snooping s’appliquera
3. On active l’option 82 du protocole DHCP car le DHCP snooping en a besoin (plus d’infos sur l’option 82) http://www.cisco.com/en/US/docs/ios/12_2t/12_2t2/feature/guide/ftrbeo82.html
Enfin, on définit les interface que l’on veux truster, sur lesquels se trouvent donc les serveurs dhcp. Dans ce cas ci, sur l’interface fa 0/0
4. On rentre dans la configuration de l’interface
5. On la trust
6. On définit le nombre de requête maximal par seconde autorisé.

3. Conclusion

Le DHCP spoofing est encore trop facilement réalisable. Il y a d’autres méthodes de protection hardware ou logiciel, par exemple, definir de manière fixe la MAC address du serveur DHCP, ainsi, le client ne broadcast plus et va directement contacter le serveur DHCP renseigné. Cette protection n’est pas infaillibles et ne protège QUE du dhcp spoofing, pas de l’ip spoofing, l’arp spoofing, etc.
Voici quelques conseils que je donnerais pour améliorer la sécurité :
1. Mettre des ip fixes sur les serveurs.
JE sais, ça parait le B-a-BA, mais ce n’est psa fait partout, certains serveurs ‘optionnels’, sot en ip dynamique…
2. SI vous êtes dans un LAN de quelques machines (moin de 30), configurer les clients avec des ips fixe
3. Bloquer sur le switch les ports non utilisé afin d’interdire l’apport de machines externes
4. Dedier un DHCP pour le VPN et un pour le WIFI et les mettre les clients dans des zones isolé et autement filtré.
5. Rajouter du filtrage par MAC sur les switch.

Voila, tout n’es pas nécessaire, mais le DHCP snooping n’est pas suffisant. Il faut toujours partir du principe que la sécurité totale n’existe pas, la sécurité n’est que la réduction de pertes en cas d’attaques et doit sans cesse être remise en question.

En espérant que ceci vous ai plu ^^