Comment sécuriser un serveur Apache ?

259
Partager :

Nous sommes tous très familiers avec le serveur web Apache , c’est un serveur web très populaire pour héberger vos fichiers web ou votre site Web sur le web. Voici quelques liens qui peuvent vous aider à configurer le serveur Web Apache sur votre boîte Linux.

Conseils de sécurité et de durcissement Apache

Lire également : Comment savoir si nous avons été bloqués par SMS ?

  1. Installer le serveur Web Apache
  2. Configurez votre site Web dans votre Linux Box

Ici, dans ce tutoriel, je vais couvrir quelques conseils principaux pour sécuriser votre serveur web. Avant d’appliquer ces modifications à votre serveur Web, vous devriez avoir quelques bases du serveur Apache.

  1. Répertoire racine du document : /var/www/html ou /var/www
  2. Fichier de configuration principal : /etc/httpd/conf/httpd.conf (RHEL/Centos/Fedora) et /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Port HTTP par défaut : 80 TCP
  4. Port HTTPS par défaut : 443 TCP
  5. Testez les paramètres et la syntaxe de votre fichier de configuration : httpd -t
  6. Accès aux fichiers journaux du serveur Web : /var/log/httpd/access_log
  7. Fichiers journaux des erreurs du serveur Web : /var/log/httpd/error_log

1. Comment masquer la version Apache et l’identité du système d’exploitation des erreurs

Lorsque vous installez Apache avec le programme d’installation source ou tout autre package comme yum , il affiche la version de votre serveur Web Apache installée sur votre serveur avec le nom du système d’exploitation de votre serveur dans Erreurs . Il affiche également les informations sur les modules Apache installés sur votre serveur.

A lire en complément : Comment supprimer les fichiers indésirables Avast ?

Dans l’image ci-dessus, vous pouvez voir qu’ Apache affiche sa version avec le système d’exploitation installé sur votre serveur. Cela peut constituer une menace majeure pour la sécurité de votre serveur Web ainsi que pour votre boîte Linux. Pour empêcher ApacheAfficher la version Apache de ne pas afficher ces au monde, nous devons apporter quelques changements dans le fichier de configuration principal Apache.

Ouvrez le fichier de configuration avec l’éditeur vim et recherchez « ServerSignature« , par défaut On. Nous devons Off ces signature de serveur et la deuxième ligne « ServerTokens Prod  » dit Apache de retourner seulement Apache comme produit dans l’en-tête de réponse du serveur sur la requête de chaque page, Il supprime le système d’exploitation, informations de version majeure et mineure.

# vim /etc/httpd/conf/httpd.conf (RHEL/Centos/Fedora) # vim /etc/apache2/apache2.conf (Debian/Ubuntu) ServerSignature désactivée Prod ServerTokens # service httpd redémarrage (RHEL/Centos/Fedora) # service apache2 redémarrage (Debian/Ubuntu)

Masquer la version Apache 2. Désactiver l’annuaire

Par défaut, Apache répertorie tout le contenu du répertoire racine du document en l’absence de fichier d’index . S’il vous plaît voir l’image ci-dessous.

Nous peut désactiver la liste des répertoires à l’aide de la directive Options dans le fichier de configuration d’un répertoire spécifique. Pour cela, nous devons faire une entrée dans le fichier httpd.conf ou apache2.confListe du répertoire Apache .

Options -Index

Masquer la liste des annuaires Apache 3. Continuer à mettre à jour Apache régulièrement

La communauté des développeurs Apache travaille en permanence sur les problèmes de sécurité et publie sa version mise à jour avec de nouvelles options de sécurité . Il est donc toujours recommandé d’utiliser la dernière version d’ Apache comme serveur web.

Pour vérifier la version d’Apache : Vous pouvez vérifier votre version actuelle avec la commande httpd -v .

# httpd -v Version du serveur : Apache/2.2.15 (Unix) Serveur construit : Aug 13 2013 17:29:28 Vous pouvez mettre à jour votre version à l’aide de la commande suivante.

Il est également recommandé de garder votre noyau et votre système d’ exploitation # miam mise à jour httpd # apt-get installer apache2 à jour vers les dernières versions stables si vous n’exécutez aucune application spécifique fonctionnant uniquement sur un système d’exploitation ou un noyau spécifique.

