Durcir la configuration de son serveur Apache2

Publié par Geoffrey Sauvageot-Berland le

Hello 🙂 Dans cet article nous allons aborder la sécurité de Apache2, par l’intermédiaire de son fichier de configuration apache2.conf , et des fichiers spéciaux que nous allons découvrir plus bas.

Fichier de configuration apache2

Commençons par « les bases » : Pour des raisons de sécurités évidentes , il est nécessaire de masquer la version d’Apache.

Éditez le fichier suivant /etc/apache2/apache2.conf , et ajoutez les deux instances suivantes :

ServerTokens Prod
ServerSignature Off

Il est possible de tenter de limiter la portée des attaques de type DOS/DDOS (limiter le nombre de connexions simultanées) avec les instances MaxClients et MaxKeepAliveRequests (nb de connexions persistantes)

Voici un exemple pour « un petit serveur » (à placer à la fin de votre fichier apache2.conf)

MaxClients 200
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10
Timeout 30  

Une fois que vous avez effectué ces modifications, il faut relancer apache2.

systemctl restart apache2 

Les fichiers .htaccess et .htpasswd

Apache permet la gestion décentralisée de la configuration via des fichiers spéciaux placés dans l’arborescence du site web. Ces fichiers spéciaux se nomment en général .htaccess / .htpasswd.

Les directives placées dans les fichiers .htaccess s’appliquent au répertoires et sous-répertoires dans lequel vous avez placé ce fichier. Il donne donc la possibilité de personnaliser la configuration d’apache2 « à la carte » en fonction des sous répertoires.

La syntaxe des fichiers .htaccess est la même que celle des fichiers de configuration principaux. Comme les fichiers .htaccess sont lus à chaque requête, les modifications de ces fichiers prennent effet immédiatement. (Pas besoin de relancer le service apache2 !)

Apache désactive par défaut, la prise en charge des fichiers .htaccess / htpasswd, pour réactiver cette option, localisez les lignes suivantes et remplacer l’instance AllowOverride None, par AllowOverride All

Une fois que cela est fait, redémarrez le service apache2 😉

systemctl restart apache2

Comme exemple, je vais créer ce fichier à la racine de mon serveur WEB : /var/www/html

nano /var/www/html/.htaccess

# Désactiver le listage des dossiers / sous dossiers / fichiers ( # "index of x")
options -indexes

Nous obtenons une erreur 403 forbidden, et c’est normal, car nous n’avons plus le droit de lister les fichiers dossiers du serveur web. Pour me faciliter la vie, la suite du tutoriel ne prendra plus en compte l’interdiction du listage des dossiers / fichiers. J’ai donc enlever la directive option -indexes de mon fichier .htaccess. Si votre serveur est exposé sur internet ou accessible à un grand nombre d’utilisateurs, je vous recommande fortement d’activer cette option.

Interdire l’accès direct via URL (« hotlink ») aux types de fichiers suivants :

RewriteEngine on
RewriteRule .*\.(rar|exe|mp3|swf|psd|txt|tgz|csv|zip)$ http://votredomain.com [R,NC]
# si on tente d'y accéder, apache2 redirigera la requête vers la racine de votre Serveur WEB : http://votredomain.com
# L'instruction doit être sur une ligne 

Utiliser une page dédiée, et non l’erreur par défaut 404 / 403 …

# Dans ce cas précis, il faudra upluader vos "pages d’erreurs, à la racine de votre serveur WEB 
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html

Rediriger un dossier vers un autre dossier / serveur web

# Rediriger une req http de http://domain.com/private vers http://domain.com/
RedirectMatch 301 ^/private/.* http://domain.com

Protéger un répertoire spécifique !

Supposons que vous ayez créé un dossier « administrator » dans lequel il y a tous les fichiers d’administration de votre site. Comment empêcher que n’importe qui accède à ces pages ?
C’est là que .htaccess / .htpasswd vont bien nous aider : on peut très facilement créer une protection par login/mot de passe qui empêche l’accès à tous les fichiers du dossier.

Il va falloir créer deux fichiers dans /var/www/html/administrator :

  • .htaccess (Et oui un nouveau !)? Il contiendra l’adresse du.htpasswdet quelques autres options que vous pourrez définir
  • .htpasswd contiendra une liste de logins/mots de passe, pour chaque personne autorisée à accéder aux pages !

Pour cet exemple, les deux fichiers vont être créer dans le dossier /administrator du site web.

touch .htaccess .htpasswd
nano .htaccess
AuthName "Access is restricted !"
AuthType Basic
AuthUserFile "/var/www/html/administrator/.htpasswd"
Require valid-user
nano .htpasswd

Pour crypter votre mot de passe, utiliser la fonction PHP crypt() ou bien alors vous pouvez utiliser le site suivant qui permet de vous faciliter la tâche… : https://www.web2generators.com/apache-tools/htpasswd-generator

admin:$apr1$oey1g5xd$7SqZBVFfhjWmU41JImoYW0
# admin, représente un utilisateur quelconque 

Essayer d’accéder à votre dossier administrator :

Si le couple login/mdp est correct, vous allez pouvoir visualiser le contenu du dossier administrator (à condition d’avoir desactiver l’option options -indexes dans le premier fichier .htaccess 🙂 )

En revanche, voici l’erreur obtenu dans le cas contraire !

Voilà, cet article est finit ! Bien sur, ce que je vous ai présenté ne représente pas la totalité des fonctionnalités, Il y en a plein d’autres, mais celle-ci sont les plus connus.

À bientôt 🙂

Brlndtech


En savoir plus sur Le Guide Du SecOps • LGDS

Subscribe to get the latest posts sent to your email.


Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

En savoir plus sur Le Guide Du SecOps • LGDS

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Poursuivre la lecture