Recherche de site Web

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.
  • Deny et Allow (obsolète dans les versions ultérieures) : Précédemment utilisé dans les anciennes versions d’Apache mais remplacé par la directive Require.

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.conf ou dans le fichier hôte virtuel (par exemple, /etc/apache2/sites-available/your-site.conf).
  • CentOS/RHEL : /etc/httpd/conf/httpd.conf ou 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.

Articles connexes: