Installer Fail2ban sur son VPS

Installer Fail2ban sur son VPS

Dans ce tutoriel, nous allons voir comment apporter un peu plus de sécurité au VPS OVH que nous venons d’installer. Pour ça, nous allons interdire les connexions SSH à l’utilisateur root en direct, et installer fail2ban, un logiciel de sécurité pour serveur Linux.

Installer un client SSH

Pour pouvoir vous connecter en SSH (Secure Shell) à votre serveur, on va utiliser un petit logiciel qui s’appelle Putty. Pour l’installer, voir le lien suivant : putty.exe

Pour vous connecter, il faut juste lancer le logiciel, rentrer l’adresse de votre serveur (vpsXXXXXX.ovh.net). Au démarrage, l’invite de commande vous demande sous quel compte vous voulez vous connecter. Tapez root et faites “Entrée”. Le logiciel vous demande alors votre mot de passe (celui que vous avez reçu dans le mail qui vous annonce que votre VPS est installé). Pas de panique si le mot de passe ne s’affiche pas quand vous le tapez, c’est normal.

Astuce : pour faire un copier-coller sous SSH, faites un CTRL + C sur votre mail, puis clic gauche dans la fenêtre de Putty, et un petit Clic Droit pour “coller”.

”Entrée”, et vous êtes connecté en root.

Installer les mises à jour

La première chose qu’on va faire, c’est vérifier s’il n’y a pas des mises à jour disponible pour le système d’exploitation installé sur le serveur. Pour ça, on tape simplement la chose suivante sur la console :

apt-get update

apt-get dist-upgrade

Le logiciel tourne un peu et vérifie s’il y a des paquets de mises à jour de prêts. Ça peut toujours être utile de faire celles-ci, et ça ne prend pas très longtemps.

Ajouter un nouvel utilisateur

Maintenant, on va ajouter un nouvel utilisateur au serveur. Pourquoi ? Et bien simplement parce que la majorité des robots malveillants qui cherchent des failles de sécurité sur un serveur tentent des attaques de type « Brute force ». En gros, ils vont essayer de se connecter en SSH, en utilisant le login “root” et en faisant tourner un dictionnaire de mot de passe, jusqu’à ce que ça marche. Le système est simple : tentative → Echec → Nouvelle tentative avec un autre mot de passe → Echec etc etc.

Du coup, sur cette logique, avec suffisamment de tentatives, ça finira bien par passer. C’est une attaque violente, qui ne fait pas du tout dans la finesse (et c’est pour ça qu’on conseille toujours d’utiliser un mot de passe “tordu”, des chiffres, des lettres, majuscules, minuscules etc).

En ajoutant un nouvel utilisateur et en interdisant les connexions SSH avec le login root, vous coupez l’herbe sous le pied à ces méchant robots.

Pour ajouter le nouvel utilisateur, on tape simplement

Adduser nomdelutilisateur

La console vous demande alors de choisir un mot de passe, que vous allez devoir taper deux fois, puis vous demandera de compléter certains renseignements (nom, prénom etc.).

On va maintenant interdire la connexion en root sur le serveur. Pour cela, nous allons devoir éditer le fichier etc/ssh/sshd_config, grâce à l’éditeur VIM.

Utiliser VIM pour éditer des fichiers

VIM est un éditeur de fichiers, qui marchent dans la console SSH. Il faut le pratiquer un peu pour l’utiliser de manière efficace, d’autant plus qu’il est très complet et permet d’être très productif. Pour en savoir plus sur cet éditeur et ses possibilités, je vous renvoie à l’excellent tutoriel de Mathieu Nebra, sur OpenClassrooms (https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/vim-l-editeur-de-texte-du-programmeur).

On va donc se placer dans le dossier etc/ssh en tapant

cd /etc/ssh

Puis on va taper

vim sshd_config

Pour éditer le fichier en question

Une fois l’éditeur ouvert, on tape simplement sur i pour entrer en mode « insertion », et on cherche la ligne qui commence par « PermitRootLogin yes ». Pour faire une recherche, tapez « ? » (sans les guillemets) et entrez votre recherche.

On change le « yes » en « no », on appuie ensuite sur Echape pour quitter le mode « insertion », puis on fait :wq pour sortir de VIM en sauvegardant les modifs effectuées.

On doit maintenant redémarrer SSH pour que la nouvelle configuration soit prise en compte.

Pour ça, on tape service ssh restart

On quitte la connexion en tapant « exit », et on se relogue avec le compte utilisateur qu’on a créé au début du tuto (la connexion SSH en root étant maintenant interdite en direct). Une fois connecté, on va reprendre la main en tant que super-utilisateur (root) en tapant « su » (super utilisateur).

La console nous demande à nouveau le mot de passe de root. On le rentre, et on peut maintenant installer fail2ban.

Installer et configurer Fail2ban

Si vous voulez aller plus loin sur le sujet, je vous conseille le très très bon tutoriel de Jonathan Boyer, qui est tout de même réservé à des utilisateurs avertis (car Jonathan manipule de choses assez complexes, comme les expressions régulières par exemple). Ca vous permettra de découvrir tout ce qu’on peut faire avec Fail2ban, si vous voulez allez plus loin sur ce sujet.

