{"id":122,"date":"2020-08-27T17:16:00","date_gmt":"2020-08-27T16:16:00","guid":{"rendered":"https:\/\/ligfy.net\/wordpress\/?p=122"},"modified":"2025-09-02T12:56:01","modified_gmt":"2025-09-02T11:56:01","slug":"securiser-debian-9-avec-fail2ban","status":"publish","type":"post","link":"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban\/","title":{"rendered":"S\u00e9curiser Debian 9 avec Fail2ban"},"content":{"rendered":"\n<ul><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Installation\">Installation<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Les-dossiers-et-fichiers-de-configuration\">Les dossiers et fichiers de configuration<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Param\u00e9trage-par-d\u00e9faut\">Param\u00e9trage par d\u00e9faut<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Configuration-avanc\u00e9e\">Configuration avanc\u00e9e<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Configurer-les-filtres\">Configurer les filtres<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Cr\u00e9er-son-propre-filtre\">Cr\u00e9er son propre filtre<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Commandes-de-base\">Commandes de base<\/a><\/li><li><a href=\"https:\/\/ligfy.net\/wordpress\/securiser-debian-9-avec-fail2ban#Configurer-une-jail-recidive\">Configurer une jail recidive<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"G\u00e9n\u00e9ralit\u00e9s\">G\u00e9n\u00e9ralit\u00e9s<\/h2>\n\n\n\n<p><strong>Fail2ban<\/strong> se charge d&rsquo;analyser les <strong>logs<\/strong> de divers services (SSH, Apache, FTP,&nbsp;Postifx, \u2026) install\u00e9s sur la machine, puis recherche les \u00e9checs d&rsquo;authentification r\u00e9p\u00e9t\u00e9s et ajoute automatiquement&nbsp;une r\u00e8gle au pare-feu (iptables,&nbsp;&nbsp;nftables, shorewall ou ufw) pour bannir l&rsquo;adresse IP de la source.<\/p>\n\n\n\n<h2 id=\"Installation\">Installation<\/h2>\n\n\n\n<p>Il suffit d&rsquo;installer le paquet.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>apt install fail2ban<\/code><\/p><\/blockquote>\n\n\n\n<p>Et pour v\u00e9rifier l\u2019\u00e9tat du service <strong>Fail2Ban<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>systemctl status fail2ban<\/code><\/p><\/blockquote>\n\n\n\n<p>Si la ligne commen\u00e7ant par <strong>Active<\/strong> contient la mention <strong>active (running)<\/strong>, cela signifie que le service <strong>Fail2Ban<\/strong> est bien install\u00e9 et en cours d\u2019ex\u00e9cution.<\/p>\n\n\n\n<h2 id=\"Les-dossiers-et-fichiers-de-configuration\">Les dossiers et fichiers de configuration<\/h2>\n\n\n\n<p>Le chemin standard de la configuration se trouve dans&nbsp;<strong>\/etc\/fail2ban\/<\/strong>.<\/p>\n\n\n\n<p>Une configuration typique ressemble \u00e0 ceci :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/etc\/fail2ban\n\u251c\u2500\u2500 action.d\/                   \u2192 Actions \u00e0 ex\u00e9cuter lors d\u2019un ban\/unban\n\u2502     \u251c\u2500\u2500 apf.conf              \u2192 Action pour le service apf\n\u2502     \u251c\u2500\u2500 badips.conf           \u2192 Action pour le service badips\n\u2502     \u251c\u2500\u2500 badips.py             \u2192 Script associ\u00e9\n\u2502     \u2514\u2500\u2500 \u2026                     \u2192 Autres actions disponibles\n\u2502\n\u251c\u2500\u2500 fail2ban.conf               \u2192 Configuration globale\n\u2502\n\u251c\u2500\u2500 fail2ban.d\/                 \u2192 R\u00e9pertoire de surcharge de config globale\n\u2502     \u2514\u2500\u2500 *.conf                \u2192 Tes propres ajustements g\u00e9n\u00e9raux\n\u2502\n\u251c\u2500\u2500 filter.d\/                   \u2192 Filtres qui d\u00e9tectent les intrusions\n\u2502     \u251c\u2500\u2500 3proxy.conf           \u2192 Filtre pour 3proxy\n\u2502     \u251c\u2500\u2500 apache-auth.conf      \u2192 D\u00e9tection des \u00e9checs d\u2019auth Apache\n\u2502     \u251c\u2500\u2500 apache-badbots.conf   \u2192 D\u00e9tection des robots malveillants\n\u2502     \u2514\u2500\u2500 \u2026                     \u2192 Autres Filtres disponibles\n\u2502\n\u251c\u2500\u2500 jail.conf                   \u2192 Configuration par d\u00e9faut des jails\n\u2502\n\u251c\u2500\u2500 jail.d\/                     \u2192 R\u00e9pertoire pour tes propres jails\n\u2502     \u2514\u2500\u2500 defaults-debian.conf  \u2192 Param\u00e8tres sp\u00e9cifiques \u00e0 Debian\n\u2502     \u2514\u2500\u2500 *.local               \u2192 Fichiers de tes jails personnalis\u00e9es\n\u2502\n\u251c\u2500\u2500 paths-common.conf           \u2192 D\u00e9finitions des chemins de logs\n\u251c\u2500\u2500 paths-debian.conf           \u2192 Sp\u00e9cifique \u00e0 Debian (Apache, SSH, etc.)\n\u2514\u2500\u2500 paths-opensuse.conf         \u2192 Sp\u00e9cifique \u00e0 openSUSE<\/pre>\n\n\n\n<p>Pour s&rsquo;y retrouver et y voir plus clair, voici un r\u00e9capitulatif.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Fichier \/ Dossier<\/strong><\/th><th><strong>R\u00f4le \/ Description<\/strong><\/th><th><strong>Usage recommand\u00e9<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>fail2ban.conf<\/strong><\/td><td>Fichier principal de configuration globale (param\u00e8tres g\u00e9n\u00e9raux de Fail2Ban)<\/td><td>Ne pas modifier directement, surcharger via <strong>fail2ban.d<\/strong><\/td><\/tr><tr><td><strong>fail2ban.d\/<\/strong><\/td><td>R\u00e9pertoire pour ajouter des fichiers de configuration personnalis\u00e9s pour les param\u00e8tres globaux<\/td><td>Cr\u00e9er des fichiers <strong>.conf<\/strong> pour personnaliser la config<\/td><\/tr><tr><td><strong>jail.conf<\/strong><\/td><td>Fichier principal d\u00e9finissant les <strong>jails<\/strong> (associations service + filtre + action)<\/td><td>Ne pas modifier directement, utiliser <strong>jail.d\/<\/strong><\/td><\/tr><tr><td><strong>jail.d\/<\/strong><\/td><td>R\u00e9pertoire pour ajouter ou activer des jails personnalis\u00e9es<\/td><td>Cr\u00e9er un fichier <strong>.conf<\/strong> par jail pour surcharger ou ajouter des prisons<\/td><\/tr><tr><td><strong>filter.d\/<\/strong><\/td><td>Contient les <strong>filtres<\/strong> (regex) utilis\u00e9s pour d\u00e9tecter les \u00e9checs dans les logs<\/td><td>Ajouter ou modifier un filtre si besoin<\/td><\/tr><tr><td><strong>action.d\/<\/strong><\/td><td>Contient les <strong>actions<\/strong> ex\u00e9cut\u00e9es lorsqu\u2019un filtre d\u00e9tecte un comportement suspect (ban, mail\u2026)<\/td><td>Ajouter ou personnaliser des actions selon l\u2019environnement<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Chaque&nbsp;fichier&nbsp;<strong>.conf<\/strong>&nbsp;peut \u00eatre remplac\u00e9 par un fichier nomm\u00e9&nbsp;<strong>.local<\/strong>.<\/p>\n\n\n\n<p>Les modifications doivent avoir lieu dans le fichier <strong>.local<\/strong>&nbsp;et non dans le fichier <strong>.conf<\/strong>, donc il&nbsp;ne faut en aucun cas modifier&nbsp;<strong>jail.conf<\/strong>&nbsp;et&nbsp;<strong>fail2ban.conf<\/strong>&nbsp;car vous risquez de perdre leur contenu \u00e0 la prochaine mise \u00e0 jour de la distribution, ils doivent&nbsp;servir uniquement de r\u00e9f\u00e9rence et de documentation.<\/p>\n\n\n\n<h2 id=\"Param\u00e9trage-par-d\u00e9faut\">Param\u00e9trage par d\u00e9faut<\/h2>\n\n\n\n<p>Sur <strong>Debian<\/strong>, par d\u00e9faut&nbsp;la&nbsp;prison&nbsp;(jail) <strong>sshd<\/strong> est <strong>active<\/strong>, ainsi elle prot\u00e8ge des attaques bruteforce contre le service SSH.<\/p>\n\n\n\n<p>Les param\u00e8tres par d\u00e9faut sont visibles dans le fichier&nbsp;<strong>\/etc\/fail2ban\/jail.conf<\/strong>.<\/p>\n\n\n\n<p>La section <strong>[DEFAULT]<\/strong> d\u00e9finit les param\u00e8tres globaux qui s\u2019appliquent \u00e0 toutes les prisons (<em>jails<\/em>) si ceux-ci ne sont pas explicitement red\u00e9finis dans la configuration d\u2019une prison.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Param\u00e8tre<\/strong><\/th><th><strong>Description<\/strong><\/th><th><strong>Valeur par d\u00e9faut<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>ignoreip<\/strong><\/td><td>Liste d\u2019adresses IP ou plages \u00e0 ne jamais bannir<\/td><td>127.0.0.1\/8<\/td><\/tr><tr><td><strong>bantime<\/strong><\/td><td>Dur\u00e9e du bannissement d\u2019une IP (en secondes)<\/td><td>600 (10 min)<\/td><\/tr><tr><td><strong>findtime<\/strong><\/td><td>Intervalle de temps pendant lequel les \u00e9checs sont compt\u00e9s<\/td><td>600 (10 min)<\/td><\/tr><tr><td><strong>maxretry<\/strong><\/td><td>Nombre d\u2019\u00e9checs autoris\u00e9s avant bannissement<\/td><td>5<\/td><\/tr><tr><td><strong>backend<\/strong><\/td><td>M\u00e9thode de surveillance des journaux (auto, systemd, polling\u2026)<\/td><td>auto<\/td><\/tr><tr><td><strong>usedns<\/strong><\/td><td>Utilisation de la r\u00e9solution DNS inverse (yes, no, warn, raw)<\/td><td>warn<\/td><\/tr><tr><td><strong>logencoding<\/strong><\/td><td>Encodage utilis\u00e9 pour lire les fichiers de log<\/td><td>auto<\/td><\/tr><tr><td><strong>enabled<\/strong><\/td><td>Activation d\u2019une jail<\/td><td>false<\/td><\/tr><tr><td><strong>filter<\/strong><\/td><td>Nom du filtre associ\u00e9 \u00e0 la jail<\/td><td>%(__name__)s<\/td><\/tr><tr><td><strong>port<\/strong><\/td><td>Ports surveill\u00e9s (un ou plusieurs)<\/td><td>0:65535 (tous)<\/td><\/tr><tr><td><strong>protocol<\/strong><\/td><td>Protocole r\u00e9seau \u00e0 surveiller<\/td><td>tcp<\/td><\/tr><tr><td><strong>chain<\/strong><\/td><td>Cha\u00eene du pare-feu o\u00f9 ajouter les r\u00e8gles<\/td><td>INPUT<\/td><\/tr><tr><td><strong>destemail<\/strong><\/td><td>Adresse email de destination des alertes<\/td><td>root@localhost<\/td><\/tr><tr><td><strong>sender<\/strong><\/td><td>Adresse email de l\u2019exp\u00e9diteur<\/td><td>root@localhost<\/td><\/tr><tr><td><strong>mta<\/strong><\/td><td>Agent de transport de mail utilis\u00e9<\/td><td>sendmail<\/td><\/tr><tr><td><strong>banaction<\/strong><\/td><td>Action appliqu\u00e9e pour bannir sur les ports sp\u00e9cifi\u00e9s<\/td><td>iptables-multiport<\/td><\/tr><tr><td><strong>banaction_allports<\/strong><\/td><td>Action appliqu\u00e9e pour bannir sur tous les ports<\/td><td>iptables-allports<\/td><\/tr><tr><td><strong>action<\/strong><\/td><td>Actions ex\u00e9cut\u00e9es lorsqu\u2019un filtre d\u00e9tecte une correspondance<\/td><td>%(action_)s<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>La section <strong># JAILS<\/strong> du fichier, indique les param\u00e8tres des prisons (jails).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Param\u00e8tre<\/strong><\/th><th><strong>Description<\/strong><\/th><th>Exemple<\/th><\/tr><\/thead><tbody><tr><td><strong>[xxx]<\/strong><\/td><td>Indique le nom de la jail<\/td><td>[sshd]<\/td><\/tr><tr><td><strong>enabled<\/strong><\/td><td>Active la jail<\/td><td>true<\/td><\/tr><tr><td><strong>port<\/strong><\/td><td>Port \u00e0 surveiller<\/td><td>22<\/td><\/tr><tr><td><strong>filter<\/strong><\/td><td>Utilise le filtre <strong>\/etc\/fail2ban\/filter.d\/xxx.conf<\/strong> (sans le .conf)<\/td><td>sshd<\/td><\/tr><tr><td><strong><strong>logpath<\/strong><\/strong><\/td><td>Indique le <strong>chemin du ou des fichiers journaux<\/strong> (logs) que Fail2Ban doit surveiller pour d\u00e9tecter les \u00e9checs ou comportements suspects<\/td><td>\/var\/log\/auth.log<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Les valeurs repr\u00e9sent\u00e9es ainsi <strong>%(\u2026 \u2026)s<\/strong> sont des variables qui sont d\u00e9finies dans les fichiers de configuration <strong>\/etc\/fail2ban\/paths_common.conf<\/strong> et <strong>\/etc\/fail2ban\/paths_debian.conf<\/strong>.<br>La variable <strong>%(sshd_logs)s<\/strong> est \u00e9gale \u00e0 <strong>\/var\/log\/auth.log<\/strong>.<br>Le parametre <strong>port = ssh<\/strong> est \u00e9gale \u00e0 <strong>port = 22<\/strong> (on peut mettre directement le num\u00e9ro du port, 22 pour ssh). Si vous avez chang\u00e9 le port par d\u00e9faut, changez ici en cons\u00e9quence.<\/p>\n\n\n\n<p>L&rsquo;activation de la prison&nbsp;(jail) <strong>sshd<\/strong> se trouve dans le fichier&nbsp;<strong>\/etc\/fail2ban\/jail.d\/defaults-debian.conf<\/strong>&nbsp;gr\u00e2ce au param\u00e8tre&nbsp;<strong>enabled<\/strong>&nbsp;\u00e0&nbsp;<strong>true<\/strong>.<\/p>\n\n\n\n<p>Sch\u00e9ma simplifi\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sshd (jail)<br>    <em>|<\/em><br>    <em>|---><\/em> enabled \u2192 true<br>    <em>|---><\/em> logpath<em> \u2192 <\/em>\/var\/log\/auth.log<br>    <em>|---><\/em> filter \u2192 filter.d\/sshd.conf<br>    <em>|---><\/em> action \u2192 action.d\/iptables-multiport.conf<\/pre>\n\n\n\n<p><strong>Fail2ban<\/strong> va alors scruter le contenu de&nbsp;<strong>\/var\/log\/auth.log<\/strong>&nbsp;afin de v\u00e9rifier les tentatives de connexion SSH.<br>Ensuite il reporte tout dans son fichier journal. Ainsi pour v\u00e9rifier si des d\u00e9tections ont lieu, il faut regarder dans&nbsp;le fichier&nbsp;<strong>\/var\/log\/fail2ban.log<\/strong>.<\/p>\n\n\n\n<p>Notes :<\/p>\n\n\n\n<p><strong>Found&nbsp;<\/strong>: l\u2019occurrence est trouv\u00e9e<br><strong>Ban&nbsp;<\/strong>: le seuil est d\u00e9pass\u00e9 (maxfailure) et l&rsquo;action est r\u00e9alis\u00e9e<\/p>\n\n\n\n<p>Explication de l\u2019exemple <strong>[sshd]<\/strong> avec les valeurs par d\u00e9faut :<\/p>\n\n\n\n<p>Si une machine tente de se connecter \u00e0 SSH et \u00e9choue <strong>5 fois<\/strong> (maxretry = 5).<br>Si ces tentatives se produisent <strong>dans une fen\u00eatre de 600 secondes<\/strong> (findtime = 600, soit 10 minutes).<br>Alors <strong>Fail2Ban<\/strong> d\u00e9clenche la jail <strong>[sshd]<\/strong> et <strong>bloque uniquement le port 22<\/strong> (port = 22) en <strong>TCP<\/strong> (protocol = tcp).<\/p>\n\n\n\n<p>En r\u00e9sum\u00e9 :<\/p>\n\n\n\n<p>5 \u00e9checs en moins de 10 minutes \u2192 IP bannie sur le port SSH pendant 10 minutes.<\/p>\n\n\n\n<h2 id=\"Configuration-avanc\u00e9e\">Configuration avanc\u00e9e<\/h2>\n\n\n\n<p>Vous pouvez supprimer le fichier&nbsp;<strong>defaults-debian.conf<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>rm \/etc\/fail2ban\/jail.d\/defaults-debian.conf<\/code><\/p><\/blockquote>\n\n\n\n<p>Vous pouvez cr\u00e9er un fichier&nbsp;<strong>jail.local<\/strong>&nbsp;(nomdevotrechoix.local)&nbsp;dans le dossier&nbsp;<strong>\/etc\/fail2ban\/jail.d\/<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano \/etc\/fail2ban\/jail.d\/jail.local<\/code><\/p><\/blockquote>\n\n\n\n<p>Pour configurer les param\u00e8tres globaux (qui concerne donc toutes les prisons, si le param\u00e8tre&nbsp;n&rsquo;est pas d\u00e9fini dans la prison), ressaisissez&nbsp;les param\u00e8tres comme dans l&rsquo;exemple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;INCLUDES]\n\nbefore = paths-debian.conf\n\n&#91;DEFAULT]\n\nignoreip = 127.0.0.1\/8 192.168.1.1\nbantime  = 86400\nfindtime  = 3600\nmaxretry = 5\nbackend = auto\nusedns = warn\nlogencoding = auto\nenabled = false\nfilter = %(__name__)s\nprotocol = all \nchain = INPUT\nport = 0:65535\nfail2ban_agent = Fail2Ban\/%(fail2ban_version)s\ndestemail = root@localhost\nsender = root@localhost\nmta = sendmail\nbanaction = iptables-multiport\nbanaction_allports = iptables-allports\naction = %(action_mwl)s<\/code><\/pre>\n\n\n\n<p>Les param\u00e8tres globaux sont d\u00e9finis dans la&nbsp;section <strong>[DEFAULT]<\/strong>.<\/p>\n\n\n\n<ul><li><strong>[INCLUDES]&nbsp;<\/strong><\/li><li><strong>before =&nbsp;paths-debian.conf<\/strong>&nbsp;:&nbsp;contient les chemins vers diff\u00e9rents fichiers logs<\/li><li><strong>[DEFAULT]<\/strong>&nbsp;<\/li><li><strong>ignoreip =&nbsp;127.0.0.1\/8 192.168.1.1<\/strong>&nbsp;:&nbsp;ne pas bannir les IP 127.0.0.1 et&nbsp;192.168.1.1<\/li><li><strong>bantime &nbsp;=&nbsp;86400<\/strong>&nbsp;:&nbsp;temps&nbsp;de&nbsp;bannissement&nbsp;(1 jour)<\/li><li><strong>findtime &nbsp;=&nbsp;3600<\/strong>&nbsp;:&nbsp;intervalle de temps pendant laquelle les essais&nbsp;vont incr\u00e9menter maxretry (1 heure)<\/li><li><strong>maxretry =&nbsp;5<\/strong>&nbsp;:&nbsp;nombre de tentatives de connexion&nbsp;\u00e9chou\u00e9<\/li><li><strong>backend =&nbsp;auto<\/strong>&nbsp;:&nbsp;m\u00e9thode de surveillance des logs (auto)<\/li><li><strong>usedns =&nbsp;warn<\/strong>&nbsp;: si un nom d&rsquo;h\u00f4te est rencontr\u00e9, une recherche DNS sera effectu\u00e9e<\/li><li><strong>logencoding =&nbsp;auto<\/strong>&nbsp;:&nbsp;encodage des fichiers logs g\u00e9r\u00e9s par les&nbsp;prisons<\/li><li><strong>enabled =&nbsp;false<\/strong>&nbsp;: d\u00e9sactive&nbsp;par d\u00e9faut&nbsp;les prisons, pour pouvoir les activer une par une<\/li><li><strong>filter =&nbsp;%(__name__)s<\/strong>&nbsp;:&nbsp;les prisons ont des noms correspondant \u00e0 leur nom de filtre<\/li><li><strong>protocol =&nbsp;all<\/strong>&nbsp;: bloque le(s) port(s) sur tous les protocoles (TCP\/UDP\/ICMP)<\/li><li><strong>chain =&nbsp;INPUT<\/strong>&nbsp;:&nbsp;cha\u00eene qui devraient \u00eatre ajout\u00e9s dans les actions iptables<\/li><li><strong>port =&nbsp;0:65535<\/strong>&nbsp;: ports pouvant \u00eatre bannis<\/li><li><strong>fail2ban_agent =&nbsp;Fail2Ban\/%(fail2ban_version)s<\/strong>&nbsp;:&nbsp;variable utilis\u00e9 par Fail2Ban<\/li><li><strong>destemail =&nbsp;root@localhost<\/strong>&nbsp;:&nbsp;adresse email pour envoyer des notifications de banissement<\/li><li><strong>sender =&nbsp;root@localhost<\/strong>&nbsp;: adresse email de l&rsquo;\u00e9meteur<\/li><li><strong>mta =&nbsp;sendmail<\/strong>&nbsp;:&nbsp;type de&nbsp;serveur de messagerie \u00e9lectronique utilis\u00e9<\/li><li><strong>banaction =&nbsp;iptables-multiport<\/strong>&nbsp;:&nbsp;bannissement de l&rsquo;IP sur un port sp\u00e9cifique<\/li><li><strong>banaction_allports =&nbsp;iptables-allports<\/strong>&nbsp;:&nbsp;bannissement de l&rsquo;IP sur tous les ports<\/li><li><strong>action =&nbsp;%(action_mwl)s<\/strong>&nbsp;:&nbsp;bannie l&rsquo;IP + envoie un mail avec whois + log l\u2019\u00e9v\u00e9nement<\/li><\/ul>\n\n\n\n<p>Pour cr\u00e9er une prison (jail) du service SSH, ressaisissez&nbsp;les param\u00e8tres comme dans l&rsquo;exemple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;sshd]\nenabled = true\nport = 2222\nlogpath = \/var\/log\/auth.log\nfilter = sshd\nbanaction = %(banaction_allports)s\naction = %(action_mwl)s\nmaxretry = 4\nfindtime = 3600\nbantime = 86400<\/code><\/pre>\n\n\n\n<ul><li><strong>[sshd]<\/strong>&nbsp;: nom de la&nbsp;prison&nbsp;(jail)<\/li><li><strong>enabled =&nbsp;true&nbsp;<\/strong>: active&nbsp;la&nbsp;prison&nbsp;(jail)<\/li><li><strong>port =&nbsp;2222&nbsp;<\/strong>:&nbsp;le&nbsp;port&nbsp;\u00e0 bloquer<\/li><li><strong>logpath =&nbsp;\/var\/log\/auth.log<\/strong><strong>&nbsp;<\/strong>:&nbsp;emplacement du fichier&nbsp;de log \u00e0 surveiller<\/li><li><strong>backend =&nbsp;%(sshd_backend)s&nbsp;<\/strong>:&nbsp;m\u00e9thode de surveillance des logs (auto)<\/li><li><strong>filter =&nbsp;<\/strong><strong>sshd<\/strong>&nbsp;: utilise le filtre&nbsp;\/etc\/fail2ban\/filter.d\/sshd.conf (sshd, sans le .conf)<\/li><li><strong>banaction =&nbsp;%(banaction_allports)s&nbsp;<\/strong>:&nbsp;bannissement de l&rsquo;IP sur tous les ports (iptables-allports)<\/li><li><strong>action =&nbsp;%(action_mwl)s&nbsp;<\/strong>:&nbsp;envoye&nbsp;un mail avec le whois et les logs de l&rsquo;ip bannie<\/li><li><strong>maxretry =&nbsp;4&nbsp;<\/strong>: nombre de tentatives de connexion&nbsp;\u00e9chou\u00e9<\/li><li><strong>findtime =&nbsp;3600&nbsp;<\/strong>:&nbsp;intervalle de temps pendant laquelle les essais de connexion vont incr\u00e9menter maxretry (1 heure)<\/li><li><strong>bantime =&nbsp;86400&nbsp;<\/strong>: temps&nbsp;de&nbsp;bannissement&nbsp;(1 jour)<\/li><\/ul>\n\n\n\n<p>Cela permet d&rsquo;ajuster&nbsp;la configuration et le&nbsp;filtre&nbsp;associ\u00e9 \u00e0 cette prison, en sp\u00e9cifiant par exemple un nombre de tentatives diff\u00e9rent de la valeur par d\u00e9faut, un port diff\u00e9rent, un temps&nbsp;de&nbsp;bannissement diff\u00e9rent de la valeur par d\u00e9faut, etc&#8230;<\/p>\n\n\n\n<p>Explication de l\u2019exemple <strong>[sshd]<\/strong> avec ses param\u00e8tres :<\/p>\n\n\n\n<p>Si une machine tente de se connecter \u00e0 SSH et \u00e9choue <strong>4 fois<\/strong> (maxretry = 4).<br>Si ces tentatives se produisent <strong>dans une fen\u00eatre de 3600 secondes<\/strong> (findtime = 3600, soit 1 heure).<br>Alors <strong>Fail2Ban<\/strong> d\u00e9clenche la jail <strong>[sshd]<\/strong> et <strong>bloque tous les ports<\/strong> (banaction = %(banaction_allports)s) sur <strong>tous les protocoles<\/strong> (protocol = all) pendant&nbsp;<strong>86400 secondes<\/strong> (bantime = 86400, soit 1 jour) et <strong>envoie&nbsp;un mail<\/strong> &amp; <strong>\u00e9crit l\u2019\u00e9v\u00e9nement<\/strong> dans les logs Fail2Ban (action = %(action_mwl)s).<\/p>\n\n\n\n<p>En r\u00e9sum\u00e9 :<\/p>\n\n\n\n<p>4 \u00e9checs en moins de 1 heure \u2192 IP bannie sur tous les ports pendant 1 jour + un mail est envoy\u00e9 + log l\u2019\u00e9v\u00e9nement.<\/p>\n\n\n\n<p>Le param\u00e8tre&nbsp;<strong>action&nbsp;<\/strong>correspond \u00e0 l&rsquo;ex\u00e9cution d&rsquo;un ou plusieurs fichier(s) du dossier&nbsp;<strong>\/etc\/fail2ban\/action.d\/<\/strong>, typiquement, <strong>Fail2ban <\/strong>ex\u00e9cutera une action lorsqu&rsquo;une ligne de log d\u00e9tect\u00e9e par nos filtres apparaitra un certain nombre de fois. Les actions peuvent alors \u00eatre des \u00e9v\u00e9nements de&nbsp;protections (bannir l&rsquo;IP en question, etc&#8230;) ou alors des \u00e9v\u00e9nements d&rsquo;alerte (envoyer un mail, etc &#8230;).<\/p>\n\n\n\n<p>Le param\u00e8tre&nbsp;<strong>filter&nbsp;<\/strong>correspond \u00e0 un fichier de configuration situ\u00e9 dans le dossier&nbsp;<strong>\/etc\/fail2ban\/filter.d\/<\/strong>, il faut le d\u00e9clarer <strong>sans l&rsquo;extension<\/strong> (.conf). Ce fichier de configuration va contenir des expressions&nbsp;r\u00e9guli\u00e8res qui permettent de d\u00e9terminer si une ligne dans les logs est consid\u00e9r\u00e9e comme un \u00e9chec&nbsp;d&rsquo;authentification.<\/p>\n\n\n\n<h2 id=\"Configurer-les-filtres\">Configurer les filtres<\/h2>\n\n\n\n<p><strong>Fail2ban<\/strong> fournit pas mal de prisons pour la plupart des services&nbsp;r\u00e9seaux (HTTP, SMTP, SSH, &#8230;). Chaque prison est associ\u00e9 \u00e0 un fichier de filtrage du m\u00eame nom dans le dossier&nbsp;<strong>\/etc\/fail2ban\/filter.d\/<\/strong>&nbsp;(pour la prison [sshd], le filtre sshd.conf).<\/p>\n\n\n\n<p>Ces fichiers contiennent une ou plusieurs expressions r\u00e9guli\u00e8res qui servent de motif de recherche pour les lignes correspondantes dans les logs. Les expressions sont d\u00e9finies par la directive&nbsp;<strong>failregex<\/strong>.<\/p>\n\n\n\n<p>Voici un exemple de l&rsquo;une des expressions du filtre&nbsp;<strong>sshd.conf<\/strong>.&nbsp;Sans d\u00e9tailler toute l&rsquo;expression, on recherche ici les \u00e9checs d&rsquo;authentification sur le service SSH. On va donc ici appliquer ce filtre sur un fichier de log du service SSH.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>failregex = ^%(__prefix_line)s(?:error: PAM: )?&#91;aA]uthentication (?:failure|error|failed) for .* from &lt;HOST>( via \\S+)?\\s*$<\/code><\/pre>\n\n\n\n<p>Cette expression entrera en correspondance avec toutes les lignes du fichier de log du service SSH (\/var\/log\/auth.log) contenant des erreurs ou des \u00e9checs d&rsquo;authentification.<\/p>\n\n\n\n<h2 id=\"Cr\u00e9er-son-propre-filtre\">Cr\u00e9er son propre filtre<\/h2>\n\n\n\n<p>Pour rappel, les filtres sont stock\u00e9s dans&nbsp;<strong>\/etc\/fail2ban\/filter.d\/<\/strong>,&nbsp;nous allons donc nous y rendre pour cr\u00e9er un nouveau filtre. Chaque filtre est repr\u00e9sent\u00e9 et assign\u00e9 par son nom dans une configuration de prison (jail) dans Fail2ban. On va donc \u00eatre attentif au nom que l&rsquo;on donne \u00e0 notre filtre.<\/p>\n\n\n\n<p>Un filtre sous Fail2ban va contenir une structure pr\u00e9d\u00e9finie qui ressemble \u00e0 ceci&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;INCLUDES]\nbefore = \nafter =\n&#91;Definition]\n_daemon =\nfailregex =\nignoreregex =\n&#91;Init]\nmaxlines =\njournalmatch =<\/code><\/pre>\n\n\n\n<p>Dans la partie&nbsp;<strong>[Definition]<\/strong>, <strong>failregex <\/strong>et <strong>ignoreregex <\/strong>sont important. Pour s&rsquo;y retrouver et y voir plus clair, voici un r\u00e9capitulatif.<\/p>\n\n\n\n<ul><li><strong>[INCLUDES]&nbsp;<\/strong>&nbsp;(facultatif)<\/li><li><strong>before&nbsp;<\/strong>:&nbsp;importation d&rsquo;un autre filtre avant la d\u00e9claration de se&nbsp;filtre,&nbsp;ce champ est optionnel<\/li><li><strong>after&nbsp;<\/strong>:&nbsp;importation d&rsquo;un autre filtre apr\u00e8s&nbsp;la d\u00e9claration de se&nbsp;filtre,&nbsp;ce champ est optionnel<\/li><li><strong>[Definition]<\/strong><\/li><li><strong>_daemon<\/strong>&nbsp;:&nbsp;utilis\u00e9e pour construire l&rsquo;expression r\u00e9guli\u00e8re __prefix_line,&nbsp;ce champ est optionnel (utilis\u00e9 avec common.conf)<\/li><li><strong>failregex<\/strong>&nbsp;:&nbsp;expression&nbsp;r\u00e9guli\u00e8re&nbsp;du filtre, on d\u00e9finit ici ce qu&rsquo;il faut surveiller (toutes&nbsp;les&nbsp;lignes de log&nbsp;analys\u00e9es qui correspondront aux lignes mis ici seront susceptibles de d\u00e9clencher l&rsquo;action associ\u00e9e dans la jail)<\/li><li><strong>ignoreregex&nbsp;<\/strong>:&nbsp;exceptions que l&rsquo;on souhaite d\u00e9clarer,&nbsp;ce champ est optionnel, mais il peut avoir un r\u00e9el int\u00e9r\u00eat dans certains cas<\/li><li><strong>[Init]&nbsp;<\/strong>&nbsp;(facultatif)<\/li><li><strong>maxlines&nbsp;<\/strong>:&nbsp;nombre de lignes de log \u00e0 mettre en m\u00e9moire tampon pour les recherches regex multi-lignes,&nbsp;ce champ est optionnel<\/li><li><strong>journalmatch&nbsp;<\/strong>:&nbsp;sp\u00e9cifie la correspondance de log systemd utilis\u00e9e pour filtrer les entr\u00e9es de log,&nbsp;ce champ est optionnel<\/li><\/ul>\n\n\n\n<p>Pour cr\u00e9er un filtre personnalis\u00e9, je rappelle qu&rsquo;il faut avoir clairement identifi\u00e9 :<\/p>\n\n\n\n<ol><li>La ou les ligne(s) de logs que l&rsquo;on souhaite surveiller<\/li><li>Le ou les fichier(s) de logs dans lesquel(s) ces lignes seront ajout\u00e9es<\/li><\/ol>\n\n\n\n<p>imaginons un service fictif&nbsp;qui \u00e9crit ses&nbsp;logs dans&nbsp;<strong>\/var\/log\/log-perso.log<\/strong>.<\/p>\n\n\n\n<p>Pour l&rsquo;exemple, je vais cr\u00e9er un filtre nomm\u00e9&nbsp;<strong>filtre-perso.conf<\/strong>,&nbsp;qui va d\u00e9tecter une expression dans le fichier de log fictif.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/fail2ban\/filter.d\/filtre-perso.conf<\/code><\/p><\/blockquote>\n\n\n\n<p>Je souhaite qu&rsquo;\u00e0 chaque fois que&nbsp;mon service fictif&nbsp;g\u00e9n\u00e8re&nbsp;une ligne du genre, ci dessous, dans ses logs,&nbsp;l&rsquo;IP source soit bannie.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Apr-07-13 07:08:36 Invalid command user from 192.168.1.4<\/code><\/pre>\n\n\n\n<p>Je vais donc cr\u00e9er&nbsp;l&rsquo;expression r\u00e9guli\u00e8re me permettant de surveiller l&rsquo;apparition de ce genre de ligne dans mes logs.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nfailregex = .* Invalid command .* from &lt;HOST&gt;\nignoreregex =<\/code><\/pre>\n\n\n\n<p>Notez tout d&rsquo;abord que mon expression r\u00e9guli\u00e8re n&rsquo;est pas complexe du tout.&nbsp;<br>La pr\u00e9sence de la chaine&nbsp;<strong>&lt;HOST&gt;<\/strong>&nbsp;est obligatoire dans un filtre <strong>Fail2ban <\/strong>lorsque l&rsquo;on souhaite r\u00e9cup\u00e9rer une IP, par exemple pour la renseigner \u00e0 <strong>iptables <\/strong>en vue d&rsquo;un bannissement temporaire. La chaine&nbsp;<strong>&lt;HOST&gt;<\/strong>&nbsp;est donc positionn\u00e9e \u00e0 l&rsquo;endroit o\u00f9 sera l&rsquo;IP dans la ligne de logs filtr\u00e9e.<\/p>\n\n\n\n<p>Une fois votre <strong>failregex <\/strong>cr\u00e9\u00e9, il est possible de le tester rapidement via la commande&nbsp;<strong>fail2ban-regex<\/strong>, pour tester le filtre&nbsp;<strong>filtre-perso.conf<\/strong>&nbsp;sur le fichier journal&nbsp;<strong>log-perso.log<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-regex \/var\/log\/log-perso.log \/etc\/fail2ban\/filter.d\/filtre-perso.conf<\/code><\/p><\/blockquote>\n\n\n\n<p>Ce que fait la commande :<\/p>\n\n\n\n<ul><li><strong>Scanne le fichier de log<\/strong> ligne par ligne.<\/li><li><strong>Compare chaque ligne avec le failregex<\/strong> du filtre.<\/li><li><strong>Affiche un r\u00e9sum\u00e9<\/strong> :<ul><li><strong>lines<\/strong> = nombre total de lignes analys\u00e9es<\/li><li><strong>ignored<\/strong> = lignes ignor\u00e9es par ignoreregex<\/li><li><strong>matched<\/strong> = lignes qui correspondent \u00e0 failregex<\/li><li><strong>missed<\/strong> = lignes qui ne correspondent pas<\/li><\/ul><\/li><li><strong>Utile pour valider<\/strong> que votre filtre d\u00e9tecte bien les tentatives \u00e9chou\u00e9es <strong>avant de l\u2019ajouter \u00e0 une jail<\/strong>.<\/li><\/ul>\n\n\n\n<p>Voici mon fichier de log fictif de mon service fictif :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Apr-07-13 07:08:28 Accepted command paul from 192.168.0.15\nApr-07-13 07:08:32 Invalid command thomas from 192.168.0.15\nApr-07-13 07:08:36 Accepted command pierre from 192.168.0.15\nApr-07-13 07:08:41 Accepted command mic from 192.168.0.15\nApr-07-13 07:08:45 Invalid command pierre from 192.168.0.15<\/code><\/pre>\n\n\n\n<p>La sortie <strong>Lines: 5 lines, 0 ignored, 2 matched, 3 missed<\/strong> indique que <strong>Fail2Ban <\/strong>a analys\u00e9 un total de 5 lignes du fichier de log. Aucune ligne n\u2019a \u00e9t\u00e9 ignor\u00e9e (0 ignored), 2 lignes correspondent \u00e0 l\u2019expression r\u00e9guli\u00e8re du filtre (2 matched), et 3 lignes n\u2019ont pas correspondu (3 missed).<\/p>\n\n\n\n<p>On voit bien les 2 lignes&nbsp;<strong>Invalid command<\/strong>.<\/p>\n\n\n\n<p>Modifions maintenant notre fichier de configuration pour activer notre nouveau filtre.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano \/etc\/fail2ban\/jail.d\/jail.local<\/code><\/p><\/blockquote>\n\n\n\n<p>Ne pas oublier de d\u00e9clarer le filtre SANS le .conf (filter = filtre-perso).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;filtre-perso]\nenabled = true\nport = 1234\nlogpath = \/var\/log\/log-perso.log\nfilter = filtre-perso\nbanaction = %(banaction_allports)s\naction = %(action_mwl)s\nmaxretry = 8\nfindtime = 3600\nbantime = 86400<\/code><\/pre>\n\n\n\n<p>En vrais vous n&rsquo;avez pas besoin de d\u00e9clarer le filtre si le nom de la prison (jail) et le&nbsp;m\u00eame que le nom du filtre (nom de la prison <strong>[filtre-perso]<\/strong> et nom du filtre <strong>filtre-perso<\/strong>).<\/p>\n\n\n\n<h2 id=\"Commandes-de-base\">Commandes de base<\/h2>\n\n\n\n<h3>Voir le status des jails<\/h3>\n\n\n\n<p>Pour savoir si votre jail est actif, vous devriez le voir affich\u00e9, apr\u00e8s avoir taper cette commande :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-client status<\/code><\/p><\/blockquote>\n\n\n\n<p>Cette commande affiche tous les jails que fail2ban traite.<\/p>\n\n\n\n<p>Pour savoir si une de vos jails de votre fail2ban a bannis une ou plusieurs IP, taper cette commande :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-client status <strong>nom_du_jail<\/strong><\/code><\/p><\/blockquote>\n\n\n\n<p>Cette commande va afficher le nombre de tentative lu dans vos logs, le nombre de bannis et, le plus int\u00e9ressant, les IPs qui sont bannis temporairement.<\/p>\n\n\n\n<h3>Red\u00e9marrer fail2ban<\/h3>\n\n\n\n<p>Pour&nbsp;red\u00e9marrer fail2ban :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>systemctl restart fail2ban<\/code><\/p><\/blockquote>\n\n\n\n<h3>Tester un filtre<\/h3>\n\n\n\n<p>Pour tester un filtre sur un fichier de log particulier :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-regex \/var\/log\/apache2\/access.log \/etc\/fail2ban\/filter.d\/apache-badbots.conf<\/code><\/p><\/blockquote>\n\n\n\n<p>Cette commande teste le filtre apache-badbots sur le fichier journal d&rsquo;Apache (prend en premier param\u00e8tre une chaine ou un fichier de log, et en second le filtre que l&rsquo;on souhaite tester)<\/p>\n\n\n\n<h3>D\u00e9-bannir une IP de l&rsquo;un de vos jails<\/h3>\n\n\n\n<p>Si une de vos adresse IP se retrouve blacklist\u00e9 suite \u00e0 une mauvaise manipulation r\u00e9p\u00e9t\u00e9 ou un test de s\u00e9curit\u00e9. Vous pouvez la retirer de la liste des IP blacklist\u00e9 de fail2ban avec cette commande :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-client set <strong>nom_du_jail<\/strong> unbanip <strong>ip_\u00e0_d\u00e9bannir<\/strong><\/code><\/p><\/blockquote>\n\n\n\n<h3>Bannir manuellement une IP sur l&rsquo;un de vos jails<\/h3>\n\n\n\n<p>Vous voulez tester plus rapidement l&rsquo;interdiction d&rsquo;un acc\u00e8s d&rsquo;une adresse IP, ou bloquer une personne malveillante. Renseignez son IP dans cette commande&nbsp;:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>fail2ban-client set <strong>nom_du_jail<\/strong> banip <strong>ip_\u00e0_bannir<\/strong><\/code><\/p><\/blockquote>\n\n\n\n<h2 id=\"Configurer-une-jail-recidive\">Configurer une jail recidive<\/h2>\n\n\n\n<p>La prison (jail) tr\u00e8s int\u00e9ressante \u00e0 activer,&nbsp;la jail&nbsp;<strong>recidive&nbsp;<\/strong>est une prison (Jail) pour les r\u00e9cidivistes.<\/p>\n\n\n\n<p>Lors de l\u2019activation de cette jail, <strong>Fail2ban <\/strong>scanne son propre fichier de log (<strong>\/var\/log\/fail2ban.log<\/strong>) et y recherche les IPs r\u00e9currentes qui ont \u00e9t\u00e9 bannies par les r\u00e8gles d\u00e9finies dans les autres jails.<\/p>\n\n\n\n<p>Vous pouvez cr\u00e9er un fichier&nbsp;<strong>fail2ban.local<\/strong>&nbsp;(nomdevotrechoix.local)&nbsp;dans le dossier&nbsp;<strong>\/etc\/fail2ban\/fail2ban.d\/<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/fail2ban\/fail2ban.d\/fail2ban.local<\/code><\/p><\/blockquote>\n\n\n\n<p><strong>Fail2ban <\/strong>utilise une base sqlite3. Nous allons d\u00e9finir le param\u00e8tre&nbsp;<strong>dbpurgeage&nbsp;<\/strong>(dur\u00e9e de r\u00e9tention des informations dans la base de donn\u00e9es de Fail2ban) \u00e0 <strong>648000<\/strong> (soit 7.5 jours)&nbsp;pour la configuration de la prison (jail) recidive, ressaisissez&nbsp;les param\u00e8tres comme dans l&rsquo;exemple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Definition]\nloglevel = INFO\nlogtarget = \/var\/log\/fail2ban.log\ndbpurgeage = 648000<\/code><\/pre>\n\n\n\n<p>Maintenent, il faut param\u00e9trer et activer la prison (jail)&nbsp;<strong>recidive<\/strong>.<\/p>\n\n\n\n<p>Dans le&nbsp;fichier&nbsp;<strong>jail.local<\/strong>&nbsp;(nomdevotrechoix.local)&nbsp;dans le dossier&nbsp;<strong>\/etc\/fail2ban\/jail.d\/<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><code>nano\u00a0\/etc\/fail2ban\/jail.d\/jail.local<\/code><\/p><\/blockquote>\n\n\n\n<p>Ressaisissez&nbsp;les param\u00e8tres comme dans l&rsquo;exemple.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;recidive]\nenabled = true\nbantime = 2592000\nfindtime = 604800\nmaxretry = 3\naction = %(action_mwl)s\nbanaction = %(banaction_allports)s\nlogpath = \/var\/log\/fail2ban.log<\/code><\/pre>\n\n\n\n<p>Les IPs sont alors bannies et ceci sur tous les ports pour une p\u00e9riode <strong>plus longue<\/strong> (bantime = 2592000, ici 30 jours)&nbsp;si sur <strong>7 jours<\/strong> (findtime = 604800), une IP est bannie plus de <strong>3 fois<\/strong> (maxretry = 3). C\u2019est pourquoi le param\u00e8tre de r\u00e9tention&nbsp;<strong>dbpurgeage&nbsp;<\/strong>a \u00e9t\u00e9 fix\u00e9 \u00e0 <strong>7.5 jours<\/strong>, sinon la jail&nbsp;recidive&nbsp;ne fonctionnerait pas tr\u00e8s bien.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fail2ban se charge d&rsquo;analyser les logs de divers services (SSH, Apache, FTP, Postifx, \u2026) install\u00e9s sur la machine, puis recherche les \u00e9checs d&rsquo;authentification r\u00e9p\u00e9t\u00e9s et ajoute automatiquement une r\u00e8gle au pare-feu (iptables,  nftables, shorewall ou ufw) pour bannir l&rsquo;adresse IP de la source.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[9,8],"_links":{"self":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/122"}],"collection":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/comments?post=122"}],"version-history":[{"count":39,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/122\/revisions"}],"predecessor-version":[{"id":202,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/posts\/122\/revisions\/202"}],"wp:attachment":[{"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/media?parent=122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/categories?post=122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ligfy.net\/wordpress\/wp-json\/wp\/v2\/tags?post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}