serveurs:installation: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
serveurs:installation:fail2ban [2023/05/23 15:34] – [Fai2ban et Wordpress] jpmilcentserveurs:installation:fail2ban [2026/09/21 09:11] (Version actuelle) – [Utilisations] jpmilcent
Ligne 24: Ligne 24:
 # Ajouter ses ip pour éviter de se faire bannir # Ajouter ses ip pour éviter de se faire bannir
 # Ex.: ignoreip = 127.0.0.1/8 10.0.1.10 10.0.1.20 <ip-v4-db> <ip-v4-web> # Ex.: ignoreip = 127.0.0.1/8 10.0.1.10 10.0.1.20 <ip-v4-db> <ip-v4-web>
-ignoreip = 127.0.0.1/8 <ip-v4-private-web> <ip-v4-private-db> <ip-v4-db> <ip-v4-web>+ignoreip = 127.0.0.1/8 <ip-v4-private-web> <ip-v4-private-db> <ip-v4-db> <ip-v4-web> <ip-vpn-lpo>
 # 1 jour de bannissement # 1 jour de bannissement
 #bantime = 86400 #bantime = 86400
Ligne 37: Ligne 37:
  
 [postfix] [postfix]
 +
 enabled = true enabled = true
 port = smtp,submission port = smtp,submission
Ligne 64: Ligne 65:
  
 [sshd] [sshd]
 +backend=systemd
 enabled = true enabled = true
 port = <port-ssh> port = <port-ssh>
  
 [postfix] [postfix]
 +backend=systemd
 enabled = true enabled = true
 port = smtp,submission port = smtp,submission
Ligne 94: Ligne 97:
 ===== Utilisations ===== ===== Utilisations =====
   * Document du client Fail2ban : https://manpages.debian.org/buster/fail2ban/fail2ban-client.1.en.html   * Document du client Fail2ban : https://manpages.debian.org/buster/fail2ban/fail2ban-client.1.en.html
