Quelles sont les meilleures pratiques, recommandations et lectures requises pour sécuriser un serveur Apache?
Prenez le guide du Center for Internet Security (CIS) pour sécuriser Apache (il décrit en détail comment améliorer la sécurité):
Modifier: lien mis à jour CIS Apache HTTP Server 2.2.x Benchmark
Si vous avez une licence pour Nessus , vous pouvez exécuter une vérification automatisée en saisissant leur modèle d'audit:
Ceci est un bon guide:
https://serverfault.com/questions/212269/tips-for-securing-a-lamp-server
Guide de base pour le durcissement: http://www.wpsecure.net/server-guide/
Si vous utilisez php: http://www.madirish.net/?article=229
Trouver les 404 (ou autres codes d'état) dans le journal Apacheawk '$9 == 404 {print $7}' access_log | uniq -c | sort -rn | head
La réponse initialement très votée à cette question qui a été acceptée a été supprimée car il s'agissait d'un plagiat direct de 20 façons de sécuriser votre configuration Apache . Cette page est une ressource fantastique.
@RoryMcCune a également posté ceci en tant que lien sur cette réponse: Il existe un projet OWASP pour développer un ModSecurity Core Rule Set here qui pourrait être utile.
Il y a beaucoup de bons conseils ici, donc je ne répéterai pas les choses déjà mentionnées. Mais ce que je dirai c'est:
N'oubliez pas de remplacer les pages d'erreur par défaut par des éléments qui ne révèlent pas la version de votre serveur Web ou la révision du noyau. J'ai tendance à remplacer chaque html par défaut par 1 doublures qui sont quelque chose comme "Erreur 400". Il donne très peu d'informations sur le système. Ce principe s'applique à tous les serveurs Web capables d'afficher des pages d'erreur personnalisées, ils sont tous à peu près par défaut à donner beaucoup trop d'informations que nécessaire. On pourrait penser que ServerSignature cacherait cela, mais dans de nombreux cas, ce n'est pas le cas.
N'oubliez pas non plus de supprimer tout le contenu HTML par défaut (spécifique à la langue, etc.), l'empreinte digitale est donc beaucoup plus difficile.
En ce qui concerne les bonnes lectures, il y avait un livre blanc d'Apcon 2008 qui vaut la peine d'être lu.
Mod_Security est mentionné à plusieurs reprises, cela convient mieux aux applications Web, donc si vous ne proposez que du contenu statique, cela ne vous aidera pas aussi beaucoup, bien qu'il y ait quelques attaques contre lesquelles il aide à se défendre pendant le traitement des requêtes qui pourraient affecter un serveur Web statique.
L'autre chose que je mentionnerais est une bonne gestion des journaux, si vous ne fermez pas vos journaux et ne surveillez pas de près le système, vous courez le risque qu'un attaquant le martèle sans en avoir conscience.
Tous les principes de sécurité généraux s'appliquent: exécuter uniquement les modules dont vous avez besoin, désactiver les fonctionnalités dont vous n'avez pas besoin, ranger vos autorisations/propriétés (la plupart des contenus sont en lecture seule, alors pourquoi les fichiers ont-ils besoin de plus de 400 perms?).
Les choses qui sont particulières à Apache, comme les travaux CGI ou différents vhosts servant deux fois le même contenu avec deux mécanismes de sécurité différents, sont beaucoup plus difficiles à repérer; pas exactement une vérification automatisée, vous devez en fait connaître Apache, le système d'exploitation sous-jacent et ce que font les applications exécutées dans Apache.
Par souci d'exhaustivité, voici un Liste de contrôle de sécurité Apache 2.2 de DISA. MISE À JOUR: Voici un lien vers leur collection entière de documents de renforcement de serveur Web.
Il vaut peut-être la peine de jeter un œil à Apache mod_security .
Je l'ai essayé récemment sur certains de mes serveurs, non seulement il effectue des ajustements de configuration à Apache lui-même, comme le changement de numéro de version, etc., mais il agit également comme un pare-feu d'application Web aidant à se protéger contre une grande variété d'attaques telles que SQL. injection etc.
Comment sécuriser le serveur Web Apache
À quelle réponse vous attendriez-vous si vous demandiez "Comment piloter un jumb-jet" ou "Comment faire une chirurgie cérébrale" - il en va de même pour sécuriser un serveur Web - vous devez faire des milliers d'heures de formation, de pratique et de recherche . Mais comme tout le monde doit commencer quelque part ...
Il y a beaucoup de listes de contrôle de base sur Internet pour savoir comment durcir un serveur - mais selon mon commentaire ailleurs, elles varient considérablement en qualité.
Je recommanderais le sans un comme une bonne source.
Une fois que vous avez suivi la liste de contrôle, vous devez établir les moyens par lesquels vous pouvez
Ne planifiez pas la façon dont vous traitez un incident de sécurité si cela se produit. Prévoyez quoi faire quand cela se produit.
Après avoir installé et configuré votre système, remplacez le disque dur et voyez combien de temps il vous faut pour que le service soit à nouveau opérationnel sans utiliser le disque d'origine.
ce n'est pas seulement lié à Apache (et compte également pour nginx + php-fpm), mais souvent oublié: php-eastereggs, qui pourrait être désactivé via php.ini
expose_php = off
ce n'est pas aussi terrible que de laisser un phpinfo.php derrière, mais c'est généralement un indice d'une administration système très paresseuse.
voir oeufs de pâques
Bon fil tourné. Beaucoup de gens disent la vérité.
Ils en ont oublié un, OpenBSD façon:
Dans OpenBSD, le serveur Apache httpd (8) a été chroot (2) ed par défaut
httpd (v.1 d'Apache) inclus dans OpenBSD par défaut, et chrooté par défaut.
Vous pouvez le répéter facilement avec Apache2 ou nginx sur tout autre système d'exploitation de type Unix.
Utilisez la dernière version d'Apache, corrigez votre système d'exploitation ainsi que des tiers comme openssl ou tout autre.
Bloquer les ports indésirables.
Cela vous protégera de certaines vulnérabilités connues, mais vous serez toujours sensible à un 0-day, bien sûr.
Voici 6 étapes clés:
modsecurity
pour protéger votre application contre les attaques au niveau de l'application.Ne vous fiez pas au pare-feu de votre réseau, c'est inutile quand on parle de sécurité Web.