Home / Linux / Protéger votre serveur des tentatives d’intrusions avec Fail2ban.

Protéger votre serveur des tentatives d’intrusions avec Fail2ban.

Fail2ban lit les fichiers de log et bannit les adresses IP qui ont obtenu un trop grand nombre d’échecs lors de l’authentification. Il peut mettre à jour les règles du pare-feu pour rejeter cette adresse IP. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache entre autre.

Fail2ban_1

On peut créer des prisons par services (ssh, http, …), on renseigne quelques informations (fichier de log, filtre à appliquer, …) et lorsque le filtre trouve une concordance, une action est réalisée (bannissement, mail, whois, …).

[information]Le tutoriel est réalisé sur la Debian V7.0.[/information]

Installation de Fail2Ban.

Pour installer le logiciel il suffit d’utiliser la commande suivante :

#sudo apt-get install fail2ban

Fail2ban_2

Le fichier de configuration se trouve dans /etc/fail2ban/jail.conf.

Par défaut le fichier de configuration contient de nombreux exemples à vous de les activer, voire de les modifier en fonction de vos besoins.

Le répertoire Fail2ban contient les fichiers et répertoires suivants :

  • action.d : contient les actions à mettre en oeuvre à un tentative d’intrusion
  • filter.d : contient les expressions régulières permettant de parser les logs d’un service donné
  • jail.conf : Contient les paramètres de chacun des services surveillés (bantime, maxretry, mail etc…)

Dans ce tutoriel nous verrons comment surveiller les connexions SSH sur notre serveur.

Avant toute chose, il est conseillé de faire une copie du fichier jail.conf en jail.local. Toutes vos modifications seront faites dans ce fichier.

Pour cela vous devez utiliser la commande suivante :

#cp jail.conf jail.local

Fail2ban_3

Surveillance des connexions SSH.

Editer le fichier jail.local à l’aide de vim par exemple.

Vous avez une section DEFAULT qui permet de définir des paramètres communs à tous les services ou prison (jail).

Fail2ban_4

  • igonoreip permet d’autoriser des adresses spécifique, il est important à configurer pour éviter de se faire bannir de son propre serveur. Vous pouvez rajouter d’autres ip en laissant un espace entre.
  • bantime temps de bannissement d’une ip en seconde
  • maxretry nombre d’essais autorisés pour une connexion avant d’être banni
  • destemail saisissez ici l’adresse email qui recevra les alertes

Chacun de ces paramètres peut-être surclassés dans la configuration du service. Pour ce qui nous concerne voyons plus en détail la configuration du service SSH.

Déplacez-vous dans la section JAILS puis SSH.

Fail2ban_5

Vous avez ci-dessus la configuration par défaut.

  • Enabled = permet d’activer ou non le service. Les valeurs prises peuvent être True ou False
  • Port = indique le port à surveiller. Si vous avez modifié le port d’écoute par défaut de SSH qui est 22, c’est ici qu’il faut l’indiquer. Vous pouvez rajouter d’autres ports en les séparant par des virules.
  • Filter= indiquer ici le nom du filtre à utiliser pour analyser le fichier de log. Le filtre se trouve dans le répertoire filter.d
  • Logpath= indiquer l’emplacement du fichier log à surveiller.

Maintenant nous allons un peu l’améliorer :

  • Findtime = cette option permet de d’analyser dans les fichiers de log, pour une durée spécifier (par défaut dix minutes soit 600 secondes) si une ip a déjà fait des tentatives infructueuses, si oui on bloque l’ip.
  • Action = Tout comme l’entrée filtre, chaque action fait référence à un fichier dans le répertoire action.d. L’action de l’interdiction par défaut, « iptables » peut être trouvée dans /etc/fail2ban/action.d/iptables.conf. Donc pour bloquer une ip suite à des échecs infructueux nous utiliserons cette action : action = iptables-multiport[name=SSH, port=22, protocol=tcp]
  • sendmail-whois= Vous pouvez recevoir un mail lors du bannissement d’une ip. Pour cela vous pouvez utiliser l’action suivante : sendmail-whois[name=SSH, dest=webmaster@yourdomain.fr, sender=fail2ban@yourdomain.fr]

Fail2ban_5a

Test de la configuration

Il est important avant d’enregistrer la configuration, de vérifier que tout est fonctionnel. L’idéal étant de tester sur le fichier auth.log (du moins pour le SSH) en ayant des entrées avec des intrus.

Pour cela vous devez utiliser la commande suivante :

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Fail2ban_6

Au bout de quelques instants si tout se passe bien les premiers résultats s’affichent avec les IP ayant tentées une intrusion par bruteforce par exemple.