-  * Vérifier son fonctionnement dans les logs : ''vi /var/log/fail2ban.log'' +  * Vérifier son fonctionnement dans les logs : ''%% vi /var/log/fail2ban.log %%'' 
-  * Consulter l'état d'une prison (ici avec comme nom de prison : //nginx-http-auth//) : ''fail2ban-client status nginx-http-auth'' +  * Consulter l'état d'une prison (ici avec comme nom de prison : //nginx-http-auth//) : ''%% fail2ban-client status nginx-http-auth %%'' 
-  * Sortir de prison une IP : '' fail2ban-client set <nom-de-prison> unbanip <IP-concernée> '' +  * Sortir de prison une IP : ''%% fail2ban-client set <nom-de-prison> unbanip <IP-concernée> %%'' 
-  * Réinitialiser une prison : ''<nowiki> fail2ban-client reload --unban <nom-de-prison> </nowiki>''+  * Ajouter manuellement une IP à une prison : ''%% fail2ban-client set <nom-de-la-prisonbanip <IP-concernée> %%'' 
 +  * Réinitialiser une prison : ''%% fail2ban-client reload --unban <nom-de-prison> %%'' 
 +  * Enregistrer dans un fichier txt les IPs bannies d'une prison : ''%% fail2ban-client status <nom-de-prison> | grep "Banned IP list:" | awk -F: '{print $2}' | tr -s ' ' '\n' | grep -v '^$' > ips_bannies.txt %%'' 
 +  * Recharger un filtre après modification : ''%% fail2ban-client reload <nom-de-prison> %%'' 
 +    * Vérifier que la regex du filtre est bien pris en compte en l'affichant : ''%% fail2ban-client get <nom-de-prison> failregex %%'' 
 +    * Vérifier que l' //ignore regex// du filtre est bien pris en compte en l'affichant : ''%% fail2ban-client get <nom-de-prisonignoreregex %%''
  
 ===== Fai2ban et Wordpress ===== ===== Fai2ban et Wordpress =====
   * Une fois Wordpress rendu indexable par les moteurs de recherche, nous risquons d'être attaqué sur la page de login de Wordpress. Si cette situation apparaissait, il serait nécessaire de mettre en place une règle Fail2ban.   * Une fois Wordpress rendu indexable par les moteurs de recherche, nous risquons d'être attaqué sur la page de login de Wordpress. Si cette situation apparaissait, il serait nécessaire de mettre en place une règle Fail2ban.
-  * Pour vérifier si nous sommes attaqué, vérifier dans les logs du serveur web du jour à l'aide de la commande :  ''grep "POST /wp-login.php" /var/log/nginx/access.log''+  * Pour vérifier si nous sommes attaqué, vérifier dans les logs du serveur web du jour à l'aide de la commande :  ''%% grep "POST /wp-login.php" /var/log/nginx/access.log %%''
   * Dans cette situation, utiliser un des tutos suivant pour la mise en place :   * Dans cette situation, utiliser un des tutos suivant pour la mise en place :
     * [[https://km.azerttyu.net/Wordpress-et-les-attaques-brute-force| Wordpress et les attaques brute force]]     * [[https://km.azerttyu.net/Wordpress-et-les-attaques-brute-force| Wordpress et les attaques brute force]]
Ligne 107: Ligne 115:
     * [[https://geekeries.org/2018/11/fail2ban-pour-wordpress/|Fail2ban pour wordpress pour se protéger des bruteforce]] :  avec plugin WP-Fail2ban     * [[https://geekeries.org/2018/11/fail2ban-pour-wordpress/|Fail2ban pour wordpress pour se protéger des bruteforce]] :  avec plugin WP-Fail2ban
     * [[https://www.it-connect.fr/securisez-votre-wordpress-avec-fail2ban/|Sécurisez votre WordPress avec Fail2ban]] : avec plugin WP-Fail2ban     * [[https://www.it-connect.fr/securisez-votre-wordpress-avec-fail2ban/|Sécurisez votre WordPress avec Fail2ban]] : avec plugin WP-Fail2ban
-  * Ajouter un nouveau filtre : '' vi /etc/fail2ban/filter.d/nginx-wordpress.conf ''+  * Ajouter un nouveau filtre : ''%% vi /etc/fail2ban/filter.d/nginx-wordpress.conf %%''
     * Par défaut, Wordpress retourne une code 200 que le login réussisse ou échoue. Deux solutions :      * Par défaut, Wordpress retourne une code 200 que le login réussisse ou échoue. Deux solutions : 
       - modifier Worpdress pour retourner un code 403 si le login échoue       - modifier Worpdress pour retourner un code 403 si le login échoue
-      - utiliser le code 200 dans la regexp de détection et ne pas mettre trop bas le nombre de tentative d'essai et la durée de rechercher (''findtime'')+      - utiliser le code 200 dans la regexp de détection et ne pas mettre trop bas le nombre de tentative d'essai et la durée de rechercher (''%% findtime %%'')
     * Nous avons opté pour la solution 2.     * Nous avons opté pour la solution 2.
     * Contenue du fichier : <code properties>     * Contenue du fichier : <code properties>
Ligne 136: Ligne 144:
 ignoreregex = ignoreregex =
 </code> </code>
-  * Tester le filtre : ''<nowiki> fail2ban-regex --print-all-matched /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-wordpress.conf </nowiki>'' +  * Tester le filtre : ''%% fail2ban-regex --print-all-matched /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-wordpress.conf %%'' 
-  * Éditer le fichier de config : '' vi /etc/fail2ban/jail.d/defaults-debian.conf ''+  * Éditer le fichier de config : ''%% vi /etc/fail2ban/jail.d/defaults-debian.conf %%''
     * Ajouter à la fin du fichier la nouvelle section suivante : <code properties>     * Ajouter à la fin du fichier la nouvelle section suivante : <code properties>
 [nginx-wordpress] [nginx-wordpress]
Ligne 148: Ligne 156:
 findtime = 240  findtime = 240 
 </code> </code>
-  * Recharger la config de //Fail2ban// : '' systemctl reload fail2ban.service '' +  * Recharger la config de //Fail2ban// : ''%% systemctl reload fail2ban.service %%'' 
-  * Pour surveiller cette nouvelle prison : '' watch fail2ban-client status nginx-wordpress ''+  * Pour surveiller cette nouvelle prison : ''%% watch fail2ban-client status nginx-wordpress %%''
  
 ===== Problème fail2ban-tmpfiles.conf points to /var/run/ instead of /run ===== ===== Problème fail2ban-tmpfiles.conf points to /var/run/ instead of /run =====
Ligne 159: Ligne 167:
   * Prendre en compte les changements : ''systemctl daemon-reload''   * Prendre en compte les changements : ''systemctl daemon-reload''
   * Si le problème vient à se renouveller suite à une mise à jour de Fail2ban, utiliser la technique mise en place pour le service Docker sur l'instance //db-srv// pour surcharger le service //Fail2ban//.   * Si le problème vient à se renouveller suite à une mise à jour de Fail2ban, utiliser la technique mise en place pour le service Docker sur l'instance //db-srv// pour surcharger le service //Fail2ban//.
 +
 +===== Problème 'allowipv6' not defined in 'Definition' =====
 +  * **Contexte** : le service SystemD fail2ban (''systemctl status fail2ban'') affiche le message <code>fail2ban.configreader   [874403]: WARNING 'allowipv6' not defined in 
 +'Definition'. Using default one: 'auto'</code>
 +  * **Solution** : éditer le fichier ''vi /etc/fail2ban/fail2ban.conf'' et décommenter la ligne ''allowipv6 = auto''.
 +
 +===== Problème : failed during configuration: Have not found any log file for sshd jail =====
 +  * **Contexte** : le service SystemD fail2ban (''systemctl status fail2ban'') affiche le message <code>failed during configuration: Have not found any log file for sshd jail</code>
 +  * **Solution** : Dans le fichier ''/etc/fail2ban/jail.d/defaults-debian.conf'' ajouter à la section ''[sshd]'' la propriété ''backend=systemd'', idem pour la section ''[postfix]''
 +
 +===== Prison nginx-errors =====
 +  * Mise en place d'une prison détectant un trop fort tôt de code d'erreurs HTTP : 302, 403, 404 et 500.
 +  * Cette prison est <color white/#ed1c24>SENSIBLE</color> car elle peut rapidement prendre en compte des faux positifs. A surveiller avec : ''%% watch fail2ban-client status nginx-errors
 + %%'' ou en directe avec ''%% tail -f /var/log/fail2ban.log | grep "\[nginx-errors\] Ban" %%''
 +  * Créer un fichier de filtre : ''%% vi /etc/fail2ban/filter.d/nginx-errors.conf %%''
 +    * Contenu : <code ini>
 +[Definition]
 +failregex = ^<HOST> \S+ - \[.*\] "(GET|POST|HEAD).*HTTP.*" (302|403|404|500) .*$ 
 +ignoreregex =
 +</code>
 +    * Tester le bon fonctionnement de cette Regexp avec : ''%% fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-errors.conf %%'' 
 +  * Créer un fichier de prison : ''%% vi /etc/fail2ban/jail.d/nginx-errors.conf %%''
 +    * Contenu : <code ini>
 +[nginx-errors]
 +enabled = true
 +port = http,https
 +filter = nginx-errors
 +logpath = /var/log/nginx/access.log
 +maxretry = 6 
 +findtime = 600 
 +bantime = 1y
 +# Le paramètre ci-dessous peu être décommenté pour tester la prison sans bannir les ip
 +#banaction = dummy
 +</code>
 +  * Recharger la config de //Fail2ban// : ''%% systemctl restart fail2ban.service %%''
 +
 +
 +===== Vérification d'IP bannies =====
 +  * Pour vérifier en lot des IPs abusives, vous pouvez utiliser le site : https://www.abuseipdb.com/bulk-check
 +  * Le site IpInfo fournit également des informations : https://ipinfo.io/
  
  • serveurs/installation/fail2ban.1684856094.txt.gz
  • Dernière modification : 2023/05/23 15:34
  • de jpmilcent