GNU/Linux >> Tutoriels Linux >  >> Linux

10 conseils pour sécuriser votre serveur Web Apache sous UNIX/Linux

Si vous êtes un administrateur système, vous devez sécuriser votre serveur Web Apache en suivant les 10 conseils mentionnés dans cet article.

1. Désactiver les modules inutiles

Si vous envisagez d'installer apache à partir des sources, vous devez désactiver les modules suivants. Si vous faites ./configure –help, vous verrez tous les modules disponibles que vous pouvez désactiver/activer.

  • userdir – Mappage des requêtes vers des répertoires spécifiques à l'utilisateur. c'est-à-dire que ~le nom d'utilisateur dans l'URL sera traduit dans un répertoire du serveur
  • autoindex – Affiche la liste des répertoires lorsqu'aucun fichier index.html n'est présent
  • status – Affiche les statistiques du serveur
  • env – Effacement/réglage des variables ENV
  • setenvif – Placer les variables ENV sur les en-têtes
  • cgi – scripts CGI
  • actions – Déclenchement d'action sur les requêtes
  • négociation – Négociation de contenu
  • alias – Mappage des requêtes sur différentes parties du système de fichiers
  • include – Inclut côté serveur
  • filter – Filtrage intelligent des requêtes
  • version – Gestion des informations de version dans les fichiers de configuration à l'aide d'IfVersion
  • tel quel - types de fichiers tels quels

Désactivez tous les modules ci-dessus comme indiqué ci-dessous lorsque vous faites ./configure

./configure \
--enable-ssl \
--enable-so \
--disable-userdir \
--disable-autoindex \
--disable-status \
--disable-env \
--disable-setenvif \
--disable-cgi \
--disable-actions \
--disable-negotiation \
--disable-alias \
--disable-include \
--disable-filter \
--disable-version \
--disable-asis

Si vous activez ssl et désactivez mod_setenv, vous obtiendrez l'erreur suivante.

  • Erreur :Erreur de syntaxe à la ligne 223 de /usr/local/apache2/conf/extra/httpd-ssl.conf :Commande invalide ‘BrowserMatch’, peut-être mal orthographiée ou définie par un module non inclus dans la configuration du serveur
  • Solution :Si vous utilisez ssl, ne désactivez pas setenvif. Ou, commentez le BrowserMatch dans votre httpd-ssl.conf, si vous désactivez mod_setenvif.

Après l'installation, lorsque vous faites httpd -l , vous verrez tous les modules installés.

# /usr/local/apache2/bin/httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_log_config.c
  mod_ssl.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_dir.c
  mod_so.c

Dans cet exemple, nous avons installé les modules apache suivants.

  • core.c – module de base d'Apache
  • mod_auth* – Pour divers modules d'authentification
  • mod_log_config.c – Journaliser la demande du client. fournit des flexibilités de journal supplémentaires.
  • mod_ssl.c – Pour SSL
  • prefork.c – Pour le module MPM (Multi-Processing Module)
  • httpd_core.c – Module central Apache
  • mod_mime.c – Pour définir les types MIME de document
  • mod_dir.c – Pour la redirection de la barre oblique finale sur les chemins de répertoire. si vous spécifiez url/test/, il va à url/test/index.html
  • mod_so.c – Pour charger des modules lors du démarrage ou du redémarrage

2. Exécutez Apache en tant qu'utilisateur et groupe distincts

Par défaut, apache peut s'exécuter en tant que personne ou démon. Il est bon d'exécuter apache dans son propre compte non privilégié. Par exemple :apache.

Créez un groupe et un utilisateur apache.

groupadd apache
useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache

Modifiez le httpd.conf et définissez l'utilisateur et le groupe de manière appropriée.

# vi httpd.conf
User apache
Group apache

