From 5fa3bdeb5fb537d840180d29230dbd37b69e02b0 Mon Sep 17 00:00:00 2001 From: shirenn Date: Thu, 22 Jul 2021 09:33:06 +0200 Subject: [PATCH] [critical/networking] Ajout de isc-dhcp-server.md --- critical/networking/isc-dhcp-server.md | 125 +++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 critical/networking/isc-dhcp-server.md diff --git a/critical/networking/isc-dhcp-server.md b/critical/networking/isc-dhcp-server.md new file mode 100644 index 0000000..db1a11a --- /dev/null +++ b/critical/networking/isc-dhcp-server.md @@ -0,0 +1,125 @@ +# ISC-DHCP-SERVER +ISC-DHCP-SERVER est une implémentation du protocole DHCP qui permet à un hôte +via une requète DHCP au serveur de récupérer une adresse IP, des informations à +propos des dns et l'adresse de la passerelle. Il est actuellement un peu +vieillisant mais il est très robuste, il est envisagé de le remplacer par son +successeur kea quand il sera plus stable. + +## Principe +Le protocole DHCP utilise le transport UDP et les ports 67 du serveur et 68 du +client. + +### Configuration initiale +Le protocole DHCP fonctionne de la manière suivante : + 1. le client qui cherche à configurer son interface réseaux envoie une requète + DHCPDISCOVER sur le lien en broadcast avec comme adresse cible 255.255.255.255 + en spécifiant son adresse MAC dans la requète + 1. le serveur vérifie s'il est configuré pour répondre au client : + - si ce n'est pas le cas il lui renvoie un DHCPDECLINE + - sinon il lui fait une offre cohérente par rapport à sa configuration et + son état actuel via un paquet DHCPOFFER + 1. le client lui répond avec une requète DHCPREQUEST dans lequel il précise + l'adresse qu'il souhaiterait que le serveur dhcp lui alloue + 1. le serveur statue finalement sur l'adresse qu'il alloue effectivement au + client dans un paquet DHCPACK où il précise en plus de l'adresse des options + configurations supplémentaires comme l'adresse des serveurs de noms ou + l'adresse de la passerelle. Il précise aussi pour combien de temps il + réalise cette allocation (on parle de bail ou de lease). + +### Rafraichir le bail +Au bout du temps configuré par le serveur DHCP, il est possible pour le client +de demander au serveur de renouveller l'allocation de l'adresse s'il l'utilise +encore. Pour cela, il se contente de reprendre à partir de la troisième étape +précédente. + +### Filtrage et protection +Attention, il n'est pas rare qu'on composant actif (un switch par exemple) sur +le lien dispose par défaut de fonctionnalité bloquant par sécurité le traffic +dhcp. C'est une option de sécurité désactivable. Il est aussi possible parfois +d'utiliser cette fonctionnalité à notre avantage pour améliorer la sécurité de +notre infrastructure en précisant l'adresse de notre serveur dhcp permettant au +switch de bloquer les acquittements dhcp excepté celle provenant de nos +serveurs. + +Certains switchs permettent aussi de configurer certains ports qu'il interdit au +machines derrière de communiquer avec une autre adresse que celle qu'elles ont +récupéré par dhcp. + +## Installation +On se contente de tirer le logiciel des repository debian `sudo apt install +isc-dhcp-server`. + +## Configuration + +La page de manuel détaillant les options de configurations de radvd est +consultable en utilisant `man 5 dhcpd.conf`. Le ficihier de configuration +principale se trouve dans `/etc/dhcp/dhcpd.conf` et un fichier de configuration +additionel se trouve dans `/etc/default/isc-dhcp-dserver`. + +### /etc/dhcp/dhcpd.conf +Le logiciel se configure en fonction des plages de sous-réseaux qu'on souhaite +que le serveur dhcp administre. Il permet en plus de préciser des options de +configurations par défaut et des options de configuration générale. Un sous +réseau se définit dans un bloc `subnet` pour lequel on précise le sous-réseau, +le masque associé et l'interface sur laquelle il servira ces requètes : +``` +subnet 100.64.0.0 netmask 255.255.0.0 { + interface "ens23"; +} +``` +Il y a deux manières (utilisées au crans) de régler comment le serveur dhcp +alloue des ips à ces clients. La première est de lui donner dans un fichier +externer une liste d'association ip MAC au format suivant : +``` +host gulf.cachan-adh.crans.org { + hardware ethernet 02:65:6C:01:01:01; + fixed-address 185.230.76.12; +} + +``` +et de préciser l'option suivante dans le bloc de configuration du sous-réseaux. +``` +include "/var/local/services/dhcp/generated/dhcp.adh.crans.org.list"; +``` +Les clients présents dans cette liste seront alors considéré comme connus par le +serveur dhcp. Pour les clients qu'il ne connait pas il peut alors décider de les +accepter ou de les refuser en précisant soit `allow unknown-clients;` soit `deny +unknown-clients;` dans le bloc de sous-réseaux. + +L'autre manière de procéder est de lui laisser gérer lui même l'allocation des +adresses ips à utiliser en lui précisant simplement dans quels plages il a le +droit de venir se servir, pour cela on précise l'option suivante dans le bloc : +``` +pool { + range 100.65.1.0 100.65.255.254; +} +``` +Vu qu'a priori les clients ne sont pas connus, il faut assez fréquemment +préciser en conjoncure de cette option l'option `allow unknown-clients;`. + +Il reste ensuite à régler la durée pour laquelle les adresses sont alloués : +``` + default-lease-time 600; + max-lease-time 7200; +``` +Ainsi que les options de configuration réseaux a passé au client : +``` + option subnet-mask 255.255.0.0; # Précise le sous-réseaux dans lequel l'adresse assignée se trouve + option broadcast-address 100.64.255.255; # Précise l'adresse de broadcast que le client doit configurer + option routers 100.64.0.99; # Précise l'adresse de la passerelle + option domain-name-servers 100.64.0.101,100.64.0.102; # Précise l'adresse des serveurs de noms + option domain-name "adh-nat.crans.org"; # Précise le nom de domaine de l'hote + option domain-search "adh-nat.crans.org"; # Précise la liste de recherche par défaut pour les fqdn +``` + +### /etc/default/isc-dhcp-server +Ce fichier contrôle les options utilisées pour lancer le daemon isc-dhcp-server. +Dans notre cas on se contente de préciser sur quels interfaces le serveur +devrait écouter en ipv4, mais il est possible de préciser d'autres options. +``` +INTERFACESv4="ens22 ens23 ens1 enp1s3" +``` + +Attention pour que le serveur démarre effectivement, il faut que interfaces +listées ici soit bien démarrées et dispose d'une ipv4, sinon celui-ci refusera +de se lancer.