Article

Apache security

Sécurisation Serveur Apache

Technique
3.18min to read
04-07-2024

Sécurisation d'un serveur apache au minima

Pour entamer notre réflexion, concentrons-nous sur les mesures minimales de sécurisation d'un serveur Apache exposé à Internet.

Configuration d'Apache

Il est important de dissimuler la version du serveur Apache dès le départ, et ce, pour des raisons de sécurité évidentes.

On va pour cela éditer le fichier suivant "/etc/apache2/apache2.conf", et ajoutez les deux instances suivantes :

ServerTokens 
ProdServerSignature Off

Pour limiter les effets des attaques DOS/DDOS, il est possible d'agir sur le nombre de connexions simultanées en utilisant les instances MaxClients et MaxKeepAliveRequests, qui permettent de contrôler les connexions persistantes.

Voici un exemple de configuration pour un serveur Apache de petite taille (à placer à la fin de votre fichier apache2.conf).

MaxClients 200
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 10
Timeout 30

Une fois que vous avez effectué la modification, il faut redémarrer Apache2

sudo systemctl restart apache2

Le fichier .htaccess

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 aux répertoires et aux 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 identique à celle des fichiers de configuration principaux. Comme les fichiers ".htaccess" sont lus lors de chaque requête, les ajustements que vous y apportez seront effectifs instantanément. (pas besoin de relancer le service apache2 !)

Par défaut, Apache désactive la prise en charge des fichiers ".htaccess" et "htpasswd". Pour activer cette option, trouvez les lignes suivantes et changez "AllowOverride None" en "AllowOverride All".

<directory /var/www/>
       Options Indexes FollowSymLinks
       AllowOverride All
       Require all granted
</directory>

Une fois que cela est fait, on peut redémarrer le service apache2

sudo systemctl restart apache2

À titre d'exemple, je vais placer ce fichier dans le répertoire principal de mon serveur web. "/var/www/html/"

sudo nano /var/www/html/.htaccess

Et y collé ceci

# Désactiver le listage des dossiers/sous dossiers/fichiers
options-indexes

Une erreur 403 forbidden s'affiche, ce qui est logique, car nous n'avons plus l'autorisation de lister les dossiers et fichiers du serveur web.

Interdire l'accès direct via URL aux types de fichiers demandés.    

Options Indexes
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 pour les erreurs.

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

Protection password

Imaginez que vous ayez établi un répertoire intitulé « administrateur » et qu'il contienne l'ensemble des fichiers administratifs de votre site. Comment éviter que des personnes non autorisées consultent ces pages ?

C'est précisément dans ce cas que ".htaccess / .htpasswd" seront très utiles, car ils nous permettront de mettre en place rapidement une protection par identifiant/mot de passe qui restreindra l'accès à tous les fichiers du répertoire.

Il est nécessaire de générer deux fichiers dans le répertoire "/var/www/html/administrator":

  • .htaccess, le ".htpassword" aura son adresse spécifié dans le texte, qui comportera également d'autres options définissables.

  • .htpass, y sera énuméré les login et mots de passe de chaque individu ayant l'autorisation d'accéder aux pages en question.

Dans ce scénario, les deux fichiers seront créés dans le répertoire /administrator du site web.

sudo nano .htaccess

On y insère :

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

puis on modifie le fichier .htpasss

sudo nano .htpass

Afin de crypter votre mot de passe, vous avez la possibilité d'employer la fonction PHP crypt() ou de vous rendre sur le site web ci-après pour vous simplifier la tâche.

Générateur de mot de passe

admin:motdepassecrypter
# admin, représente un utilisateur quelconque

Tentez de vous connecter à votre espace administrateur

Si les informations de connexion "login/mdp" sont correctes, vous pourrez afficher le contenu du dossier "administrator", à condition d'avoir désactivé l'option "options -indexes" dans le premier fichier ".htaccess".)

Dans le cas inverse, voici l'erreur qui en résulte. Unauthorized

Cet article est maintenant terminé, bien que je n'aie présenté qu'une partie des fonctionnalités, car il en existe beaucoup d'autres. Les fonctionnalités présentées sont cependant les plus renommées

liste des articles