4. Désactiver les modules in

Il est toujours bon de minimiser les chances d’être victime d’une attaque Web. Il est donc recommandé de désactiver tous les modules qui ne sont pas utilisés actuellement. Vous pouvez lister tous les modules compilés du serveur Web, en utilisant la commande suivante.

Ci-dessus est la liste des modules qui sont activés par défaut mais souvent pas nécessaires : mod_imap, mod_include,mod_info,mod_userdir,mod_autoindex. Pour désactiver le module particulier, vous pouvez insérer un « # # grep LoadModule /etc/httpd/conf/httpd.conf # doivent placer les lignes `LoadModule’ correspondantes à cet emplacement afin que le # LoadModule foo_modules/mod_foo.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_alias_modules/mod_authn_alias.so LoadModule authn_anon_modules/mod_authn_anon.so LoadModule authn_dbm_modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_dbm_modules/mod_authz_dbm.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_modules/mod_authnz_ldap.so LoadModule include_modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_modules/mod_logio.so LoadModule env_modules/mod_env.so LoadModule ext_filter_module modules/mod_ext_filter.so …  » au début de cette ligne et redémarrer le service.

5. Exécuter Apache en tant qu’utilisateur et groupe distincts

Avec une installation par défaut, Apache exécute son processus avec aucun utilisateur ou démon . Pour des raisons de sécurité, il est recommandé d’exécuter Apache dans son propre compte non privilégié . Par exemple : http-web .

Maintenant, vous devez dire à Apache de fonctionner avec ce nouvel utilisateur et pour ce faire, nous devons faire une entrée dans /etc/httpd/conf/httpd.conf Créer un utilisateur et un groupe Apache # groupadd http-web # useradd -d /var/www/ -g http-web -s /bin/nologin http-web et redémarrer le service.

Ouvrez /etc/httpd/conf/httpd.conf avec l’éditeur vim et recherchez des mots clés « Utilisateur » et « Groupe » et là, vous devrez spécifier le nomd’utilisateuret lenom de groupe à utiliser.

Utilisateur http-web Groupe http-web 6. Utiliser Autoriser et Refuser pour restreindre l’accès aux répertoires

Nous pouvons restreindre l’accès aux répertoires avec les options « Autoriser » et « Refuser » dans le fichierhttpd.conf. Ici, dans cet exemple, nous allons sécuriser le répertoire racine, pour cela en définissant ce qui suit dans le fichier httpd.conf .

/ Options Aucun Order refuser, autoriser Refuser de tous

  1. Options « Aucun »  : cette option ne permet pas aux utilisateurs d’activer des fonctionnalités facultatives.
  2. Order refuser, allow — C’est l’ordre dans lequel les directives « Deny » et « Autoriser » seront traitées. Ici, il va « nier » d’abord et « permettre  » ensuite.
  3. Refuser de tous – Cela refusera la demande de tout le monde vers lerépertoire racine , personne ne pourra accéder au répertoire racine.

7. Utiliser les modules mod_security et mod_evasive pour sécuriser Apache

Ces deux modules « mod_security » et « mod_evasive  » sont des modules très populaires d’Apache en termes de sécurité.

Mod_sécurité

mod_security fonctionne comme un pare-feu pour nos applications web et nous permet de surveiller le trafic en temps réel. Il nous aide également à protéger nos sites Web ou notre serveur web contre les attaques de force brute. Vous pouvez simplement installer mod_security sur votre serveur à l’aide de vos installateurs de paquets par défaut.

mod_evasive fonctionne très efficacement, il faut une requête pour traiter et la traite très bien. Il empêche les attaques DDOS de faire autant de dégâts. Cette fonctionnalité de mod_evasive lui permet de gérer la force brute HTTP et l’attaque Dos ou DDoS Installer mod_security sur Ubuntu/Debian $ sudo apt-get install libapache2-modsecurity $ sudo a2enmod mod-security $ sudo /etc/init.d/apache2 force-recharger Installer mod_security sur RHEL/Centos/Fedora/ # yum install mod_security # /etc/init.d/httpd redémarrage Mod_Evasive . Ce module détecte les attaques avec trois méthodes.

  1. Si tant de demandes arrivent à une même page en quelques fois par seconde.
  2. Si un processus enfant essayant de faire plus de 50 demandes simultanées.
  3. Si une adresse IP essaie toujours de faire de nouvelles requêtes lorsque sa temporairement liste noire .