Après cela, si vous redémarrez apache et faites ps -ef, vous verrez qu'apache s'exécute en tant que "apache" (sauf le 1er processus httpd, qui s'exécutera toujours en tant que root).

# ps -ef | grep -i http | awk '{print $1}'
root
apache
apache
apache
apache
apache

3. Restreindre l'accès au répertoire racine (Utilisez Autoriser et Refuser)

Sécurisez le répertoire racine en définissant ce qui suit dans httpd.conf

<Directory />
    Options None
    Order deny,allow
    Deny from all
</Directory>

Dans ce qui précède :

  • Options Aucune – Définissez ceci sur Aucun, ce qui n'activera aucune fonctionnalité supplémentaire facultative.
  • Ordre refusé, autorisé – C'est l'ordre dans lequel les directives « Refuser » et « Autoriser » doivent être traitées. Cela traite d'abord le "refuser" et ensuite "autoriser".
  • Refuser de tous - Cela refuse la demande de tout le monde au répertoire racine. Il n'y a pas de directive Allow pour le répertoire racine. Ainsi, personne ne peut y accéder.

4. Définissez les autorisations appropriées pour les répertoires conf et bin

Les répertoires bin et conf ne doivent être consultés que par les utilisateurs autorisés. C'est une bonne idée de créer un groupe et d'ajouter tous les utilisateurs autorisés à afficher/modifier les fichiers de configuration apache à ce groupe.

Appelons ce groupe :apacheadmin

Créez le groupe.

groupadd apacheadmin

Autoriser l'accès au répertoire bin pour ce groupe.

chown -R root:apacheadmin /usr/local/apache2/bin
chmod -R 770 /usr/local/apache2/bin

Autoriser l'accès au répertoire conf pour ce groupe.

chown -R root:apacheadmin /usr/local/apache2/conf
chmod -R 770 /usr/local/apache2/conf

Ajoutez les membres appropriés à ce groupe. Dans cet exemple, ramesh et john font partie d'apacheadmin

# vi /etc/group
apacheadmin:x:1121:ramesh,john

5. Désactiver la navigation dans l'annuaire

Si vous ne le faites pas, les utilisateurs pourront voir tous les fichiers (et répertoires) sous votre racine (ou n'importe quel sous-répertoire).

Par exemple, s'ils vont sur http://{votre-ip}/images/ et si vous n'avez pas de fichier index.html sous images, ils verront tous les fichiers image (et les sous-répertoires) répertoriés dans le navigateur (tout comme une sortie ls -1). À partir de là, ils peuvent cliquer sur le fichier image individuel pour le visualiser, ou cliquer sur un sous-répertoire pour voir son contenu.

Pour désactiver la navigation dans les répertoires, vous pouvez soit définir la valeur de la directive Options sur "Aucun" ou "-Indexes" . A - devant le nom de l'option la supprimera de la liste actuelle des options appliquées pour ce répertoire.

Les index afficheront une liste des fichiers et sous-répertoires disponibles dans un répertoire du navigateur (uniquement lorsqu'aucun index.html n'est présent dans ce dossier). Ainsi, les index ne devraient pas être autorisés.

<Directory />
  Options None
  Order allow,deny
  Allow from all
</Directory>

(or)

<Directory />
  Options -Indexes
  Order allow,deny
  Allow from all
</Directory>

6. Ne pas autoriser .htaccess

En utilisant le fichier .htaccess dans un sous-répertoire spécifique sous htdocs (ou n'importe où à l'extérieur), les utilisateurs peuvent écraser les directives apache par défaut. Dans certaines situations, ce n'est pas bon et devrait être évité. Vous devez désactiver cette fonctionnalité.

Vous ne devez pas autoriser les utilisateurs à utiliser le fichier .htaccess et à ignorer les directives apache. Pour ce faire, définissez "AllowOverride None ” dans le répertoire racine.

<Directory />
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

7. Désactiver les autres options

Voici les valeurs disponibles pour la directive Options :

  • Toutes les options – Toutes les options sont activées (sauf MultiViews). Si vous ne spécifiez pas la directive Options, il s'agit de la valeur par défaut.
  • Options ExecCGI – Exécuter des scripts CGI (utilise mod_cgi)
  • Options FollowSymLinks – Si vous avez des liens symboliques dans ce répertoire, il sera suivi.
  • Les options incluent – Autoriser les inclusions côté serveur (utilise mod_include)
  • Les options incluentNOEXEC – Autoriser les inclusions côté serveur sans la possibilité d'exécuter une commande ou un cgi.
  • Index des options – Désactiver la liste des répertoires
  • Options Multivues – Autoriser les vues multiples négociées sur le contenu (utilise mod_negotiation)
  • Options SymLinksIfOwnerMatch – Semblable à FollowSymLinks. Mais cela ne suivra que lorsque le propriétaire est le même entre le lien et le répertoire d'origine auquel il est lié.

Ne spécifiez jamais « Toutes les options ». Spécifiez toujours une (ou plusieurs) des options mentionnées ci-dessus. Vous pouvez combiner plusieurs options sur une seule ligne, comme indiqué ci-dessous.

Options Includes FollowSymLinks

Le + et le - devant une valeur d'option sont utiles lorsque vous avez des direcotires imbriqués et que vous souhaitez écraser une option de la directive Directory parente.

Dans cet exemple, pour le répertoire /site, il contient à la fois des inclusions et des index :

<Directory /site>
  Options Includes Indexes
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Pour le répertoire /site/en, si vous avez besoin uniquement des index de /site (et non des inclusions), et si vous souhaitez suivre les liens symboliques uniquement vers ce répertoire, procédez comme suit.

<Directory /site/en>
  Options -Includes +FollowSymLink
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
  • /site aura des inclusions et des index
  • /site/fr aura des index et FollowSymLink

8. Supprimer les modules DSO indésirables

Si vous avez chargé des modules d'objets partagés dynamiques sur apache, ils seront présents dans le fichier httpd.conf sous la directive "LoadModule".

Veuillez noter que les modules apache compilés statiquement ne seront pas répertoriés en tant que directive "LoadModule".

Commentez tous les "LoadModules" indésirables dans le httpd.conf

grep LoadModule /usr/local/apache2/conf/httpd.conf

9. Restreindre l'accès à un réseau spécifique (ou adresse IP)

Si vous souhaitez que votre site soit consulté uniquement par une adresse IP ou un réseau spécifique, procédez comme suit :

Pour autoriser un réseau spécifique à accéder à votre site, indiquez l'adresse réseau dans la directive Autoriser.

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.0.0/24
</Directory>

Pour autoriser une adresse IP spécifique à accéder à votre site, indiquez l'adresse IP dans la directive Autoriser.

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.1.21
</Directory>

10. Ne pas afficher ou envoyer la version d'Apache (Set ServerTokens)

Par défaut, l'en-tête de réponse HTTP du serveur contiendra les versions apache et php. Quelque chose de similaire à ce qui suit. Ceci est nuisible, car nous ne voulons pas qu'un attaquant connaisse le numéro de version spécifique.

Server: Apache/2.2.17 (Unix) PHP/5.3.5

Pour éviter cela, définissez les ServerTokens sur Prod dans httpd.conf. Cela affichera "Serveur :Apache" sans aucune information de version.

# vi httpd.conf
ServerTokens Prod

Voici les valeurs ServerTokens possibles :

  • Prod ServerTokens affiche "Serveur :Apache"
  • Majeure ServerTokens affiche "Serveur :Apache/2"
  • ServerTokens Mineur affiche "Serveur :Apache/2.2"
  • ServerTokens Min affiche "Serveur :Apache/2.2.17"
  • Système d'exploitation ServerTokens affiche "Serveur :Apache/2.2.17 (Unix)"
  • ServerTokens Full affiche "Server:Apache/2.2.17 (Unix) PHP/5.3.5" (Si vous ne spécifiez aucune valeur ServerTokens, c'est la valeur par défaut)

Outre les 10 conseils ci-dessus, assurez-vous de sécuriser votre système d'exploitation UNIX / Linux. Il ne sert à rien de sécuriser votre apache si votre système d'exploitation n'est pas sécurisé. Aussi, gardez toujours votre version apache à jour. La dernière version d'apache contient des correctifs pour tous les problèmes de sécurité connus. Assurez-vous de consulter fréquemment vos fichiers journaux apache.

Lecture supplémentaire sur apache

  • Comment installer Apache 2 avec SSL sur Linux (avec mod_ssl, openssl)
  • 9 conseils pour utiliser Apachectl et Httpd comme un utilisateur avancé
  • XAMPP :installation facile d'Apache, MySQL, PHP, Perl
  • Comment installer ou mettre à niveau la pile LAMP à l'aide de Yum

Linux
  1. Comment configurer un serveur Web Apache

  2. 7 étapes pour sécuriser votre serveur Linux

  3. Trouver les 10 principales adresses IP accédant à votre serveur Web Apache

  4. Installer le serveur Web Apache sur Linux Mint 13 / Linux Mint 14

  5. Migration d'Unix vers Linux

Comment installer le serveur Web Apache sur Linux

Comment héberger un site Web sur un serveur Web Apache

Comment installer le serveur Web Apache sur Alpine Linux

Meilleures pratiques pour sécuriser votre serveur Web Apache

10 conseils de renforcement SSH exploitables pour sécuriser votre serveur Linux

Sécuriser votre serveur Web Apache avec Mod Security