Donc, pour installer fail2ban, on tape simplement

apt-get install fail2ban

Une fois le logiciel installé, on va devoir le configurer. On doit donc éditer le fichier etc/fail2ban/jail.conf, avec VIM :

vim /etc/fail2ban/jail.conf

Cherchez la ligne qui commence par « ignoreip » (avec la commande « ? ») et tapez ensuite « i » pour entrer en mode « insertion « . Cette ligne définit les adresses IP qui seront ignorées par le processus de filtrage de fail2ban.

Ca peut être pratique pour ne pas vous auto-ban de votre serveur. Pour avoir votre adresse IP, vous pouvez utiliser le site suivant :).

Ajoutez votre IP derrière l’IP locale (en laissant un espace entre l’IP 127.0.0.1/8 et la votre).

Puis, on va chercher la ligne qui commence par « bantime ». C’est elle qui définit la durée du bannissement. Par défaut, c’est configuré sur 600 secondes. Si un utilisateur essaie de se connecter en SSH et qu’il échoue un trop grand nombre de fois, il sera « emprisonné » pendant 10 minutes.

Cherchez ensuite les lignes qui commencent par « findtime » et « « maxretry ». Findtime, c’est le laps de temps au cours duquel on a le droit de se tromper à plusieurs reprises, et « Maxretry », c’est le nombre d’essais autorisés au cours de ce laps de temps.

La configuration par défaut est :

findtime = 600

maxretry = 5

Ca veut dire qu’un utilisateur à le droit de tenter la connexion 5 fois pendant 10 minutes. S’il échoue plus de 5 fois pendant ce délai de 10 minutes, il sera banni (pendant 10 minutes).

On va également regarder ce qu’il y a sur la ligne qui commence par « mta ».

Ici, par défaut, on a mta = sendmail. Ca veut simplement dire que fail2ban utilisera le logiciel « sendmail » pour vous notifier des Ban, si vous configurez le soft pour qu’il vous envoie une alerte par e-mail.

Pour ça, on recherche la ligne « destemail », et on ajoute l’adresse de destination du dit-mail

Destemail = charles@digital-cookie.io

Puis on peut compléter les lignes qui commencent par « sender » et « sendermail », pour modifier le nom et le « from » qu’on aura dans le mail d’alerte.

Et enfin, on regarde ce qu’il y a dans la section « Action » :

# Action shortcuts. To be used to define action parameter
# The simplest action to take: ban only
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

# ban & send an e-mail with whois report to the destemail.
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"]

# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]

# Choose default action.  To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g.  action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_mwl)s

Les #, c’est pour commenter une ligne, c’est-à-dire qu’elle n’est pas prise en compte par le serveur (le code n’est pas exécuté).

Ici, on voit trois types d’actions par défaut en cas de ban :

  • L’utilisateur est banni
  • L’utilisateur est banni et je reçois un mail avec des renseignement sur l’origine de l’attaque
  • L’utilisateur est banni, je reçois un mail avec les mêmes renseignements, et des détails sur les logs de la connexion

Cela permet d’affiner la configuration (en modifiant les actions à exécuter, ou pour ajouter de nouvelles prisons par exemples).

On peut maintenant redémarrer fail2ban

Service fail2ban restart

Et on a presque terminé !

Installer sendmail

Sendmail n’est pas installé sur les VPS OVH par défaut. Pour ça, c’est facile, on tape :

Apt-get install sendmail

On valide avec “Y”, et on vérifie que tout se passe bien en s’envoyant un mail de test grâce à la commande suivante :

echo "Subject: test" | /usr/lib/sendmail -v mon-adresse-mail@exemple.com

N’oubliez pas de remplacer l’adresse exemple par la votre ;)

A chaque fois qu’un mariole essaiera de se connecter à votre serveur par une attaque brute force, vous recevrez un mail pour vous donner des détails sur la tentative de hack.

Safety first

Le fait d’interdire le login en direct avec l’utilisateur root mets à mal les attaques par dictionnaires, et c’est encore plus vrai maintenant que le nombre de tentatives de connexion est limité pendant un certain laps de temps ! Cette logique, on l’appliquera aussi en automatique à tout ce qui sera sur le serveur, grâce à un plugin de sécurité qu’on installera sur notre Wordpress. Ca, plus des backups automatisés, et vous serez parés pour être en ligne 24/7 !

Normalement, vous avez pu suivre ce tuto en moins d’une demi-heure. Mais on peut faire tellement plus ! La sécurité informatique, c’est primordial, et quand on voit des bijoux tels que le tuto de grafikart.fr, on comprend que c’est un métier à part entière.

Merci à James de SEO Bordeaux pour son premier tuto, celui qui m’a lancé sur cette petite expérience côté sécurité, et à Jonathan pour toutes les ressources qu’il met en ligne sur son site !

Charles Annoni

Charles Annoni

Développeur Front-End et Formateur

Charles Annoni accompagne les entreprises dans leur développement sur le web depuis 2008. Il est également formateur dans l’enseignement supérieur.