mod_evasive peut être installé directement à partir de la source. Ici, nous avons un guide d’installation et de configuration de ces modules qui vous aidera à configurer ces modules Apache dans votre boîte Linux.

  1. Protégez Apache à l’aide de Mod_Security et Mod_Evasive

8. Désactiver la suite Apache des liens symboliques

Par défaut Apache suit des liens symboliques , nous pouvons désactiver cette fonctionnalité avec FollowSymlinks avec la directive Options . Et pour ce faire, nous devons faire l’entrée suivante dans le fichier de configuration principal.

Et, si un utilisateur particulier ou un site Web a besoin de FollowSymlinks activer, nous pouvons simplement écrire une règle dans le fichier « .htaccess Options -FollowSymlinks  » à partir de ce site Web.

Remarque : Pour activer les règles de réécriture dans le fichier « .htaccess » « AllowOverride All # Activer les liens symboliques Options Liens symboliques suivis  » devrait être présents dans la configuration principale globalement.

9. Désactiver les inclutions côté serveur et l’exécution CGI

Nous pouvons désactiver les inclusions côté serveur ( mod_include ) et CGI si ce n’est pas nécessaire et pour ce faire, nous devons modifier le fichier de configuration principal.

Nous pouvons le faire pour un répertoire particulier aussi avec la balise Directory. Ici Dans cet exemple, nous désactivons les exécutions de fichiers Inclusions et Cgi pour le répertoire « /var/www/html/web1 Options -Inclut Options -ExecCGI  ».

Options -Inclut -ExecCGI

Voici d’autres valeurs avec peuvent être activées ou désactivées avec la directive Options.

  1. Toutes les options — Pour activer toutes les options à la fois. Il s’agit de la valeur par défaut, Si vous ne voulez pas spécifier de valeurs explicitement dans le fichier de conf Apache ou .htaccess.
  2. Options IncludeNoexec — Cette option permet les inclusions côté serveur sans autorisation d’exécution pour une commande ou des fichiers cgi.
  3. Options MultiViews — Permet le contenu des multivues négociées avec le module mod_négocié.
  4. Options SymlinksiFowNerMatch – Il est similaire à 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é.

10. Limiter la taille des demandes

Par défaut, Apache n’a aucune limite sur la taille totale de la requête HTTP, c’est-à-dire illimitée et lorsque vous autorisez des requêtes volumineuses sur un serveur Web, il est possible que vous soyez victime d’ attaques par déni de service . Nous pouvons limiter la taille des requêtes d’une directive Apache « LimitRequestBody  » avec la balise de répertoire.

Vous pouvez définir la valeur en octets de 0 ( illimité ) à 2147483647 (2 Go ) autorisés dans un corps de requête. Vous pouvez définir cette limite en fonction des besoins de votre site, Supposons que vous ayez un site où vous autorisez les téléchargements et que vous voulez limiter la taille de téléchargement pour un répertoire particulier.

Ici, dans cet exemple, user_uploads est un répertoire qui contient des fichiers téléchargés par les utilisateurs. Nous mettons une limite de 500K pour cela.

LimitRequestBody 512000

11. Protégez les attaques DDOS et durcissement

Eh bien, il est vrai que vous ne pouvez pas protéger complètement votre site Web contre les attaques DDoS . Voici quelques directives qui peuvent vous aider à avoir un contrôle dessus.

  1. TimeOut : Cette directive vous permet de définir la durée pendant laquelle le serveur attend que certains événements se terminent avant qu’il échoue. Sa valeur par défaut est de 300 secondes. Il est bon de garder cette valeur faible sur les sites qui sont soumis à des attaques DDOS. Cette valeur dépend totalement du type de demande que vous obtenez sur votre site Web. Note : Cela pourrait poser des problèmes avec les scriptsCGI venir.
  2. MaxClients : Cette directive vous permet de définir la limite des connexions qui seront servies simultanément. Chaque nouvelle connexion sera mise en file d’attente après cette limite. Il est disponible avec Prefork et Worker tous les deux MPM . La valeur par défaut est 256 .
  3. KeepAliveTimeout : Il s’agit du temps pendant lequel le serveur attend une requête ultérieure avant de fermer la connexion. La valeur par défaut est de 5 secondes .
  4. LimitRequestFields : Cela nous aide à définir une limite sur le nombre de champs d’en-tête de la requête HTTP qui seront acceptés par les clients. Sa valeur par défaut est 100. Il est recommandé d’abaisser cette valeur si les attaques DDoS se produisent à la suite d’un si grand nombre d’en-têtes de requête http.
  5. LimitRequestFieldSize  : Cela nous aide à définir une limite de taille sur l’en-tête de requête HTTP.

