Filtrer les IPs d'un serveur web
Co-écrit avec Frank
Lors de la mis en place d'un serveur web, ou d'un site internet, la sécurité de ces derniers sont souvent limité à leur configuration par défaut. Hors, sur Internet, il existe une quantité phénoménale d'indésirables que l'on souhaiterai repousser de nos serveurs.
Qu'il s'agissent de serveurs compromis ou d'ordinateurs personnels corrompus, il existe de trop nombreux bots malintentionnés, qui vont tenter d'accéder à votre site internet ou au serveur web qui l'héberge.
Les buts de ces hackers sont variés, plus ou moins dangereux, mais quelqu'ils soient, il est préférable de prévenir plutôt que de guérir. Nous vous avions partagé, il y a quelques mois, comment nettoyer un site basé sur Joomla, victime d'un hack. Le but de ce hack reste encore inconnu, mais il est clair que la présence des fichiers véreux n'était pas anodine.
Dans les cas les moins dangereux, les bots tentent simplement de publier des messages sur les différents formulaires. Il s'agit d'une forme de spams, et si, éventuellement les messages sont directement affichés sur le site, cela fera un peu de référencement pour ces sites malicieux au détriment de votre propre site.
Les autres cas sont plus agressifs. Qu'il s'agissent de récupérer les données que contiennent vos sites, d'utiliser les ressources du serveur pour miner des crypto-monnaies, d'utiliser le serveur comme relai pour d'autres attaques, bref, utiliser votre serveur ou votre site pour des actions malveillantes.
La protection de ces derniers est donc une nécessité. Il y a quelques mois, nous avions déjà vu que nous pouvions retirer quelques uns de ces mauvais robots avec un filtre sur les agents utilisateurs. Aujourd'hui, pour passer un niveau au dessus, nous allons voir les bien-faits d'un filtrage par IP.
1/ Déceler et confirmer les adresses malveillantes
Avant de vouloir configurer un filtre IP, il faut commencer par repérer les adresses IP malveillantes.
Le plus simple est de surveiller les comportements malicieux dans les logs du serveur web. Il suffit pour cela de repérer les requêtes qui n'ont rien à voir avec ce que propose votre site internet. Si votre site enregistre les adresses IP des requêtes 404 ou des messages postés sur les formulaires, vous pouvez vous en servir pour compléter votre liste d'IPs filtrées.
Une fois une adresse décelée, vous pouvez la confirmer. A ces adresses IP, nous pouvons, via des services tiers, récupérer d'autres informations, qui peuvent s'avérer utile dans cette chasse aux malveillants. Par habitude, je teste l'adresse IP sur le site AbuseIPDB. Ce site permet d'avoir une multitude d'informations :
- Le fournisseur d'accès ou l'hébergeur
- Le type de connexion, qui permet de savoir s'il s'agit d'un ordinateur domestique ou un serveur
- Le domaine attaché à l'adresse
- Le pays
- Le lieu approximatif
mais surtout, le site donne un niveau de confiance basé sur les rapports d'autres utilisateurs.
Les rapports des autres utilisateurs indiquent aussi les actions malicieuses, ce qui peut vous aider à savoir à quel niveau bloquer l'adresse. Si l'adresse est connue pour faire des ports scans, des attaques DDoS ou d'autres tentatives n'affectant pas uniquement le serveur web, il est préférable de bloquer l'IP au niveau du firewall. Sinon, et si votre site est protégé contre les attaques indiquées, vous pouvez le bloquer au niveau du site internet ou du serveur web pour un peu plus de lisibilité.
Ce site permet aussi de savoir si votre serveur est utilisé pour des actions malveillantes, à vos dépends. Si en indiquant l'adresse IP de votre serveur ou, plus simplement, l'URL de votre site, vous obtenez de mauvais résultat, il faut absolument prendre le temps de voir ce qu'il ne va pas.
Vous pouvez aussi choisir de bloquer toutes les urls d'un pays en particulier. Par exemple, vous pourriez choisir de bloquer les requêtes provenant de Corée du Nord ou de pays connus pour être vecteurs de requêtes malicieuses, telle que la Chine, la Russie ou l'Ukraine. Pour cela, il existe des services qui référencent les adresses IP par pays. Vous pouvez accéder à ces données pour configurer votre serveur.
Nous allons voir, dans la suite cet article, que nous pouvons mettre en place un filtrage d'IP, à différents niveaux d'un serveur web.
Si le fonctionnement d'un serveur web n'est pas un évidence pour vous, je vous invite à relire l'article que nous avions déjà co-écrit, avec Frank, sur le sujet. Il faut juste ajouter une couche système sous tout cela, car elle est d'une certaine importance pour nos propos du jour.
2/ Filtrage au niveau système.
Le filtrage au niveau système est le filtrage le plus efficace, car il est celui qui limitera le plus les risques. Cela se fait avec un firewall, qu'il faut évidemment configurer.
Cette option n'est disponible que sur un serveur dédié. Sur un hébergement mutualisé, vous ne disposerez, en aucun cas, de la possibilité de configurer le firewall.
Si une requête provient d'une adresse filtrée, elle sera bloquée par le firewall, et elle n'ira pas plus loin. Comme il s'agit de la couche la plus basse de votre serveur web, les autres applications, à savoir, le serveur web et les sites internet n'en sauront rien. Avec un filtrage à ce niveau, tous les sites ainsi que les autres services réseaux de votre serveur sont protégés (contre les attaques provenant des IPs filtrées).
La configuration d'un firewall doit être réalisée avec précaution. Car, en cas de mauvaise manipulation, vous pourriez vous retirer votre propre accès, ou pire tout accès au serveur, ce qui serait catastrophique.
3/ Filtrage au niveau server web
Entre le système et le site internet se trouve le serveur web. Il est tout à fait possible d'activer un filtrage à ce niveau, selon les capacités du serveur web que vous utilisez.
Comme nous avions pu le voir précédemment, Apache httpd est le serveur web qui vient, en standard, avec macOS. C'est aussi le serveur web le plus utilisé sur Linux, même si Nginx lui grignote, peu à peu, des parts de marché.
Avec Apache httpd, il est possible d'activer un filtrage IP au niveau de la configuration générale. Cela permettra de protéger tous les sites. Il est aussi possible de mettre des règles dans le ou les fichiers .htaccess pour protéger les sites un à un. Sur un hébergement mutualisé, cela sera votre seule possibilité à ce niveau là, si votre hébergeur permet les fichiers .htaccess et les règles de filtrage.
Le filtrage se fait grâce aux modules mod_authz_core et mod_authz_host d'Apache.
Voici un exemple pour bloquer une adresse bien particulière, par exemple, 10.11.12.13. Il faut autoriser toutes les adresses, puis bloquer celle que l'on souhaite.
Require all granted
Require not ip 10.11.12.13
Vous pouvez aussi bloquer plusieurs adresses, en listant, séparées avec une espace, ou sur plusieurs lignes.
Require all granted
Require not ip 10.11.12.13 10.11.12.14 10.11.12.15
Require not ip 10.11.12.16 10.11.12.17
Pour bloquer toutes les adresses d'un même sous-réseau, vous pouvez bloquer un ensemble réseau/masque de sous-réseau, par exemple
Require all granted
Require not ip 10.11.12.0/255.255.255.0
ou bloquer les mêmes adresses via une spécification CIDR
Require all granted
Require not ip 10.11.12.0/24
Mais Apache httpd ne se limite pas à cela, il est possible d'aller beaucoup plus loin en utilisant le module mod_security. Il permet un filtrage plus fin sur le contenu des requêtes http.
4/ Filtrage au niveau du site internet
Le filtrage au niveau du site internet est la solution la plus facile à mettre en place. En effet, vous disposez normalement de tous les accès pour mettre en place un filtrage. Et il est ensuite bien plus facile de lire le résultat du filtrage sur un site internet que depuis la console de votre serveur.
Si votre site internet est un développement personnel, vous devrez créer votre propre système de filtrage, ce qui n'est vraiment pas très compliqué.
Dans le cas de l'utilisation d'un CMS, il suffit que ce dernier dispose d'un module à activer et configurer votre filtre IP sur votre serveur.
skymac.org est bati sur le CMS CaMykS qui dispose, entre autre, d'un module de filtrage IP. Le module en question est d'ailleurs activé sur le site. Voici une capture de l'interface des réglages du filtre.
Une fois le filtrage activé et configuré, il suffit d'aller voir dans les journaux du site pour en voir le résultat.