Serveur LAMP sécurisé pour une utilisation en production

10

Quelle est la procédure pour sécuriser un serveur Linux, Apache, MySQL, PHP (ou même Perl) pour une utilisation en production?

Outre la définition du mot de passe MySQL et du mot de passe root pour Linux, quelles autres étapes (peut-être pas si évidentes) devraient être prises?

Quelles mesures puis-je prendre, si je devais être paranoïaque supplémentaire, qui ne sont pas normalement nécessaires?

Ceci est pour une utilisation de base sur un seul site mais doit être sécurisé.

WalterJ89
la source
Apache Hardening sur un site sœur.
Marcin

Réponses:

13

Ces recommandations me viennent à l'esprit et ne visent pas à être exhaustives.

Découvrez Bastille, c'est une série de scripts qui implémente les meilleures pratiques sous Linux.

N'envoyez pas de données d'authentification via des protocoles en clair. Par exemple, désactivez FTP. Si vous envoyez des données d'authentification via Apache, utilisez SSL.

Désactivez et supprimez tout logiciel inutile, y compris l'interface graphique.

Auditez tous les fichiers avec le bit SUID défini et supprimez. (Cela limitera considérablement les capacités non root. Comprenez les implications pour chaque changement individuel.)

Auditez les répertoires accessibles en écriture et supprimez le bit accessible en écriture. (Laisser / tmp seul.)

Évitez d'exécuter un démon en tant que root.

Recherchez tous les logiciels multi-utilisateurs qui écoutent en détail les sockets pour les meilleures pratiques de sécurité.

Éviter d'ajouter des utilisateurs au système est l'une des meilleures approches. Les systèmes multi-utilisateurs nécessitent une plus grande attention aux détails.

Appliquer les normes de mot de passe. Par exemple: minimum 10 caractères, caractères non alphanumériques, en utilisant des lettres et des chiffres. Ceci rend le forçage brutal plus difficile en cas de compromission du fichier de mot de passe. Appliquez cela via le système.

Verrouillez les utilisateurs après 5 tentatives d'authentification infructueuses avec un verrouillage d'au moins 10 minutes. Conservez un historique des mots de passe afin que les utilisateurs ne puissent pas utiliser les 5 derniers mots de passe.

Si vous disposez d'un environnement plus vaste, l'utilisation de la ségrégation réseau avec plusieurs sous-réseaux pour isoler le risque est une exigence absolue. S'il s'agit d'un environnement plus petit, il est recommandé d'exécuter un pare-feu sur le système local pour limiter l'exposition. Par exemple, autoriser uniquement SSH à votre IP. tcpwrappers peut également être utilisé pour une couche supplémentaire. (/etc/hosts.allow, /etc/hosts.deny)

Et, bien sûr, garder tous les logiciels à jour. En particulier les démons face au public.

Avec SSH:

  • Désactiver le protocole SSH 1
  • Autoriser uniquement l'authentification racine without-password(uniquement paire de clés)

Avec Apache:

  • Désactivez tous les modules qui ne sont pas nécessaires
  • Désactiver .htaccess et les répertoires publics
  • Désactivez FollowSymlink et toutes les options inutiles
  • N'installez pas PHP si vous n'en avez pas besoin.

Avec MySQL:

  • Désactivez les utilisateurs par défaut.
  • N'utilisez pas d'hôtes génériques.
  • Assurez-vous de définir un hôte unique pour chaque utilisateur.
  • N'écoutez pas sur TCP sauf si nécessaire. (Exceptionnellement inévitable.)
  • Limitez autant que possible les privilèges des utilisateurs des applications. (SELECT, INSERT, UPDATE, DELETE idéal pour écrire et SELECT pour lire)

Je recommanderais de rechercher spécifiquement le réglage de php.ini pour la sécurité. C'est un logiciel plus risqué par défaut.

Bastille

Warner
la source
Je suggérerai de lire cyberciti.biz/tips/php-security-best-practices-tutorial.html pour le réglage php
ALex_hha
2

Voici un bon article que vous pouvez utiliser comme base pour votre configuration et modifier en fonction de votre distribution: http://it.toolbox.com/blogs/rayheffer/how-to-build-a-secure-lamp-web- serveur-avec-centos-5-36786

Alexandre Nizoux
la source
Mais en gros, ne chargez pas les modules dont vous n'avez pas explicitement besoin, masquez tous les numéros de version et les pages de débogage / informations, créez un utilisateur mysql pour chaque application avec des mots de passe renforcés, demandez toujours aux gens de travailler sur votre serveur en utilisant un compte utilisateur normal et faites-les sudo s'ils ont besoin d'autorisations root, utilisez un pare-feu comme iptables et n'ouvrez que des ports en fonction de ce dont vous avez absolument besoin pour entrer dans votre boîte ... Ce plus les derniers correctifs vous donneront déjà une configuration assez sécurisée.
Alexandre Nizoux
Cet article n'est pas bon. Désactiver selinux, rien sur le renforcement de mysql, désactiver les modules apache inutiles ...
sumar