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édentes Révision précédente
Prochaine révision
Révision précédente
fail2ban [2025/01/15 07:33] – [Les principes ] 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 <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.  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>
Ligne 45: Ligne 51:
   * **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 =====
Ligne 67: 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  
Ligne 76: Ligne 114:
  
 Après modification du fichier, on redémarre le service : <code lscript> systemctl restart fail2ban </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>
  
 ===== Exemple de démarche pour du brute force sur une application Web ===== ===== Exemple de démarche pour du brute force sur une application Web =====
  • fail2ban.1736926382.txt.gz
  • Dernière modification : 2025/01/15 07:33
  • de serge.guerinet