Quelques astuces pour sécuriser votre serveur Web (sous Linux)

Quelques astuces pour sécuriser votre serveur Web (sous Linux)

OS, Serveur, Mobile Tutoriels

Posséder son propre serveur et le gérer soi-même donne une plus grande flexibilité à son propriétaire que les serveurs dits « clé en main » ou autres serveurs mutualisés. Il y a cependant un aspect sur lequel il ne faut pas prendre à la légère : la sécurité.

Voici quelques conseils et astuces simples à connaitre absolument afin de minimiser les risques d’attaque.

Les exemples ci-dessous reposent sur l’utilisation d’un système de type Debian ou Ubuntu.

Protéger son accès SSH

L’accès SSH est en général la porte d’entrée favoris des personnes malfaisantes. La première chose à faire est d’interdir l’accès root à votre serveur. Pour se faire, vous avez juste à modifier le fichier de configuration du service SSH /etc/ssh/sshd_config.

PermitRootLogin no # remplacez "yes" par "no"

Il est également conseillé de modifier le port SSH par défaut (22). Toujours dans le fichier de configuration, modifiez la ligne suivante par la valeur de votre choix :

Port 1234

Idéalement, votre accès devrait être sécurisée par l’emploi d’une clé chiffrée. Sa mise en place étant légèrement plus complexe, un prochain tutoriel y sera consacré.

Si vous voulez être certain que personne ne se connecte derrière votre dos, vous pouvez créer des alertes mails. Il vous suffit d’ajouter la ligne suivante à la fin du fichier .bashrc de votre dossier /home ainsi que celui de l’utilisateur root :

echo 'Acces SSH: ' `who` `date` | mail -s "Acces SSH" mail@domain.com

Adopter une politique de mots de passe robustes

On ne vous le dira jamais assez, il faut absolument utiliser des mots de passe individualisés et complexes. Si vous regardez la liste des mots de passe les plus utilisés, on retrouve en tête de liste les mots de passe suivants :

  • 123456
  • azerty
  • password
  • abc123

Une des attaques les plus connues consiste à utiliser une base de données de mots de passes courants et à spammer vos accès jusqu’à trouver le bon. C’est ce qu’on appel la technique du brut force. Vous devez donc vous assurer d’avoir un mot de passe différent pour chaque service (SSH, FTP, MySQL, …), de huit caractères au minimum, composé de chiffres et de lettres et utilisant au moins un caractère spécial (/?%-_\ etc.).
Certes ils deviendront moins mnémotechnique mais il sera bien plus difficile de trouver le mot de passe B23%fgYuj%_j23cd que toto69.

Avoir un système à jour

Des failles de sécurité sont découvertes régulièrement et sont en générale utilisées aussitôt pour attaquer les machines distantes. Il est donc important de s’assurer d’avoir un système à jour. Pensez donc à télécharger les derniers patch de sécurité de votre système.

sudo apt-get update && sudo apt-get -y upgrade

Si comme moi vous êtes du genre à oublier ce genre d’intervention vous pouvez créer un CRON pour automatiser cette tâche. Pour se faire, créez un fichier auto-update dans le répertoire /etc/cron.weekly/ et ajoutez les lignes suivantes :

!/bin/sh
# Cron d'automatisation des mises à jour
apt-get update && apt-get -y upgrade

Enfin, n’oubliez pas de rendre votre fichier executable :

chmod +x /etc/cron.weekly/auto-update

Se prémunir des attaques DoS

Voilà l’attaque la plus connue. Le DoS (Denial of Service) a pour but de rendre indisponible votre serveur en faisant sauter vos services un par un. Le principe est simple : votre attaquant va envoyer un nombre important de demandes de synchronisation TCP jusqu’à envoyer votre serveur dans les choux.

Heureusement pour nous, il existe des outils pour contrer ce genre d’attaque. Le plus connu et certainement le plus fiable est fail2ban. Celui-ci va surveiller de prèt vos fichiers de log et va agir dès qu’il va rencontrer des erreurs redondantes en bannissant l’IP d’origine. De plus, il est très simple à mettre en place :

sudo apt-get install fail2ban

Une fois installé, il suffit d’éditer le fichier de configuration /etc/fail2ban/jail.conf et d’activer les services qu’on souhaite protéger. Il est donc possible d’agir sur d’autres services tels que PHP, Apache, Postfix, etc.

Exemple :

[ssh]
enabled  = true
port     = 1234
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Bridez votre PHP

L’une des hantises des développeurs PHP, c’est de laissez une porte ouverte dans leurs développements. Un formulaire mal codé et hop, c’est le festival des pirates ! Si jamais quelqu’un arrive à injecter une iframe ou un bien même un bout de code PHP dans votre site, il peut très vite faire en forte d’être chez lui.
En PHP, il existe entre autre la méthode exec() qui permet de lancer des commandes comme vous le feriez dans votre console SSH. Cette commande doit être absolument désactivée. Dans les versions récentes de PHP, celle-ci est désactivée par défaut. Pour vérifier que c’est bien le cas, vous pouvez le vérifier en affichant les informations via un classique <?php phpinfo(); ?>. Si ce n’est le cas, éditez le fichier php.ini, trouvez la ligne disable_functions et complétez-la de la façon suivante :

disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

Ne pas être trop bavard

Un site Web peut regorger d’informations interessantes pour un pirate. Il faut donc faire en sorte que le minimum d’information soit accessible aux autres.
Un détail qui peut avoir de l’importance pour l’attaquant est la version de votre serveur Http. Cette information est facilement accessible via les entêtes de vos pages ou dans les pages d’erreur (pages 404 par exemple). Pour Apache, la suppression de cette information se fait dans son fichier de configuration en ajoutant les syntaxes suivantes :

ServerTokens Prod
ServerSignature Off

Les fichiers .htaccess représentent également des fichiers sensibles. Pour interdir l’accès à ces fichiers, il convient de modifier le fichier de configuration du serveur Http ou les fichiers de configuration de vos Vhost de la façon suivante :

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

Conclusion

Cet article ne traite que certains aspects de la sécurité d’un serveur Web et il vous faudra creuser encore plus profondément pour avoir un système à l’épreuve des attaques. N’hésitez donc pas à consulter les sites spécialisés sur le sujet et n’oubliez jamais que dans la majeure partie des cas, les attaques sont dues non pas à une faille sur le serveur mais à une negligence dans le développement d’un site Web.

Pour aller plus loin

A propos de l'auteur

Commentaires

  • Brandon de Prestataire informatique le 28/03/2013 à 9:51

    Merci pour les petits rappel :) Ca ne fait pas de mal de se souvenir des bases

  • GeekPress de Sécurité WordPress le 29/03/2013 à 0:57

    Pas mal du tout la tâche cron pour faire un update automatique de la machine.

    Sinon pour les idées de mot de passe, je te propose : tsétsé le moustique ! C'est bien, c'est long et si un hacker arrive à le forcer, ce n'est pas une tapette... (tu as vu le jeu de mot ...).

  • Sébastien Decamme le 29/03/2013 à 8:50

    Ho punaise tu es en forme toi :)

* KeywordLuv ! Entrez VotreNom@VosMotsClés dans le champ "Nom" pour bénéficier d'un mot-clef ciblé.