Restrictions par adresse IP avec IIS 10
Sommaire
I. Présentation
Avoir un ou plusieurs sites web, c’est bien, contrôler les accès c’est encore mieux. Le serveur IIS de Microsoft propose justement d’effectuer des restrictions au niveau des adresses IP et des noms de domaine, de la même manière qu’on peut le faire sous Apache avec la directive "Require IP", ou anciennement « Allow From » et « Deny From » sur les versions d'Apache inférieure à v2.4.
Nous allons voir dans ce tutoriel comment mettre en place ce type de restriction sur un serveur IIS 10, sous Windows Server 2022. Néanmoins, cette méthode est la même depuis des années donc elle s'applique sur les versions précédentes de Windows et d'IIS.
Ces règles sont particulièrement pratiques pour protéger certaines applications qui ne doivent pas être accessibles par n'importe quelle machine. Par exemple, l'accès à PhpMyAdmin pour administrer des bases de données en mode Web.
A. Principe
Avant de vous montrer comment définir ces restrictions, intéressons-nous au principe. Vous allez devoir autoriser ou refuser des accès pour appliquer une restriction, toutefois vous n’allez pas pouvoir faire une règle pour toutes les adresses IP et les noms de domaine possibles sinon vous n’êtes pas quitte… C’est pourquoi il faut définir un mode de fonctionnement pour les restrictions à partir du moment où vous décidez d’en faire.
Du coup, si vous décidez de refuser l’accès à certaines adresses IP il faudra indiquer que toutes les autres adresses IP ont un accès autorisé, question de logique finalement. À l’inverse, si vous indiquez précisément des adresses IP qui ont le droit d’accéder à votre site web, indiquez à IIS qu’il doit refuser pour tout le reste.
Si vous refusez certaines adresses IP et que vous dites à IIS de refuser tout le reste, ça va poser problème et c’est illogique de procéder de cette façon.
B. A quel niveau sont définies les restrictions ?
Il est possible de définir les restrictions sur le serveur web dans sa globalité, du coup les restrictions définies à ce niveau seront appliquées sur tous les sites web de votre serveur IIS. Il est également possible de définir des restrictions site par site, ou deux faire les deux c’est-à-dire des restrictions communes à tous les sites web au niveau du serveur IIS et le reste au cas par cas.
Grâce aux restrictions positionnées au niveau du serveur IIS directement, les sites vont appliquer les restrictions, car il y a une notion d'héritage, comme pour d'autres options.
II. Accès à « Restrictions par adresse IP et domaine »
Pour accéder au module de configuration des restrictions, ouvrez votre gestionnaire IIS et positionnez sur la racine de votre serveur IIS ou sur un site directement, selon où vous souhaitez appliquer vos restrictions.
Une fois que vous y êtes, double cliquez sur l’icône du module « Restrictions par adresse IP et domaine ».
Si vous ne trouvez pas cette icône dans la console IIS, pas de panique ! Il suffit d'ajouter le composant à votre serveur IIS, car il s'agit d'une fonctionnalité optionnelle. Pour cela, c'est simple : ouvrez le Gestionnaire de serveur, cliquez sur "Gérer" puis "Ajouter des rôles et fonctionnalités". Modifiez l'installation de IIS en sélectionnant "IP and Domain Restrictions" (ou l'équivalent en français) et poursuivez jusqu'à la fin de l'assistant pour effectuer l'installation.
En PowerShell, on peut ajouter cette fonctionnalité via la commande suivante (Install-WindowsFeature) :
Install-WindowsFeature -Name Web-IP-Security
III. Ajouter une autorisation
Pour ajouter une autorisation, faites clic droit dans le panneau de droite puis cliquez sur « Ajouter une entrée d’autorisation… » : une fenêtre s’ouvrira. Deux choix s’offrent à vous :
- Adresse IP spécifique : Spécifier une seule adresse IP qui correspond à l’adresse IP que vous autorisez à accéder au(x) site(s). Il est possible d’indiquer aussi un nom de domaine.
- Plage d’adresses IP : Spécifier une adresse IP de réseau et un masque de sous-réseau pour autoriser une plage d’adresses IP correspondante à un réseau spécifique (Exemple : LAN d’entreprise) à accéder à ce site.
Pour confirmer l’ajout, cliquez sur « OK » et recommencez l’opération pour chacune de vos autorisations.
IV. Ajouter un refus
Sur le même principe que pour ajouter une autorisation, faites clic droit dans le panneau de droite et cliquez sur « Ajouter une entrée de refus » et la fenêtre d’ajout apparaîtra. En ce qui concerne les champs à remplir, ce sont les mêmes que pour les autorisations sauf que là c’est pour refuser.
V. Mode de fonctionnement
Cette partie de la configuration est très importante puisque c’est là que vous allez définir si vous refusez ou autorisez tous clients sur lesquels aucune restriction n’est configurée. Toujours via un clic droit, cliquez sur « Modifier les paramètres de fonction ». Voici des explications concernant les paramètres :
- Accès pour les clients non spécifiés : Que fait-on si un client pour lequel aucune restriction n’est configurée tente de se connecter au site web ? On l’autorise ou on le refuse, à vous de choisir, mais restez logique par rapport à ce que vous avez défini au niveau des restrictions.
- Activer les restrictions des noms de domaine : Activer ou noms les restrictions des noms de domaine en plus des adresses IP et plage d’adresses IP.
- Activer le mode proxy : Si vous activez ce mode, les demandes passeront par un serveur proxy que vous devrez définir.
- Refuser le type d’action : Indiquez le type d’action à effectuer lorsqu’une demande est refusée, parmi les 4 choix disponibles (Non autorisé : réponse HTTP 401, Interdit : réponse HTTP 403, Page introuvable : réponse HTTP 404 et Annulé : terminer la connexion HTTP).
VI. Restrictions dynamiques
Les paramètres de restrictions dynamiques permettent à votre serveur IIS de refuser l’accès à certains clients lorsque ceux-ci effectue trop de demande simultanées, par exemple. Ainsi, vous pouvez limiter les risques de subir une attaque de déni de service (DOS) et protégez votre serveur IIS.
Afin de configurer une restriction dynamique, faites clic droit dans le panneau de droite et cliquez sur « Modifier les paramètres de restriction dynamique ». Vous obtiendrez la fenêtre suivante :
Les deux principales options sont :
- Refuser l’adresse IP en fonction du nombre de demandes concurrentes : Si le client effectue plus de n demandes de connexion simultanée, alors on le refuse en l’ajoutant à la liste des adresses IP restreintes. Le paramètre n correspondant au nombre maximal de demandes concurrentes que vous autorisez, si vous activez ce paramètre.
- Refuser l’adresse IP en fonction du nombre de demandes sur une période : Si le client effectue plus de n demande de connexion sur une durée précise, alors on le restreint. Le paramètre n correspondant au nombre maximal de demandes que vous autorisez, si vous activez ce paramètre. Vous devez également définir la période de temps (en millisecondes) utilisez pour vérifier si le client n’excède pas le nombre de demandes autorisées.
VII. Vérification
Afin de vérifier le fonctionnement de la configuration, j’ai refusé les connexions provenant de l’adresse IP « 192.168.100.10 » sur l'un de mes sites (toutes les autres connexions sont autorisées). Lorsque j’accède à ce même site avec le client restreint, un message d’interdiction doit s’afficher.
Voici ce que ça me donne dans la configuration du module IIS :
Lorsque j’accède au site web à partir du client restreint, je suis bien bloqué et obtiens un message d’erreur d’interdiction (une erreur HTTP 403) :