Outils pour utilisateurs

Outils du site


netadmin:fail2ban

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
netadmin:fail2ban [2019/05/20 14:44] – créée yoannnetadmin:fail2ban [2023/04/27 13:28] (Version actuelle) – [Références] yoann
Ligne 1: Ligne 1:
 {{tag>netadmin sysadmin securite brut-force ban ip}} {{tag>netadmin sysadmin securite brut-force ban ip}}
 +
 +:TODO_DOCUPDATE:
  
 ====== Fail2ban ====== ====== Fail2ban ======
  
-Analyse les journaux des différents services en se basant sur des expression rationnelles et isole automatiquement les IP générant un nombre trop élevé d'erreurs permettant de stopper les attaques en force brute.+Analyse les journaux des différents services en se basant sur des expression rationnelles (regex) et isole automatiquement les IP générant un nombre trop élevé d'erreurs permettant de stopper les attaques en force brute.
  
  
Ligne 13: Ligne 15:
  
   * Les règles sont placées dans le dossier **/etc/fail2ban/filter.d/**.   * Les règles sont placées dans le dossier **/etc/fail2ban/filter.d/**.
-  * Le fichier de conf s'obtient par copie du fichier par défaut /etc/fail2ban/jail.conf+  * Le fichier de conf s'obtient par copie et modification du fichier par défaut /etc/fail2ban/jail.conf
  
 <code bash> <code bash>
 $ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local $ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
 </code> </code>
 +
 +===== Exceptions =====
 +
 +Dans la section globale, on peut spécifier des IPs à ignorer (à ne jamais bannir).
 +
 +<file>
 +[DEFAULT]
 +
 +ignorself = true
 +ignoreip = 127.0.0.1/8 ::1
 +</file>
  
 ===== Notifications email ===== ===== Notifications email =====
  
-Définir les variables suivantes dans le fichier jail.local+Définir les variables suivantes dans le fichier /etc/fail2ban/jail.local
 <file> <file>
 destemail = user@domain destemail = user@domain
Ligne 32: Ligne 45:
 ===== Protection du service ssh ===== ===== Protection du service ssh =====
  
-Pour activer la surveillance du service ssh, vérifier la valeur de la directive **enable** dans la section [ssh]+Pour activer la surveillance du service ssh, vérifier la valeur de la directive **enable** dans la section [sshd] 
 + 
 +<note> 
 +Si le service SSH n'écoute pas sur le port par défaut, veiller à bien redéfinir la valeur de la directive **port** afin que la règle de filtrage netfilter générée par fail2ban soit correcte.  
 +</note>
  
 <file> <file>
-[ssh]+[sshd]
  
 enabled  = true enabled  = true
Ligne 51: Ligne 68:
 ===== Test ===== ===== Test =====
  
-Pour afficher l'état de l'ensemble des cellules:+Pour afficher l'état de l'ensemble des cellules (prisons ou jails):
  
 <code bash> <code bash>
Ligne 57: Ligne 74:
 </code> </code>
  
-Pour le détail de la cellule ssh:+Pour le détail de la cellule sshd:
  
 <code bash> <code bash>
-$ sudo fail2ban-client status ssh+$ sudo fail2ban-client status sshd
 </code> </code>
 +
 +Si des hôtes sont bannis, on peut vérifier les règles créées par fail2ban:
 +<code bash>
 +iptables -L -n
 +</code>
 +
 +<file>
 +Chain INPUT (policy DROP)
 +target     prot opt source               destination         
 +f2b-sshd   tcp  --  0.0.0.0/           0.0.0.0/           multiport dports 22
 +
 +. . .
 +
 +Chain f2b-sshd (1 references)
 +target     prot opt source               destination         
 +REJECT     all  --  79.137.37.26         0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  103.150.125.189      0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  120.88.46.226        0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  14.49.204.81         0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  24.2.154.81          0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  193.106.191.50       0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  179.60.147.99        0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  165.22.216.121       0.0.0.0/           reject-with icmp-port-unreachable
 +REJECT     all  --  152.89.196.123       0.0.0.0/           reject-with icmp-port-unreachable
 +RETURN     all  --  0.0.0.0/           0.0.0.0/0
 +</file>
 +
 +On peut être surpris de constater que les règles générées par fail2ban utilisent la cible REJECT plutôt que DROP. Ce choix a été justifié par les développeurs dans la conversation https://github.com/fail2ban/fail2ban/issues/507 essentiellement parce que l'usage de DROP peut impacter fortement la réactivité des applications exécutées par les utilisateurs légitimes. A contrario l'usage de DROP n'a pas vraiment d'impact sur les attaquants/scripts/bots qui connaissent déjà l’existence du service (qu'il tentent d'attaquer en force brute). A ce sujet voir également http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject
 +
 +On peut toutefois changer se comportement par défaut si on le souhaite en éditant le fichier /etc/fail2ban/action.d/iptables-common.conf et en modifiant la valeur de la variable **blocktype**:
 +
 +<file>
 +# Option:  blocktype (ipv6)
 +# Note:    This is what the action does with rules. This can be any jump target
 +#          as per the iptables man page (section 8). Common values are DROP
 +#          REJECT, REJECT --reject-with icmp6-port-unreachable
 +# Values:  STRING
 +#blocktype = REJECT --reject-with icmp6-port-unreachable
 +
 +blocktype = DROP
 +</file>
  
 ===== Usage ===== ===== Usage =====
Ligne 69: Ligne 127:
 <code bash> <code bash>
 # Déterminer combien de temps est bannie une ip pour ssh # Déterminer combien de temps est bannie une ip pour ssh
-$ fail2ban-client get ssh bantime+$ fail2ban-client get sshd bantime
  
 # Déterminer le nombre d'essais autorisé pour ssh # Déterminer le nombre d'essais autorisé pour ssh
-$ fail2ban-client get ssh maxretry+$ fail2ban-client get sshd maxretry
 </code> </code>
  
Ligne 78: Ligne 136:
  
 <code bash> <code bash>
-$ fail2ban-client set ssh maxretry 3+$ fail2ban-client set sshd maxretry 3
 </code> </code>
  
Ligne 85: Ligne 143:
 <code bash> <code bash>
 # Interdire l'acces au service ssh a une IP # Interdire l'acces au service ssh a une IP
-$ fail2ban-client set ssh banip 192.168.0.34+$ fail2ban-client set sshd banip 192.168.0.34
  
 # Autoriser à nouveau une IP # Autoriser à nouveau une IP
-$ fail2ban-client set ssh unbanip 192.168.0.34+$ fail2ban-client set sshd unbanip 192.168.0.34
 </code> </code>
 +
 +<note>
 +Les valeurs spécifiées via la ligne de commande sont effectives immédiatement mais seront remplacées par celles définies dans les fichiers de configuration lorsque la configuration sera rechargée ou le service redémarré.
 +</note>
  
 ===== Déploiement ===== ===== Déploiement =====
  
 Sur serveurs en DMZ. Sur serveurs en DMZ.
 +
 +
 +===== Alternatives =====
 +
 +  * Tallow : plus léger, exploite les journaux systemd;
 +  * SSHGuard.
 +
  
 ===== Références ===== ===== Références =====
Ligne 99: Ligne 168:
   * https://www.grafikart.fr/formations/serveur-linux/fail2ban   * https://www.grafikart.fr/formations/serveur-linux/fail2ban
   * https://www.kali-linux.fr/configuration/proteger-ssh-avec-fail2ban   * https://www.kali-linux.fr/configuration/proteger-ssh-avec-fail2ban
 +  * https://doc.ubuntu-fr.org/fail2ban
 +  * https://wiki.chotaire.net/linux-fail2ban
netadmin/fail2ban.1558363491.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)