12. Activer la journalisation Apache

Apache vous permet de journaliser indépendamment de la journalisation de votre système d’exploitation . Il est judicieux d’activer la journalisation Apache, car elle fournit plus d’informations, telles que les commandes saisies par les utilisateurs qui ont interagi avec votre serveur Web.

Pour ce faire, vous devez inclure le module mod_log_config . Il existe trois directives principales liées à l’enregistrement disponibles avec Apache.

  1. TransferLog  : création d’un fichier journal.
  2. LogFormat  : spécification d’un format personnalisé.
  3. CustomLog  : création et mise en forme d’un fichier journal.

Vous pouvez également les utiliser pour un site Web particulier que vous faites hébergement virtuel et pour cela vous devez le spécifier dans la section hôte virtuel. Par exemple, voici la configuration de l’hôte virtuel de mon site Web avec la journalisation activée.

DocumentRoot /var/www/html/exemple.com/ NomServerName www.exemple.com DirectoryIndex index.htm index.html index.php ServerAlias exemple.com ErreurDocument 404 /story.php ErrorLog /var/log/httpd/example.com_error_log CustomLog /var/log/httpd/example.com_access_log combiné

13. Sécurisation d’Apache avec des certificats SSL

Enfin, mais pas le moindre certificat SSL, vous pouvez sécuriser toutes vos communications d’une manière cryptée sur Internet avec certificat SSL. Supposons que vous ayez un site Web sur lequel les gens se connectent en prouvant leurs identifiants de connexion ou que vous ayez un site Web E-Commerce où les gens fournissent leurs coordonnées bancaires ou les détails de la carte de débit ou de crédit pour acheter des produits, par défaut votre serveur web envoyer ces détails au format texte brut, mais lorsque vous utilisez des certificats SSL sur vos sites Web, Apache envoie toutes ces informations sous forme de texte chiffré.

Vous pouvez acheter des certificats SSL auprès de tant de fournisseurs SSL différents comme namecheap.com . Si vous exploitez une très petite entreprise Web et que vous ne souhaitez pas acheter un certificat SSL , vous pouvez toujours attribuer un certificat auto-signé à votre site Web. Apache utilise le modulemod_ssl pour prendre en charge lecertificat SSL .

# openssl genrsa -des3 -out exemple.com.key 1024 # openssl req -new -key example.com.key -out exmaple.csr # openssl x509 -req -jours 365 -dans exemple.com.com.csr -signkey example.com.com.key -out exemple.com.crt Une fois votre certificat créé et signé. Maintenant, vous devez ajouter ceci dans la configuration Apache. Ouvrez le fichier de configuration principal avec l’éditeur vim et ajoutez le fichier lignes suivantes et redémarrez le service.

SSLengine sur SSLCertificateFile /etc/pki/tls/certs/exemple.com.crt Fichier clé SSLCertificateFichier /etc/pki/tls/certs/exemple.com.key SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt ServerAdmin ravi.saive@example.com NomServerName exemple.com DocumentRoot /var/www/html/exemple/ ErrorLog /var/log/httpd/example.com-error_log CustomLog /var/log/httpd/example.com-access_log commun

Ouvrez votre navigateur, tapez https://example.com, et vous pourrez voir le nouveau certificat auto-signé .

Voici quelques conseils de sécurité que vous pouvez utiliser pour sécuriser l’installation de votre serveur Web Apache . Pour plus d’astuces et idées de sécurité utiles, consultez la documentation en ligne officielle d’Apache HttpServer.

Partager :