Outils pour utilisateurs

Outils du site


fail2ban

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fail2ban [2025/01/14 19:28] – [Exemple de démarche pour du brute force sur SSH] serge.guerinetfail2ban [2025/01/16 09:09] (Version actuelle) – [Fail2Ban] serge.guerinet
Ligne 1: Ligne 1:
-====== Fail2Ban ======+====== Fail2Ban : bannir les intrus ======
  
-Un attaquant peut essayer en « brute force » toutes les combinaisons possibles pour trouver le mot de passe d’un compte utilisateur sur un service. Pour le détecter, il faut qu'une journalisation permette d'identifier un échec de connexion. +Un attaquant peut essayer en <wrap em>« brute force »</wrap> toutes les combinaisons possibles pour trouver le mot de passe d’un compte utilisateur sur un service. Pour le <wrap em>détecter</wrap>, il faut qu'une <wrap em>journalisation</wrap> permette d'identifier un échec de connexion. 
  
-Le serveur Apache ou le code ne permettent pas de détecter cela. +Les services (Apache, SSH, FTP, etc) ou le code ne permettent pas de détecter cela. 
-Il faut rajouter un utilitaire qui permet de détecter les comportements anormaux dans les accès aux services d’une machine : connexion trop fréquentes et en échec, connexions démultipliées dans un temps court, etc. + 
 +Il faut rajouter un utilitaire qui permet de détecter les <wrap em>comportements anormaux</wrap> dans les accès aux services d’une machine :  
 +  * connexion trop fréquentes et en échec,  
 +  * connexions démultipliées dans un temps court,  
 +  * connexions initiées puis abandonnées, 
 +  * connexions envoyant des éléments mal formés 
 +  * etc. 
  
 C’est le rôle de l’outil Fail2ban : <wrap em>de l’échec (Fail) à (2) un bannissement (Ban)</wrap> C’est le rôle de l’outil Fail2ban : <wrap em>de l’échec (Fail) à (2) un bannissement (Ban)</wrap>
  
-===== Préparation =====+===== Installation =====
 On doit d'abord installer **//fail2ban//** à partir des dépôts :  On doit d'abord installer **//fail2ban//** à partir des dépôts : 
 <code lscript>apt install fail2ban</code> <code lscript>apt install fail2ban</code>
Ligne 20: Ligne 26:
 ===== Les principes ===== ===== Les principes =====
 Fail2ban est un outil de détection d’intrusion Fail2ban est un outil de détection d’intrusion
-  * Il explore les journaux d’activités (de la machine, d’un service, etc) pour y repérer des indications de comportement anormaux (par exemple une répétition de messages « connection refused » dans un temps déterminé).+  * Il **explore les journaux d’activités** (de la machine, d’un service, etc) pour y repérer des indications de **comportement anormaux** (par exemple une répétition de messages « connection refused » dans un temps déterminé).
   * il se base sur 3 types de fichiers :    * il se base sur 3 types de fichiers : 
     * <wrap em>jail</wrap> : les services qu’on surveille (nom, port, fichiers journaux étudiés, filtres appliqués, etc) avec les paramètres (nombre de tentatives considérées comme une intrusion, intervalle de temps dans lequel on détecte ce nombre, etc)     * <wrap em>jail</wrap> : les services qu’on surveille (nom, port, fichiers journaux étudiés, filtres appliqués, etc) avec les paramètres (nombre de tentatives considérées comme une intrusion, intervalle de temps dans lequel on détecte ce nombre, etc)
Ligne 30: Ligne 36:
 ==== Les dossiers et fichiers ==== ==== Les dossiers et fichiers ====
 Fail2ban repose sur les éléments suivants :  Fail2ban repose sur les éléments suivants : 