Fail2ban_7

  • 1 : Liste des ip ayant tentée une intrusion
  • 2: Si vous éditer le fichier de configuration sshd.conf de Fail2ban vous verrez que le script recherche plusieurs chaines de caractères pour découvrir une intrusion, celles-ci sont représentées par les numéros entre crochets.
  • 3: Nombre total d’intrusions détectées dans le fichier auth.log.

Fin de l’installation.

Maintenant que nous avons vérifié que nos filtres fonctionnent correctement nous devons recharger la configuration en redémarrant le service.

Pour ce faire nous utiliserons la commande suivante :

#fail2ban-client reload

Fail2ban_8

Si vous avez ce message, lors de la relance du service : WARNING ‘findtime’ not defined in ‘nom_prison’. Using default value, ce n’est pas grave, c’est juste pour vous dire que la valeur de la variable Findtime sera prise dans les paramètres globaux et appliqués aux différentes configurations.

Pour aller plus loin!!!

Gestion des mails.

Si vous ne recevez pas de mails lors des attaques, il est important de bien vérifier un paramètre dans le fichier jail.local au niveau de la tâche action.

Fail2ban_9

Par défaut Fail2ban n’envoie pas de mail et pour recevoir les alertes (voir ce tutoriel par exemple sur la mise en place de ssmtp) vous devez modifier la valeur de la variable action.

Par défaut :
action = %(action_)s

Pour recevoir les mails avec identification de l’ip (Whois)
Action = %(action_mwl)s

Voici un exemple de mail que vous pourrez recevoir

Fail2ban_9a

  • 1: Adresse ip bannies pour plusieurs tentatives de connexions infructueuses
  • 2: Information Whois sur l’adresse ip

Voir la liste des jails (prisons) actives.

Autre commande intéressante si vous gérer plusieurs prisons afin de visualiser le statut de chacune :

#fail2ban-client status

Fail2ban_10

Vérifier la liste des IP bannies

Grâce à une commande du firewall iptables nous pouvons afficher la liste des IP bannies :

#iptables –L

Fail2ban_11

Nous voyons ici, dans le résultat de la commande, qu’il n’y a aucun drop, donc aucune IP n’est bloquée pour l’instant.

Voici un exemple avec un blocage :

Fail2ban_12

Le protocole SSH n’est pas le seul à pouvoir être surveillé. FTP, HTPP, SMTP, mais aussi des logiciels spécifiques comme Postfix, webmin, apache, … peuvent être analysés.

Vous pouvez vous rendre sur le wiki de Debian qui consacre une page sur Fail2ban avec des exemples de prisons pour différents logiciels à cette adresse : https://www.isalo.org/wiki.debian-fr/Fail2ban

That’s All.

  

4 Potins

  1. Voila comment changer le port ssh …
    Les tentatives d intrusion en brute force de serveurs SSH sont en général effectuées sur le port SSH standard, à savoir le port TCP 22. Voici comment changer le port d’écoute du serveur sshd.

    nous allons éditer le fichier éditez le fichier /etc/ssh/sshd_config avec une console root nano /etc/ssh/sshd_config

    éditez simplement la ligne suivante (Attention à ne pas prendre un port déjà réservé ! Pour être sûr de ça, choisissez un numéro de port plus grand que 1024, et moins grand que 65535) :

    1 # What ports, IPs and protocols we listen for
    2 Port 22

    Prenons par exemple le port 3670.
    1 # What ports, IPs and protocols we listen for
    2 Port 3670

    cherchez la ligne suivante
    Quote:
    PermitRootLogin yes

    la remplacer par
    Quote:
    PermitRootLogin no

    Puis on enregistre le fichier avec Ctrl+O et on quitte avec Ctrl+X

    ll vous faut maintenant relancer le service sshd. Sous des distributions comme fedora, vous pouvez simplement taper :
    [root@localhost /] /etc/init.d/ssh restart
    vous allez voir ceci Restarting OpenBSD Secure Shell server: sshd.
    On va maintenant vérifier que le changement a bien été pris en compte :dans une console admin

    [root@localhost /] netstat -tnplv | grep ssh

    1 [root@localhost /] netstat -tnplv | grep ssh
    2 Connexions Internet actives (seulement serveurs)
    3 Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
    4 tcp 0 0 0.0.0.0:3670 0.0.0.0:* LISTEN 3899/sshd
    5 tcp6 0 0 :::3670 :::* LISTEN 3899/sshd

    On voit bien que sshd écoute sur le port TCP 3670, ça a fonctionné …

  2. Bonjour,

    Merci pour ces infos complémentaires.

    @+

  3. Merci pour ce superbe tuto …
    il est fortement recommandé de changer le port ssh fin d éviter les attaque par bruteforce .

Laisser un commentaire

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

ante. mattis Praesent tristique leo dolor sem, Praesent diam ipsum luctus neque.
Partagez5
Tweetez3
+11
Enregistrer1
Reddit
Partagez1
Pocket
11 Partages
QuickTutoriel

GRATUIT
VOIR