Hyper-V : Protection contre les DHCP malicieux avec DHCP Guard
I. Présentation
Avant de commencer, je tiens à préciser que cette option est disponible depuis Windows Server 2012.
Le service DHCP est omniprésent dans les réseaux d'entreprises afin de distribuer une configuration réseau aux postes clients et même aux serveurs. Généralement, plusieurs serveurs sont présents dans le but d'assurer la disponibilité et la stabilité du service. Ces serveurs géreront des étendues communes et se synchroniseront pour éviter tout doublon.
Imaginez maintenant qu'un serveur DHCP autre que les vôtres vient se connecter à votre réseau, il pourra distribuer des mauvaises configurations IP et cela perturbera fortement votre réseau... D'autant plus que selon le fonctionnement du protocole DHCP, un client négocie avec le premier serveur DHCP qui lui répondra donc il suffit que le serveur DHCP malicieux réponde avant le vôtre et le tour est joué.
Par ailleurs, on peut imaginer un environnement hors production où se situe une machine virtuelle de test exécutant un serveur DHCP, si celle-ci se retrouve malencontreusement connectée au réseau, les perturbations auront lieu également.
Pour cela, Hyper-V intègre une fonctionnalité nommée "DHCP Guard", en français "Protection DHCP", qui lorsqu'elle est active sur une machine virtuelle l'empêche d'envoyer des trames de type "DHCP Offer", et donc de faire une proposition de configuration IP à un client potentiel.
Comment activer cette option ? Peut-on l'activer par défaut ? Peut-on la configurer rapidement sur plusieurs machines virtuelles ? Ce tutoriel répondra à ces questions, allez on commence !
II. Activer cette option
L'option peut être définie sur chaque machine virtuelle, au cas par cas, voyons comment procéder.
Note : N'activez pas cette option sur une machine virtuelle qui est un serveur DHCP légitime, car sinon il ne pourra pas traiter la demande des clients.
Commencez par ouvrir le "Gestionnaire Hyper-V" et sélectionnez une de vos machines virtuelles qui n'a pas à envoyer de trames de type DHCP Offer, autrement dit une machine qui ne joue pas le rôle de serveur DHCP sur votre réseau.
Effectuez un clic droit sur votre machine virtuelle dans l'inventaire et cliquez sur "Paramètres", comme ceci :
Sur la gauche, cliquez sur le "+" au niveau de "Carte réseau" et sélectionnez "Fonctionnalités avancées". Ensuite, la partie de droite affiche les options avancées disponibles, vous trouverez une section nommée "Protection DHCP". Cochez la case "Activer la protection DHCP" et appliquez les paramètres. La configuration de cette VM est terminée.
Il ne reste plus qu'à recommencer l'opération sur les autres machines virtuelles sur lesquelles vous souhaitez activer cette protection.
Note : Pour activer par défaut le DHCP Guard, vous devez spécifier ce paramètre dans un template lorsque vous utilisez System Center Virtual Machine Manager.
III. Activation sur plusieurs machines
Via l'interface graphique, cela peut vite devenir long et ennuyeux d'effectuer la configuration sur chacune de vos VMs. Pour contrer cela, nous allons passer par PowerShell et quelques commandes. Commencez par ouvrir une console PowerShell et à charger le module Hyper-V :
Import-Module Hyper-v
Ensuite, on va commencer par lister l'ensemble des machines virtuelles référencées dans l'inventaire de notre serveur Hyper-V, en ajoutant une colonne qui permet de savoir l'état du paramètre DHCP Guard.
Get-VMNetworkAdapter * | ft VMName,Name,DhcpGuard
On remarque sur la copie d'écran ci-dessous, que, parmi mes 3 VMs une seule dispose d'une protection DHCP active (SRV-01).
Pour activer le DHCP Guard sur l'ensemble des machines virtuelles on utilisera (cela peut être plus intéressant de l'activer partout et de désactiver l'option sur les quelques serveurs DHCP de votre entreprise) :
Set-VMNetworkAdapter * -DhcpGuard On
À l'inverse pour le désactiver sur toutes les machines :
Set-VMNetworkAdapter * -DhcpGuard Off
Si vous souhaitez viser uniquement une ou plusieurs machines virtuelles, remplacez le signe "*" par le nom de la VM. Dans le cas où il y a plusieurs noms à préciser, séparez-les par une virgule.