Sécuriser un serveur web

10/10/2015 | Lemmy Killmonsters

Dans notre exemple on suppose qu’on travaille sur une machine Debian 7 fraîchement installée.

Pour commencer, on met à jour et on installe tout les paquets utiles :

apt-get update && apt-get install fail2ban rkhunter denyhosts apticron

Voyons quels sont les paquets fraichement installés
fail2ban : permet de bannir automatiquement au bout d’un certains nombres d’essais de connexion ratés. Permets d’éviter le bruteforce.
Rkhunter : permets d’être averti en cas de modification de fichiers sensibles.
Denyhosts : logiciel qui scan les logs et ban en fonction des dits-logs. Permet une synchronisation de la liste de ban avec d’autres serveurs.
Apticron : permet de savoir quand le serveur a besoin de mises à jour, lesquels, et avoir le changelog. Et oui, la sécurité passe aussi par les mises à jour.

  • On va commencer par le plus simple, apticron.

nano/etc/apticron/apticron.conf

Remplacer EMAIL= » root » par EMAIL= » utilisateur@domaine.com ».
Facile non ? =)

  • Passons maintenant à Fail2ban.

Par sécurité on commence par copier le fichier de configuration et le renommer, en cas de problème on garde un fichier propre et le fichier jail.local sera chargé en priorité.

cp/etc/fail2ban/jail.conf/etc/fail2ban/jail.local

Puis on commence à la modifier :

nano/etc/fail2ban/jail.local

On obtient :

[DEFAULT]
ignoreip = 127.0.0.1
findtime =
bantime =

ignoreip contient la liste des adresses IP a ignoré. 127.0.0.1 est l’adresse localhost. Si vous travaillez sur un réseau internet vous pouvez ajouter les adresses IP de vos collègues autorisés à administrer le serveur.
Findtime : est le temps de blocage en cas de plusieurs échecs. Plus c’est grand plus c’est sur, par contre en cas d’échec vous êtes aussi bloqué.
Bantime : est le temps que sera banni quelqu’un qui s’est trop souvent trompé. Là on peut mettre le paquet !
/!\les temps sont en secondes/!\

Ainsi que d’autres blocs comme :

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

Ce qui veut dire dans l’ordre d’apparition :
On s’occupe de la partie ssh, on active cette configuration, on scan les ports ssh/sftp, le nom du fichier filtre est sshd, le fichier de log est dans/var/log/auth.log avec un nombre max d’essais de 6.µ

Typiquement je mets toujours 3 retry max. et j’active tout (enabled = true) ; même les services non utilisés par le serveur ; dans le cas ou quelqu’un tenterait quand même d’y accéder.

Et enfin modifier la ligne comme suis :
destemail = utilisateur@domaine.com

Voilà vous avez une configuration basique de votre fail2ban, que vous pourrez agrémentez d’autre règle plus tard.

  • Pour se détendre, on va refaire un peu de configuration facile avec rkhunter. Lui c’est comme apticron, une ligne et zou.

nano /etc/default/rkhunter

On vérifie que l’adresse « report_email » est la bonne, et la ligne « cron_daily_run » soit bien à yes.
Finish.

  • Bon maintenant on s’attaque à un Davinaz gros morceaux. Denyhosts.

Il y a plusieurs fichiers à connaitres.
Denyhosts.conf : c’est le fichier de configuration global du serveur.
Hosts.deny : la blacklist.
Hosts.allow : la whitelist. Si vous avez des utilisateurs Tux manchots, vous pouvezl es rajouter à cette liste. Attention toute fois, si un pite à accès a son poste toute la sécurité du fichier denyhosts.conf ne servira à rien.
Auth.log : fichier log de connexion ssh analysé par le service.

Pour commencer, on va voir les conditions de bannissements.

nano/etc/denyhosts/denyhosts.conf

BLOCK_SERVICE = ALL
Indiquer à quel (s) service (s) on bloque l’accès. Par exemple, bloquer l’accès uniquement au SSH (sshd) ou à tous les services du serveur (ALL). Pour seulement enregistrer les hôtes, laisser vides
DENY_THRESHOLD_INVALID = 1
Indiquer le nombre d’échecs accepté avec un nom d’utilisateur invalide. Une fois la limite dépassée, on bloque l’hôte.
DENY_THRESHOLD_VALID = 1
Indiquer le nombre d’échecs accepté avec un nom d’utilisateur valide, sauf pour l’utilisateur
 « root ». Une fois la limite dépassée, on bloque l’hôte.
/!\ici je mets 1, car si quelqu’un tente ça sur mon serveur, c’est qu’il ne fait pas partie des personnes de confiance, je n’ai pas de compte autre que root/!\
DENY_THRESHOLD_ROOT = 3
Indiquer le nombre d’échecs accepté avec l’utilisateur « root ». Une fois la limite dépassée, on
 bloque l’hôte.
HOSTNAME_LOOKUP=YES
Permets de récupérer le nom d’hôte dans les fichiers de logs. Peut être drôle de voir que c’est votre collègue qui s’est planté.
ADMIN_EMAIL = user@domain.com
On ne peut pas faire plus simple. Ici vous mettez votre boite mail, comme ça vous recevrez les notifications par mail.
AGE_RESET_VALID= 10d
Période de temps pour la remise à zéro du compteur de tentative de connexion invalide, sauf pour

 l’utilisateur « root »
AGE_RESET_ROOT=25d
Période de temps pour la remise à zéro du compteur de tentative de connexion invalide pour l’utilisateur « root »
AGE_RESET_RESTRICTED= 14d
Période de temps pour la remise à zéro du compteur de tentative de connexion invalide pour

 les utilisateurs situés dans le fichier restricted-usernames.
AGE_RESET_INVALID=14d
Période de temps pour la remise à zéro du compteur de tentative de connexion invalide

 avec des comptes utilisateurs qui n’existent pas.
RESET_ON_SUCCESS = no
Remettre à zéro le compteur d’échec si une tentative finit par être un succès. Valeur par défaut # « no ».
SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
Pour activer la synchronisation, décochez cette ligne
SYNC_INTERVAL = 1h
Intervalle de synchronisation
SYNC_UPLOAD = yes
Autoriser ou non l’envoi d’informations concernant les hosts.deny détecté afin d’aider

 au maintien de la base synchronisée/!\un peu de civisme, mais rien ne vous y oblige. /!\
SYNC_DOWNLOAD = yes

Autoriser ou non la réception d’informations concernant les hôtes refusés détectés par d’autres serveurs afin de compléter le fichier hosts_deny local.
SYNC_DOWNLOAD_THRESHOLD = 3
Nombre de fois qu’un hôte doit être bloqué pour qu’il soit synchronisé dans la base locale
PURGE_DENY = 15dOn purge les blocages tous les 15 jours
PURGE_THRESHOLD = 3
Nombre de fois qu’un hôte peut être purgé du fichier « hosts.deny ». Une fois la limite dépassée l’hôte ne sera plus purgé du fichier. La valeur « 0 » indique illimité.
DAEMON_PURGE = 1 h
Temps entre chaque exécution de la tâche de purge des anciennes entrées dans le fichier hosts.deny

 

Voilou, vous avez sécurisé un minimum votre machine, alors pitié, arrêtez les XAMPP !

2 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

A propos de