-  * Dossier de base (/etc/fail2ban) +  * Dossier de base (**/etc/fail2ban**
-    * fail2ban.conf : définit les configurations de base de l'outil : niveau de journalisation, fichier de journalisation, durée de conservation, etc +    * **fail2ban.conf** : définit les configurations de base de l'outil : niveau de journalisation, fichier de journalisation, durée de conservation, etc 
-    * jail.conf : paramètres par défaut des **//jail//** (prisons ou éléments surveillés) s'ils ne sont pas redéfinis : +    * **jail.conf** : paramètres par défaut des **//jail//** (prisons ou éléments surveillés) s'ils ne sont pas redéfinis : 
       * **bantime** : défini la durée de bannissement **en secondes**, et les options (rallongement, mémorisation, etc)       * **bantime** : défini la durée de bannissement **en secondes**, et les options (rallongement, mémorisation, etc)
       * ignoreself et ignoreip : machines qui ne doivent pas être bannies       * ignoreself et ignoreip : machines qui ne doivent pas être bannies
Ligne 41: Ligne 47:
     * les fichiers //**paths**// indiquent les chemins vers les fichiers à utiliser pour les dossiers, actions et autres filtres     * les fichiers //**paths**// indiquent les chemins vers les fichiers à utiliser pour les dossiers, actions et autres filtres
  
-Pour configurer Fail2ban, la bonne pratique est de définir des fichiers spécifiques (nommés **//<nom>.local//**) dans les dossiers dédiés :  +**Pour configurer Fail2ban, la bonne pratique** est de définir des **fichiers spécifiques** (nommés **//<nom>.local//**) dans les dossiers dédiés :  
-  * jail.d : on y crée les configurations pour les services qu'on souhaite surveiller, soit dans des fichiers individuels, soit dans un fichier **//jail.local//** +  * **jail.d** : on y crée les configurations pour les services qu'on souhaite surveiller, soit dans des fichiers individuels, soit dans un fichier **//jail.local//** 
-  * filter.d : on y crée ou adapte les fichiers définissant ce qui est recherché dans les journaux pour identifier un type de comportement inadapté +  * **filter.d** : on y crée ou adapte les fichiers définissant ce qui est recherché dans les journaux pour identifier un type de comportement inadapté 
-  * action.d : dossier qui décrit les comportements (blocages d'IP, ajout de règles de filtrage, journalisation, etc)+  * **action.d** : dossier qui décrit les comportements (blocages d'IP, ajout de règles de filtrage, journalisation, etc) 
 + 
 +===== Les principales commandes ===== 
 +Gérer le service Fail2ban 
 +<code lscript>systemctl {stop|start|restart|status} fail2ban</code> 
 + 
 +Connaître l'état d'un jail (sshd, apache, etc) : actif ou non, machines bannies, ... 
 +<code lscript>fail2ban-client status <jail></code> 
 +Exemple 
 +<WRAP center round tip 90%> 
 +<code lscript>root@B1-DB12-SecuWeb:~# fail2ban-client status sshd 
 +Status for the jail: sshd 
 +|- Filter 
 +|  |- Currently failed: 0 
 +|  |- Total failed:     6 
 +|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd 
 +`- Actions 
 +   |- Currently banned: 1 
 +   |- Total banned:     2 
 +   `- Banned IP list:   10.12.0.38 
 + </code> 
 +</WRAP> 
 + 
 + 
 +Pour bloquer une IP pour un jail donné (sshd, apache, etc) 
 +<code lscript>fail2ban-client set <jail> banip <ip_poste> </code>   
 + 
 +Pour débloquer une IP bannie pour un jail donné (sshd, apache, etc) 
 +<code lscript>fail2ban-client set <jail> unbanip <ip_poste>  </code> 
 + 
 +Voir les journaux d'activité 
 +<code lscript>{nano|tail} /var/log/fail2ban.log</code> 
  
 ===== Exemple de démarche pour du brute force sur SSH ===== ===== Exemple de démarche pour du brute force sur SSH =====
-On peut configurer Fail2ban pour qu'il détecte les tentatives de connexion sur SSH. L'outil permet des paramétrages plus ou moins restrictifs (mode normal, aggressive, ddos et extra). On trouvera une démarche complète https://www.malekal.com/comment-proteger-ssh-avec-fail2ban-des-attaques-dos-bruteforce/+On peut configurer Fail2ban pour qu'il détecte les tentatives de connexion sur SSH. L'outil permet des paramétrages plus ou moins restrictifs (mode normal, aggressive, ddos et extra). On trouvera une démarche et les explications complètes https://www.malekal.com/comment-proteger-ssh-avec-fail2ban-des-attaques-dos-bruteforce/.  
 + 
 +Pour SSH, tout le fonctionnement est pré-paramétré (filter, actions). Il ne reste qu'à définir le **jail**.
  
 __**Exemple d'une configuration de base**__ __**Exemple d'une configuration de base**__
Ligne 53: Ligne 93:
 Dans le fichier **/etc/fail2ban/jail.d/defaults-debian.conf** (existant) ou **/etc/fail2ban/jail.d/jail.local ** (éventuellement à créer), on indiquera la //**section**// [sshd] suivante :  Dans le fichier **/etc/fail2ban/jail.d/defaults-debian.conf** (existant) ou **/etc/fail2ban/jail.d/jail.local ** (éventuellement à créer), on indiquera la //**section**// [sshd] suivante : 
  <code lscript>nano /etc/fail2ban/jail.d/jail.local </code>  <code lscript>nano /etc/fail2ban/jail.d/jail.local </code>
-<code apache2>+<code lscript>
 [sshd] [sshd]
 # Active la surveillance stricte de SSH # Active la surveillance stricte de SSH
Ligne 65: Ligne 105:
 # Nombre de tentatives autorisées avant bannissement (plus strict) # Nombre de tentatives autorisées avant bannissement (plus strict)
 maxretry = 3   maxretry = 3  
-# Période d'échecs de connexion en minutes (30 minutes) +# Période d'échecs de connexion en minutes (30 minutes = 3000s
-findtime = 30m   +findtime = 3000   
-# Temps de bannissement en minutes (30 minutes) +# Temps de bannissement en minutes (20 minutes) 
-bantime = 30m  +bantime = 20m  
 # Backend pour la gestion des journaux # Backend pour la gestion des journaux
 backend = systemd   backend = systemd  
 +</code>
 +
 +Après modification du fichier, on redémarre le service : <code lscript> systemctl restart fail2ban </code>
 +
 +Une tentative de connexion impossible générera des traces dans le journal, jusqu'au banissement de la machine concernée.
 +<code lscript>
 +distant@machine.sio.bts$ tail /var/log/fail2ban.log
 +2025-01-16 08:38:56,246 fail2ban.jail           [11935]: INFO    Jail 'sshd' started
 +2025-01-16 08:38:56,247 fail2ban.jail           [11935]: INFO    Jail 'apache' started
 +2025-01-16 08:41:06,536 fail2ban.filter         [11935]: INFO    [sshd] Found 10.12.0.38 - 2025-01-16 08:41:06
 +2025-01-16 08:41:11,794 fail2ban.filter         [11935]: INFO    [sshd] Found 10.12.0.38 - 2025-01-16 08:41:11
 +2025-01-16 08:41:16,044 fail2ban.filter         [11935]: INFO    [sshd] Found 10.12.0.38 - 2025-01-16 08:41:15
 +2025-01-16 08:41:16,288 fail2ban.actions        [11935]: NOTICE  [sshd] Ban 10.12.0.38
 +</code>
 +
 +après le temps prévu du bannissement, la machien est débloquée et l'information est journalisée
 +<code lscript>2025-01-16 08:41:16,288 fail2ban.actions        [11935]: NOTICE  [sshd] Ban 10.12.0.38
 +2025-01-16 08:46:16,414 fail2ban.actions        [11935]: NOTICE  [sshd] Unban 10.12.0.38
 </code> </code>
  
fail2ban.1736882918.txt.gz · Dernière modification : de serge.guerinet