Comment accorder ou refuser l’accès à des sites Web sur le serveur Apache
Apache est l’un des serveurs Web les plus utilisés au monde, offrant une plate-forme robuste et flexible pour l’hébergement de sites Web.
Lorsque vous gérez un site Web, vous devrez peut-être contrôler qui peut accéder à certaines ressources ou à des sites Web entiers. Par exemple, vous pouvez bloquer des adresses IP spécifiques ou autoriser l’accès uniquement à partir de certaines régions ou de certains réseaux. Apache rend cela possible à l’aide d’une fonctionnalité appelée contrôle d’accès.
Dans ce guide, nous allons passer en revue les étapes permettant d’autoriser ou de refuser l’accès aux sites Web dans Apache à l’aide d’une configuration simple et lisible par l’homme.
Principes de base du contrôle d’accès Apache
Apache utilise deux directives principales pour contrôler l’accès :
Exiger: cette option est utilisée pour autoriser l’accès à certains utilisateurs, adresses IP ou groupes.DenyetAllow(obsolète dans les versions ultérieures) : Précédemment utilisé dans les anciennes versions d’Apache mais remplacé par la directiveRequire.
Dans les versions plus récentes d’Apache (2.4 et ultérieures), la directive Require est le principal moyen de gérer les contrôles d’accès.
Étape 1 : Modifier le fichier de configuration Apache
Les fichiers de configuration d’Apache se trouvent à différents endroits en fonction de votre système.
Par exemple:
- Ubuntu/Debian :
/etc/apache2/apache2.confou dans le fichier hôte virtuel (par exemple,/etc/apache2/sites-available/your-site.conf). - CentOS/RHEL :
/etc/httpd/conf/httpd.confou le fichier hôte virtuel (par exemple,/etc/httpd/conf.d/votre-site.conf).
Utilisez un éditeur de texte comme nano ou vi pour modifier ces fichiers.
Étape 2 : Configurer le contrôle d’accès à l’aide de la directive require
La directive Require spécifie qui est autorisé ou refusé l’accès. Examinons des exemples d’autorisation et de refus d’accès.
Exemple 1 : Refuser l’accès à partir d’adresses IP spécifiques
Pour refuser l’accès à partir d’adresses IP spécifiques, utilisez la directive Require not.
Par exemple, pour bloquer l’adresse IP 192.168.1.100 :
<Directory /var/www/html>
Require all granted
Require not ip 192.168.1.100
</Directory>
Dans ce cas :
Exiger que tout soit accordé: autorise l’accès à toutes les adresses IP.Ne nécessite pas l’adresse IP 192.168.1.100: Refuse l’accès à l’adresse IP spécifiée.
Exemple 2 : Autoriser l’accès uniquement à des adresses IP spécifiques
Si vous souhaitez autoriser l’accès uniquement à une adresse IP spécifique ou à une plage d’adresses IP, utilisez ce qui suit :
<Directory /var/www/html>
Require ip 192.168.1.0/24
</Directory>
Ici, l’adresse IP requise 192.168.1.0/24 n’autorise l’accès qu’aux adresses IP comprises entre 192.168.1.0 et 192.168.1.255 (une plage de réseau local courante).
Exemple 3 : Refuser l’accès à tout le monde sauf à des adresses IP spécifiques
Vous pouvez refuser l’accès à tout le monde, à l’exception d’une certaine adresse IP ou d’un groupe d’adresses IP.
<Directory /var/www/html>
Require all denied
Require ip 192.168.1.10
</Directory>
Dans ce cas :
Exiger que tout soit refusé: bloque l’accès à tout le monde.Nécessite l’adresse IP 192.168.1.10: Autorise l’accès uniquement à l’adresse IP 192.168.1.10.
Exemple 4 : Restreindre l’accès par nom d’hôte
Vous pouvez également restreindre l’accès en fonction des noms d’hôte. Par exemple, si vous souhaitez autoriser l’accès uniquement aux utilisateurs d’un domaine spécifique (comme example.com), vous pouvez utiliser :
<Directory /var/www/html>
Require host example.com
</Directory>
Cela permettrait uniquement aux visiteurs de example.com d’accéder au site Web.
Étape 3 : Bloquer des pays entiers dans Apache
Pour bloquer le trafic en provenance de pays spécifiques, vous devez installer un module supplémentaire appelé mod_maxminddb, qui utilise une base de données GeoIP pour déterminer le pays en fonction de l’adresse IP du visiteur.
Installer mod_maxminddb sous Linux
Pour utiliser mod_maxminddb module, vous devez l’installer et le configurer.
Sur Ubuntu/Debian, exécutez :
sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
Sur CentOS/RHEL, exécutez :
sudo yum install epel-release
sudo yum install libmaxminddb libmaxminddb-devel mmdb-bin httpd-devel
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c
Télécharger la base de données MaxMind GeoIP
MaxMind fournit une base de données GeoLite2 gratuite que nous pouvons utiliser pour déterminer le pays en fonction des adresses IP.
tar -xvzf GeoLite2-Country.tar.gz
sudo mkdir -p /usr/share/GeoIP
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/
Configurer Apache pour utiliser mod_maxminddb
Maintenant, nous devons dire à Apache d’utiliser le module mod_maxminddb et la base de données GeoIP.
sudo nano /etc/apache2/apache2.conf # On Ubuntu/Debian
sudo nano /etc/httpd/conf/httpd.conf # On CentOS/RHEL
Ajoutez la configuration suivante pour activer mod_maxminddb et spécifiez le chemin d’accès à la base de données GeoIP :
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>
Ajouter un contrôle d’accès basé sur le pays
Maintenant que le module est configuré, vous pouvez l’utiliser pour bloquer ou autoriser l’accès en fonction du pays du visiteur. Par exemple, pour bloquer l’accès des utilisateurs en Chine (CN) et en Russie (RU), utilisez cette configuration dans votre fichier d’hôte virtuel Apache :
<Directory /var/www/html>
SetEnvIf MM_COUNTRY_CODE CN BlockCountry
SetEnvIf MM_COUNTRY_CODE RU BlockCountry
Require all granted
Require not env BlockCountry
</Directory>
Après avoir ajouté les nouvelles configurations, redémarrez Apache pour appliquer les modifications :
sudo systemctl restart apache2 # On Ubuntu/Debian
sudo systemctl restart httpd # On CentOS/RHEL
Pour confirmer que le module est correctement installé, vous pouvez vérifier si mod_maxminddb est chargé dans Apache :
apachectl -M | grep maxminddb
S’il est chargé correctement, vous devriez voir une sortie similaire à :
maxminddb_module (shared)
Conclusion
Le contrôle de l’accès à votre site Web est un aspect essentiel de la gestion de la sécurité et des fonctionnalités de votre serveur Web. Les fonctionnalités de contrôle d’accès d’Apache vous permettent d’autoriser ou de refuser l’accès en fonction de l’adresse IP, du nom d’hôte ou même de l’emplacement géographique.
Qu’il s’agisse de bloquer des robots, de restreindre les ressources internes ou de protéger votre site Web contre les utilisateurs non autorisés, Apache simplifie et efficace la mise en œuvre de ces contrôles.