Difference between revisions of "Fail2ban/fr"

From SME Server
Jump to navigationJump to search
 
(71 intermediate revisions by 5 users not shown)
Line 2: Line 2:
  
 
== Fail2ban pour SME Server ==
 
== Fail2ban pour SME Server ==
{{Niveau|Facile|Les instructions sur cette page peuvent être suivis par un débutant.}}
+
{{Level|Facile|Les instructions sur cette page peuvent être suivies par un débutant.}}
  
=== Mainteneur ===
+
== Mainteneur ==
[[User:VIP-ire|Daniel B.]]<br/>
+
[[User:VIP-ire|Daniel B.]]<br />
 
[http://www.firewall-services.com Firewall Services]<br>
 
[http://www.firewall-services.com Firewall Services]<br>
 
mailto:daniel@firewall-services.com
 
mailto:daniel@firewall-services.com
  
=== Description ===
+
Veuillez débattre, apporter des retours et partager des expérimentations sur les forums [http://forums.contribs.org/index.php/topic,51127.0.html '''ici.''']
  
Fail2ban fonctionne en surveillant les fichiers journaux (Ex : /var/log/pwdfail, /var/log/auth.log, etc.) pour les entrées sélectionnées et l'exécution de scripts basés sur eux. Le plus souvent il est utilisé pour bloquer des adresses IP sélectionnés qui peuvent appartenir à des hôtes qui tentent de compromettre la sécurité du système. Il peut interdire une IP de l'hôte qui fait trop de tentatives de connexion ou autre action non désirée dans un laps de temps défini par l'administrateur.
+
== Description ==
  
Fail2ban is typically set up to unban a blocked host within a certain period, so as to not "lock out" any genuine connections that may have been temporarily misconfigured. However, an unban time of several minutes is usually enough to stop a network connection being flooded by malicious connections, as well as reducing the likelihood of a successful dictionary attack.
+
Fail2ban fonctionne en surveillant les fichiers journaux (Ex : /var/log/pwdfail, /var/log/auth.log, etc.) pour les entrées sélectionnées et l'exécution de scripts basés sur eux. Le plus souvent il est utilisé pour bloquer des adresses IP sélectionnées qui peuvent appartenir à des hôtes qui tentent de compromettre la sécurité du système. Il peut interdire une IP de l'hôte qui fait trop de tentatives de connexion ou autre action non désirée dans un laps de temps défini par l'administrateur.
  
{{Tip box|n'est pas seulement un outil contre les attaques par force brute sur SSH, mais il peut être un outil utile contre les attaques de protocole http ou [http://forums.contribs.org/index.php/topic,50162.msg252195.html#msg252195 spam] sur votre serveur. Voir la [[Fail2ban#Jail.conf |section prison]]}}
+
Fail2ban est généralement mis en place pour dé-bannir un hôte bloqué pendant un certain temps, afin de ne pas « verrouiller » les connexions authentiques qui peuvent avoir été temporairement mal configurées. Cependant, un dé-bannissement de plusieurs minutes est généralement suffisant pour arrêter une connexion réseau inondée par des connexions malveillantes, ainsi que de réduire la probabilité d'une attaque réussie par dictionnaire.
  
=== Systèmes requis ===
+
Après l'installation, les services de base les plus importants (et quelques autres supplémentaires) sont surveillés par défaut sans avoir besoin de configuration manuelle (voir [[#Services | Services]]).
Cette contrib a été développé et testé sur SME Server 8 et plus. Il ne fonctionnera probablement pas sur les SME 7.
 
  
{{Note box|L'option SME [http://wiki.contribs.org/AutoBlock AutoBlock SSH] doit être désactivé pour s'assurer que les contrôles de fail2ban du trafic SSH ne sont pas construite dans le Firewall.}}
+
{{Tip box|type=Astuce :|Fail2ban n'est pas seulement un outil contre les attaques par force brute sur SSH, mais il peut être un outil utile contre les attaques de protocole http ou [http://forums.contribs.org/index.php/topic,50162.msg252195.html#msg252195 spam] sur votre serveur. Voir la [[Fail2ban/fr#Jail.conf |section prison.]]}}
  
=== Installation ===
+
== Systèmes requis ==
Configure Firewall-Services's repository:
+
Cette contribution a été développée et testée sur SME Server v8 et suivantes.
  
db yum_repositories set fws repository \
+
{{Note box|type=Note :|L'option [http://wiki.contribs.org/AutoBlock AutoBlock SSH] de SSH devrait être désactivée pour s'assurer que ce soit Fail2ban qui contrôle le trafic SSH et non pas le pare-feu intégré de SME.. '''Or AutoBlock est activé par défaut dans SME 9.x.'''
BaseURL http://repo.firewall-services.com/centos/\$releasever \
+
Pour vérifier qu'AutoBlock est bien désactivé :
EnableGroups no GPGCheck yes \
+
  db configuration show sshd
  Name "Firewall Services" \
+
Si ce n'est pas le cas, voir ci-dessous pour le désactiver.}}
GPGKey http://repo.firewall-services.com/RPM-GPG-KEY \
 
Visible yes status disabled
 
  
 +
==Koozali SME v9/v10==
 +
{{#smeversion: smeserver-fail2ban}}
  
Configure EPEL's repository:
+
== Installation sur Koozali SME==
For SME 8.x,
+
<tabs container><tab name="Pour SME 10">
 +
yum --enablerepo=smecontribs install smeserver-fail2ban
 +
</tab><tab name="Pour SME 9">
 +
* Installez les paquets
  
/sbin/e-smith/db yum_repositories set epel repository \
+
  yum --enablerepo=smecontribs install smeserver-fail2ban
Name 'Epel - EL5' \
 
BaseUrl 'http://download.fedoraproject.org/pub/epel/5/$basearch' \
 
MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch' \
 
EnableGroups no \
 
GPGCheck yes \
 
GPGKey http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL \
 
Visible no \
 
status disabled
 
 
 
signal-event yum-modify
 
 
 
*install the rpms
 
 
 
  yum --enablerepo=fws --enablerepo=epel install smeserver-fail2ban
 
 
 
{{note box| you have to install the fail2ban version of fws repository and not the epel version}}
 
 
 
* Appply the needed configuration:
 
  
 +
* Appliquer la configuration nécessaire :
 +
Prenez soin d'exécuter ces trois commandes avec précision. Ne pas le faire peut empêcher la connexion à distance via ssh.
 +
db configuration setprop masq status enabled
 
  expand-template /etc/rc.d/init.d/masq
 
  expand-template /etc/rc.d/init.d/masq
 
  /etc/init.d/masq restart
 
  /etc/init.d/masq restart
 
  signal-event fail2ban-conf
 
  signal-event fail2ban-conf
or
+
 
 +
ou bien les commandes suivantes qui sont équivalentes après redémarrage :
 +
db configuration setprop masq status enabled
 
  signal-event post-upgrade; signal-event reboot
 
  signal-event post-upgrade; signal-event reboot
 +
{{warning box|type=Attention :|à défaut d'exécuter l'une de ces commandes, l'accès au réseau sera verrouillé le temps de recharger les règles d'iptables.}}
  
{{warning box| Failing to run either of these command will completly lock network access next time iptables rules are reloaded}}
+
{{warning box|type=Attention :|le service de masquage doit être activé pour que Fail2ban fonctionne correctement ; si vous le désactivez, Fail2ban ne bannira rien.}}
 +
</tab>
 +
</tabs>
 +
{{warning box|type=Attention : |à partir de SME10 et de smeserver-fail2ban 0.1.18-29, le changement manuel de configuration est inclus dans la sauvegarde principale, si vous utilisez des fichiers .local dans les dossiers action.d/ fail2ban.d/ filter.d/ jail.d/. Toute modification apportée au fichier .conf appartenant au paquet n'est pas ajoutée dans la sauvegarde principale. Utilisez les fichiers .local pour remplacer le fichier .conf et ils seront dans la sauvegarde. Voir http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Configuration.}}
  
=== Commandes DB ===
+
== Désactiver la fonctionalité AutoBlock sur SME 9.x et supérieur ==
there is no panel yet you can manage the contrib by the db configuration, it is quite simple
+
Il a été noté qu'une fonctionnalité de Fail2ban écrase la fonctionnalité ssh intégrée d'AutoBlock (https://wiki.contribs.org/AutoBlock). '''Noter qu'AutoBlock est activé par défaut sur SME 9.x et supérieur.''' Il est possible de désactiver la fonction AutoBlock en utilisant les étapes facultatives suivantes.
 +
 
 +
1. Affichez vos paramètres actuels pour la fonctionnalité AutoBlock intégrée de SME en entrant ce qui suit en ligne de commande.
 +
  # config show sshd
 +
2. Si AutoBlock est désactivé, aucune action n'est requise. Si AutoBlock est activé, configurez-le sur désactivé avec les commandes suivantes :
 +
  # config setprop sshd AutoBlock disabled
 +
  # signal-event remoteaccess-update
 +
 
 +
== Commandes DB ==
 +
Bien qu'il y ait une page de configuration dans le gestionnaire du serveur, vous pouvez aussi gérer la contribution avec « db configuration », c'est assez simple.
  
 
  # config show fail2ban  
 
  # config show fail2ban  
 
  fail2ban=service
 
  fail2ban=service
    Mail=enabled
+
Mail=enabled
    status=enabled
+
status=enabled
  
Available options are below:
+
Les options disponibles sont ci-dessous :
  
* '''IgnoreIP''': a comma separated list of IP or CIDR networks which will never be blocked by fail2ban. Exemple: 12.15.22.4,17.20.0.0/16. All your local networks and networks allowed to access the server-manager are already automatically whitelisted
+
* '''IgnoreIP''' : une virgule sépare les listes d'adresses IP ou de sous-réseaux en notation CIDR qui ne seront jamais bloquées par fail2ban. Exemple : 12.15.22.4,17.20.0.0/16. Tous vos réseaux locaux et les réseaux autorisés à accéder au gestionnaire du serveur sont toujours automatiquement en liste blanche.
* '''FilterLocalNetworks''' can be enabled or disabled (default is disabled). If set to enabled, local networks won't be whitelisted, and fail2ban can also ban hosts from the internal networks. Note that networks allowed to access the server-manager are not affected (they will never be blocked)
+
* '''FilterLocalNetworks''' peut être activé ou désactivé (désactivé par défaut). S'il est configuré en activé, les réseaux locaux ne seront pas en liste blanche, et fail2ban pourra aussi bannir des hôtes du réseau interne. Noter que les réseaux autorisés à accéder au gestionnaire du serveur ne seront pas affectés (ils ne seront jamais bloqués).
* '''BanTime''': Duration (in seconds) of a ban. Default to 1800
+
* '''BanTime''' : durée (en secondes) d'un bannissement. Par défaut : 1 800.
* '''FindTime''': The window fail2ban will check, in seconds. Default is 900. So, this mean fail2ban will only check for the number of failed login attempts in the last 15 minuts
+
* '''FindTime''' : la fenêtre de temps de vérification de fail2ban, en secondes. Par défaut : 900. Ainsi, cela signifie que fail2ban vérifiera seulement le nombre de connexions échouées tentées durant les 15 dernières minutes (glissantes).
* '''MaxRetry''': Number of failed attempts in the last '''FindTime''' seconds to trigger a ban. Default is 3
+
* '''MaxRetry''' : nombre de tentatives échouées dans les dernières '''FindTime''' secondes pour déclencher un bannissement. Par défaut : 3.
* '''Mail''': can be enabled or disabled (default is enabled). If enabled, each ban will be notified by mail
+
* '''Mail''' : peut être activé ou désactivé (activé par défaut). S'il est activé, chaque bannissement sera notifié à l'administrateur par courriel.
* '''MailRecipient''': if '''Mail''' is enabled, the email address which should receive ban notifications. Default is root (the admin account will receive)
+
* '''MailRecipient''' : si '''Mail''' est activé, l'adresse de courrier électronique qui doit recevoir les notifications de bannissement. Par défaut, c'est "root" (le compte "admin" recevra les courriels).
  
After changing one of these settings, you need to apply it:
+
Par exemple,
 +
db configuration setprop fail2ban Mail disabled
 +
Ensuite, pour appliquer les changements :
 
  signal-event fail2ban-conf
 
  signal-event fail2ban-conf
  
=== Services ===
+
== Services ==
The following services are monitored, and fail2ban will ban client IP for '''BanTime''' if more than '''MaxRetry''' authentication failure occure in less than '''FindTime'''
+
Les services suivants sont surveillés, et fail2ban interdira les IP pour la durée '''BanTime''' si plus de '''MaxRetry''' échecs d'authentification se produisent en moins de '''FindTime'''.
  
 
*ssh
 
*ssh
Line 106: Line 110:
 
  signal-event fail2ban-conf
 
  signal-event fail2ban-conf
  
=== Bans Sélectifs ===
+
== Bannissements sélectifs ==
Fail2Ban will do its best to do a selective ban. For example, if 3 auth failure against ssh are detected, only tcp port 22 (or any other port you choosed for SSH) will be blocked. Same for httpd-e-smith, SOGO, LemonLDAP::NG which will only blacklist tcp ports 80 and 443, qpsmtpd will block tcp ports 25 and 465, dovecot will block 143 and 993 etc...
+
Fail2Ban fera de son mieux pour faire une interdiction sélective. Par exemple, si 3 échecs d'authentification avec SSH sont détectés, seul le port TCP 22 (ou tout autre port vous avez choisi pour SSH) seront bloqués (pour l'adresse IP). Idem pour httpd-e-smith, SOGO, LemonLDAP::NG which will only blacklist tcp ports 80 et 443, qpsmtpd will block tcp ports 25 et 465, dovecot will block 143 et 993 etc...
  
There's only two ways to be completly locked (all port/protocol):
+
Il y a seulement deux façons de verrouiller complètement (tous ports/protocoles) :
* pam. As this is a generic file, it's not possible to check which service was used when an auth failure occured, so the entire client IP will be blacklisted
+
* pam. Comme il s'agit d'un fichier générique, il n'est pas possible de vérifier où le service a été utilisé lors d'un échec d'authentification, donc l'ensemble de l'IP du client sera mis en liste noire.
* recidive. This is a special filter. It monitors fail2Ban logs, and blacklist client IP which gets locked several time. If a client is locked out 5 times in 24 hours, it'll be completly blacklisted for one full week
+
* recidive. Il s'agit d'un filtre spécial. Il surveille les journaux Fail2Ban et IP du client et la liste noire qui est verrouillée plusieurs fois. Si un client est bloqué 5 fois en 24 heures, il sera complètement mis en liste noire pour une semaine complète.
  
=== Utilisation de Fail2ban===
+
== Utilisation de Fail2ban ==
==== Lister toutes les prisons ====
+
=== Lister toutes les prisons ===
 
  [root@sme8 ~]# fail2ban-client status  
 
  [root@sme8 ~]# fail2ban-client status  
 
  Status
 
  Status
Line 120: Line 124:
 
  `- Jail list: http-overflows, http-noscript, http-auth, sogo, pam-generic, ssh-ddos, http-scan, ssh, qpsmtpd, recidive
 
  `- Jail list: http-overflows, http-noscript, http-auth, sogo, pam-generic, ssh-ddos, http-scan, ssh, qpsmtpd, recidive
  
==== Lister les IP bannis d'une prison spécifique ====
+
=== Lister les IP bannis d'une prison spécifique ===
 
  [root@sme8 ~]# fail2ban-client status ssh
 
  [root@sme8 ~]# fail2ban-client status ssh
choose the specific jail with the command above which lists the Jail-list.
+
Choisissez la prison spécifique avec la commande ci-dessus, pour afficher les statistiques des prisons.
  
==== Jouez avec un script qui liste combien d'IP sont interdits dans toutes les prisons ====
+
=== Script qui liste combien d'IP sont interdits dans toutes les prisons ===
  
 
  nano /root/checklist_ban
 
  nano /root/checklist_ban
Line 138: Line 142:
 
  chmod 700 /root/checklist_ban
 
  chmod 700 /root/checklist_ban
  
to launch the script, do the following command:
+
Pour lancer ce script, utilisez la commande suivante :
 
  /root/checklist_ban
 
  /root/checklist_ban
  
==== Réintégrer une IP ====
+
=== Réintégrer une IP ===
In certain case you would to unban an IP immediately because you don't want waste time to wait the  automatic IP unban process of fail2ban.
+
Dans certains cas, vous pouvez réintégrer une adresse IP immédiatement parce que vous ne voulez pas perdre du temps à attendre le processus automatique IP de fail2ban.
In first you you have to find the specific jail which has blocked you IP, you can refer to the mail that the admin user has received or you can list a specific jail.
+
Dans un premier temps, vous devez trouver la prison spécifique qui vous a bloqué l'IP, vous pouvez vous référer à l'e-mail que l'utilisateur admin a reçu ou vous pouvez lister une prison spécifique.
  
 
  fail2ban-client status qpsmtpd
 
  fail2ban-client status qpsmtpd
Line 157: Line 161:
 
     `- Total banned: 1
 
     `- Total banned: 1
  
If you want to know all you active jail, then do :
+
Si vous voulez connaître toutes vos prisons actives, faites :
  
 
  fail2ban-client status
 
  fail2ban-client status
  
Therefore you have to play with this command to unban your IP
+
Ensuite, utilisez la commande suivante pour réintégrer l'adresse IP :
  
 
  fail2ban-client set qpsmtpd unbanip 93.17.128.20  
 
  fail2ban-client set qpsmtpd unbanip 93.17.128.20  
  
the generic command is :
+
La commande générique est :
  
 
  fail2ban-client set JAIL unbanip MYIP
 
  fail2ban-client set JAIL unbanip MYIP
  
===Jail.conf===
+
=== Jail.conf ===
The jail.conf is templated (/etc/e-smith/templates/etc/fail2ban/jail.conf) and the default file contains the configuration as below. You can add your own template of jail.conf at
+
Le jail.conf est basé sur un template (/etc/e-smith/templates/etc/fail2ban/jail.conf) et le fichier par défaut contient la configuration comme ci-dessous. Vous pouvez ajouter votre propre template-custom de jail.conf à
 +
 
 
  /etc/e-smith/templates-custom/etc/fail2ban/jail.conf
 
  /etc/e-smith/templates-custom/etc/fail2ban/jail.conf
if first time you need to create the folder for your custom template
+
 
 +
Si c'est la première fois, vous devez créer le dossier de votre template-custom
 
  mkdir -p  /etc/e-smith/templates-custom/etc/fail2ban/jail.conf
 
  mkdir -p  /etc/e-smith/templates-custom/etc/fail2ban/jail.conf
  
and do this to expland templates
+
Ensuite, déployez le template
  
 
  expand-template /etc/rc.d/init.d/masq
 
  expand-template /etc/rc.d/init.d/masq
Line 190: Line 196:
 
  backend = auto
 
  backend = auto
  
{{Note box|msg=Your network and your server are in the list of ignored IP by fail2ban (see IgnoreIP)}}
+
{{Note box|type=Note :|msg=votre réseau et votre serveur sont dans la liste des adresses IP ignorées par fail2ban (voir IgnoreIP.)}}
  
 
  [ssh]
 
  [ssh]
Line 261: Line 267:
 
           smeserver-sendmail[name="Recidive",dest=root]
 
           smeserver-sendmail[name="Recidive",dest=root]
  
=== Désinstallation ===
+
====Filtres locaux personnalisés====
 +
 
 +
Vous pouvez ajouter vos règles personnalisées en ajoutant un fichier nom_de_fichier.local dans /etc/fail2ban/filters.d/
 +
  wget https://bugs.koozali.org/attachment.cgi?id=6229 -O /etc/fail2ban/filters.d/apache-badbots.local
 +
 
 +
serait un exemple de règles locales de bad bots, veillez à tester pour votre cas personnel. Certaines règles avancées pourraient créer beaucoup de faux positifs et verrouiller vos utilisateurs, cf. [https://bugs.koozali.org/show_bug.cgi?id=10857].
 +
 
 +
== Désinstallation ==
 
  yum remove smeserver-fail2ban fail2ban
 
  yum remove smeserver-fail2ban fail2ban
 +
==Contributions des utilisateurs==
 +
=== Test de nouvelles expressions régulières ===
 +
Vous pouvez tester de nouvelles notes d'expressions régulières issues de ce [http://bugs.contribs.org/show_bug.cgi?id=8955 bogue].
 +
 +
fail2ban-regex [LOG] [REGEX]
 +
 +
Vous pouvez également tester les fichiers de configuration actuels comme indiqué :
 +
 +
fail2ban-regex /var/log/qpsmtpd/current /etc/fail2ban/filter.d/qpsmtpd.conf
 +
 +
Notez que certains caractères tels que « ` » peuvent avoir besoin d’être échappés sur la ligne de commande comme ceci \` mais n’ont pas besoin d’être échappés dans les fichiers de configuration.
 +
 +
Par exemple, à partir du fichier qpsmptd.conf, cela fonctionne dans le fichier de configuration.
 +
 +
^\s*\d+\s*logging::logterse plugin \(deny\): ` <HOST>\s*.*90\d.*msg denied before queued$
 +
 +
Cependant, en ligne de commande, il faut l'écrire comme ceci :
 +
 +
^\s*\d+\s*logging::logterse plugin \(deny\): \` <HOST>\s*.*90\d.*msg denied before queued$
 +
 +
 +
===Afficher les adresses IP bannies par le service===
 +
====Consultez le journal de fail2ban====
 +
Voici un autre script rapide qui vous montre les adresses IP bannies les plus récentes dans les journaux. Notez qu’elles ne le sont peut-être plus, mais il n’y a pas de vérification pour cela.
 +
 +
mkdir /root/bin
 +
nano -w /root/bin/IP_list.sh
 +
 +
et copiez et collez le code ci-dessous dans le fichier :
 +
 +
#!/bin/sh
 +
# Définir les variables de l'interface en ligne de commande de façon à pouvoir les lire.
 +
TYPE=$1
 +
LOG=$2
 +
 +
# Définir la chaîne grep principale
 +
SEARCH="Ban ((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])"
 +
 +
# Ajouter le terme de recherche
 +
SEARCH="\[$TYPE]\ $SEARCH"
 +
 +
# Maintenant, cherchez dans le journal
 +
grep -oE "\[$TYPE\] Ban ((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])" $LOG
 +
 +
Enregistrez le fichier et rendez-le exécutable :
 +
chmod 755 /root/bin/IP_list.sh
 +
 +
Utilisation :
 +
IP_list.sh [service] [log]
 +
 +
Par exemple :
 +
IP_list.sh qpsmtpd /var/log/fail2ban/daemon.log
 +
====Vérifiez l'IP bannie par fail2ban pour tous les prisons actives ====
 +
Par [[User:Unnilennium|Unnilennium]] ([[User talk:Unnilennium|talk]])
 +
mkdir /root/bin
 +
vim /root/bin/sfail2ban
 +
 +
Collez-lui ceci :
 +
#!/bin/bash
 +
for SERVI in $(fail2ban-client status|grep 'Liste des prisons'|cut -d':' -f2|sed 's/, / /g'| sed -e 's/^[ \t]*//')
 +
do
 +
fail2ban-client status $SERVI |grep -E 'liste IP|Statut de la prison'|sed 'N;s/\n/:/'|cut -d: -f2,4
 +
done
 +
puis faites :
 +
chmod 755 /root/bin/sfail2ban
 +
 +
Utilisation :
 +
sfail2ban
 +
Résultat :
 +
# sfail2ban
 +
ftp:
 +
imap:
 +
pam-generic:
 +
qpsmtpd:
 +
recidive: 141.98.80.15
 +
ssh:
 +
ssh-ddos:
 +
wordpress:
 +
 +
====Imprimez un résumé de la base de données de fail2ban====
 +
mkdir -p /root/bin
 +
vi /root/bin/bansummary.sh
 +
 +
Collez ceci :
 +
<nowiki>#!/bin/bash
 +
echo -e \
 +
"IP            \t"\
 +
"BanTime            \t"\
 +
"UnbanTime          \t"\
 +
"Jail"
 +
 +
for ban in $(db fail2ban show |awk -F\= ' $2=="ban" {print $1}');
 +
  do
 +
    IP=$(db fail2ban getprop $ban Host)
 +
    Bantime=$(date +"%F %T" -d @$(db fail2ban getprop $ban BanTimestamp))
 +
    UnBanTime=$(date +"%F %T" -d @$(db fail2ban getprop $ban UnbanTimestamp))
 +
    LastJail=$(zgrep -H "Ban $IP" $(find /var/log/fail2ban -type f -ctime -7) |tail -1 |awk '{print $6}')
 +
 +
    printf "%-15s" "$IP"
 +
    echo -e "\t$Bantime\t$UnBanTime\t$LastJail"
 +
  done
 +
</nowiki>
 +
 +
Sauveagarder, puis rendre exécutable
 +
chmod 755 /root/bin/bansummary.sh
 +
 +
Utilisation :
 +
bansummary.sh
 +
Sortie :
 +
<nowiki>IP            BanTime            UnbanTime          Jail
 +
46.246.39.228  2017-09-09 18:45:00 2017-09-10 18:45:00 [http-scan]
 +
124.239.180.102 2017-09-09 12:07:32 2017-09-10 12:07:32 [http-scan]
 +
212.237.54.93  2017-09-09 19:27:32 2017-09-10 19:27:32 [http-scan]
 +
</nowiki>
 +
 +
===WordPress===
 +
Fail2Ban fonctionne avec WordPress mais nécessite une configuration supplémentaire. Veuillez consulter [[Wordpress#Fail2Ban |la page WordPress]] (en anglais).
 +
 +
== Bogues ==
 +
S'il vous plaît, rapportez les bogues dans la section SME-Contribs dans [http://bugs.contribs.org/enter_bug.cgi bugzilla]
 +
et sélectionnez le composant smeserver-fail2ban ou utilisez {{BugzillaFileBug|product=SME%20Contribs|component=smeserver-fail2ban|title=ce lien}}.
  
=== Bugs ===
+
Aperçu ci-dessous des problèmes actuels de cette contribution {{#bugzilla:columns=id,product,version,status,summary|sort=id|order=desc|component=smeserver-fail2ban|noresultsmessage=No open bugs found.}}
Please raise bugs under the SME-Contribs section in [http://bugs.contribs.org/enter_bug.cgi bugzilla]
+
==Journal des modifications==
and select the smeserver-fail2ban component or use {{BugzillaFileBug|product=SME%20Contribs|component=smeserver-fail2ban|title=this link}}.
+
Seules les versions publiées dans smecontribs sont répertoriées ici.
 +
{{ #smechangelog: smeserver-fail2ban}}
  
[[Category: Contrib]]
+
[[Category: Contrib/fr]][[Category: Security]]

Latest revision as of 14:34, 26 August 2022


Fail2ban pour SME Server

PythonIcon.png Skill level: Facile
Les instructions sur cette page peuvent être suivies par un débutant.


Mainteneur

Daniel B.
Firewall Services
mailto:daniel@firewall-services.com

Veuillez débattre, apporter des retours et partager des expérimentations sur les forums ici.

Description

Fail2ban fonctionne en surveillant les fichiers journaux (Ex : /var/log/pwdfail, /var/log/auth.log, etc.) pour les entrées sélectionnées et l'exécution de scripts basés sur eux. Le plus souvent il est utilisé pour bloquer des adresses IP sélectionnées qui peuvent appartenir à des hôtes qui tentent de compromettre la sécurité du système. Il peut interdire une IP de l'hôte qui fait trop de tentatives de connexion ou autre action non désirée dans un laps de temps défini par l'administrateur.

Fail2ban est généralement mis en place pour dé-bannir un hôte bloqué pendant un certain temps, afin de ne pas « verrouiller » les connexions authentiques qui peuvent avoir été temporairement mal configurées. Cependant, un dé-bannissement de plusieurs minutes est généralement suffisant pour arrêter une connexion réseau inondée par des connexions malveillantes, ainsi que de réduire la probabilité d'une attaque réussie par dictionnaire.

Après l'installation, les services de base les plus importants (et quelques autres supplémentaires) sont surveillés par défaut sans avoir besoin de configuration manuelle (voir Services).


Information.png Astuce :
Fail2ban n'est pas seulement un outil contre les attaques par force brute sur SSH, mais il peut être un outil utile contre les attaques de protocole http ou spam sur votre serveur. Voir la section prison.


Systèmes requis

Cette contribution a été développée et testée sur SME Server v8 et suivantes.


Important.png Note :
L'option AutoBlock SSH de SSH devrait être désactivée pour s'assurer que ce soit Fail2ban qui contrôle le trafic SSH et non pas le pare-feu intégré de SME.. Or AutoBlock est activé par défaut dans SME 9.x.

Pour vérifier qu'AutoBlock est bien désactivé :

db configuration show sshd

Si ce n'est pas le cas, voir ci-dessous pour le désactiver.


Koozali SME v9/v10

Contrib 10:
Contrib 9:
smeserver-fail2ban
The latest version of smeserver-fail2ban is available in the SME repository, click on the version number(s) for more information.


Installation sur Koozali SME

yum --enablerepo=smecontribs install smeserver-fail2ban
  • Installez les paquets
yum --enablerepo=smecontribs install smeserver-fail2ban
  • Appliquer la configuration nécessaire :

Prenez soin d'exécuter ces trois commandes avec précision. Ne pas le faire peut empêcher la connexion à distance via ssh.

db configuration setprop masq status enabled
expand-template /etc/rc.d/init.d/masq
/etc/init.d/masq restart
signal-event fail2ban-conf

ou bien les commandes suivantes qui sont équivalentes après redémarrage :

db configuration setprop masq status enabled
signal-event post-upgrade; signal-event reboot
Warning.png Attention :
à défaut d'exécuter l'une de ces commandes, l'accès au réseau sera verrouillé le temps de recharger les règles d'iptables.


Warning.png Attention :
le service de masquage doit être activé pour que Fail2ban fonctionne correctement ; si vous le désactivez, Fail2ban ne bannira rien.

Warning.png Attention :
à partir de SME10 et de smeserver-fail2ban 0.1.18-29, le changement manuel de configuration est inclus dans la sauvegarde principale, si vous utilisez des fichiers .local dans les dossiers action.d/ fail2ban.d/ filter.d/ jail.d/. Toute modification apportée au fichier .conf appartenant au paquet n'est pas ajoutée dans la sauvegarde principale. Utilisez les fichiers .local pour remplacer le fichier .conf et ils seront dans la sauvegarde. Voir http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Configuration.


Désactiver la fonctionalité AutoBlock sur SME 9.x et supérieur

Il a été noté qu'une fonctionnalité de Fail2ban écrase la fonctionnalité ssh intégrée d'AutoBlock (https://wiki.contribs.org/AutoBlock). Noter qu'AutoBlock est activé par défaut sur SME 9.x et supérieur. Il est possible de désactiver la fonction AutoBlock en utilisant les étapes facultatives suivantes.

1. Affichez vos paramètres actuels pour la fonctionnalité AutoBlock intégrée de SME en entrant ce qui suit en ligne de commande.

 # config show sshd

2. Si AutoBlock est désactivé, aucune action n'est requise. Si AutoBlock est activé, configurez-le sur désactivé avec les commandes suivantes :

 # config setprop sshd AutoBlock disabled
 # signal-event remoteaccess-update

Commandes DB

Bien qu'il y ait une page de configuration dans le gestionnaire du serveur, vous pouvez aussi gérer la contribution avec « db configuration », c'est assez simple.

# config show fail2ban 
fail2ban=service
Mail=enabled
status=enabled

Les options disponibles sont ci-dessous :

  • IgnoreIP : une virgule sépare les listes d'adresses IP ou de sous-réseaux en notation CIDR qui ne seront jamais bloquées par fail2ban. Exemple : 12.15.22.4,17.20.0.0/16. Tous vos réseaux locaux et les réseaux autorisés à accéder au gestionnaire du serveur sont toujours automatiquement en liste blanche.
  • FilterLocalNetworks peut être activé ou désactivé (désactivé par défaut). S'il est configuré en activé, les réseaux locaux ne seront pas en liste blanche, et fail2ban pourra aussi bannir des hôtes du réseau interne. Noter que les réseaux autorisés à accéder au gestionnaire du serveur ne seront pas affectés (ils ne seront jamais bloqués).
  • BanTime : durée (en secondes) d'un bannissement. Par défaut : 1 800.
  • FindTime : la fenêtre de temps de vérification de fail2ban, en secondes. Par défaut : 900. Ainsi, cela signifie que fail2ban vérifiera seulement le nombre de connexions échouées tentées durant les 15 dernières minutes (glissantes).
  • MaxRetry : nombre de tentatives échouées dans les dernières FindTime secondes pour déclencher un bannissement. Par défaut : 3.
  • Mail : peut être activé ou désactivé (activé par défaut). S'il est activé, chaque bannissement sera notifié à l'administrateur par courriel.
  • MailRecipient : si Mail est activé, l'adresse de courrier électronique qui doit recevoir les notifications de bannissement. Par défaut, c'est "root" (le compte "admin" recevra les courriels).

Par exemple,

db configuration setprop fail2ban Mail disabled

Ensuite, pour appliquer les changements :

signal-event fail2ban-conf

Services

Les services suivants sont surveillés, et fail2ban interdira les IP pour la durée BanTime si plus de MaxRetry échecs d'authentification se produisent en moins de FindTime.

  • ssh
  • dovecot (only on SME9, or if you run smeserver-dovecot)
  • qpsmtpd. If a remote server send you too many mails which qpsmtpd rejects, it's probably spammer, so Fail2ban will blacklist it. MaxRetry is x3 for this service, so with the default config, a remote server will be blacklisted if 9 mails are rejected in less than 15 minutes
  • httpd-e-smith. The standard http server. 3 different filters check apache logs:
    • noscripts: check client which ask for scripts which are not available on your server. It's usually script-kiddies trying to exploit security vulerabilities
    • scan: another set of filter for popular scans (phpMyAdmin, wp-login, admin area etc...)
    • auth: will check for standard authentication failure
  • pam. This will check a generic authentication failure. Everything which uses pam should work
  • SOGo. Check SOGo logs for failed authentications
  • LemonLDAP-NG. Check system logs for auth failure on LemonLDAP::NG portal
  • ftp. Check auth failure on your FTP daemon
  • Ejabberd. Check auth failure against EJabberd

Each filters will disable itself if the corresponding service is disabled. You can also disable specific filter if you want. For example, if you want to disable Apache filters:

db configuration setprop httpd-e-smith Fail2Ban disabled
signal-event fail2ban-conf

Bannissements sélectifs

Fail2Ban fera de son mieux pour faire une interdiction sélective. Par exemple, si 3 échecs d'authentification avec SSH sont détectés, seul le port TCP 22 (ou tout autre port vous avez choisi pour SSH) seront bloqués (pour l'adresse IP). Idem pour httpd-e-smith, SOGO, LemonLDAP::NG which will only blacklist tcp ports 80 et 443, qpsmtpd will block tcp ports 25 et 465, dovecot will block 143 et 993 etc...

Il y a seulement deux façons de verrouiller complètement (tous ports/protocoles) :

  • pam. Comme il s'agit d'un fichier générique, il n'est pas possible de vérifier où le service a été utilisé lors d'un échec d'authentification, donc l'ensemble de l'IP du client sera mis en liste noire.
  • recidive. Il s'agit d'un filtre spécial. Il surveille les journaux Fail2Ban et IP du client et la liste noire qui est verrouillée plusieurs fois. Si un client est bloqué 5 fois en 24 heures, il sera complètement mis en liste noire pour une semaine complète.

Utilisation de Fail2ban

Lister toutes les prisons

[root@sme8 ~]# fail2ban-client status 
Status
|- Number of jail:	10
`- Jail list:		http-overflows, http-noscript, http-auth, sogo, pam-generic, ssh-ddos, http-scan, ssh, qpsmtpd, recidive

Lister les IP bannis d'une prison spécifique

[root@sme8 ~]# fail2ban-client status ssh

Choisissez la prison spécifique avec la commande ci-dessus, pour afficher les statistiques des prisons.

Script qui liste combien d'IP sont interdits dans toutes les prisons

nano /root/checklist_ban
#!/bin/bash
#lancer le script en sudo 
JAILS=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list:\t\t//g' | sed 's/,//g')
for j in $JAILS
do
echo "$j $(fail2ban-client status $j | grep " Currently banned:" | sed 's/   |- Currently banned:\t//g')"
done
chmod 700 /root/checklist_ban

Pour lancer ce script, utilisez la commande suivante :

/root/checklist_ban

Réintégrer une IP

Dans certains cas, vous pouvez réintégrer une adresse IP immédiatement parce que vous ne voulez pas perdre du temps à attendre le processus automatique IP de fail2ban. Dans un premier temps, vous devez trouver la prison spécifique qui vous a bloqué l'IP, vous pouvez vous référer à l'e-mail que l'utilisateur admin a reçu ou vous pouvez lister une prison spécifique.

fail2ban-client status qpsmtpd
Status for the jail: qpsmtpd
|- filter
|  |- File list:	/var/log/qpsmtpd/current /var/log/sqpsmtpd/current 
|  |- Currently failed:	5
|  `- Total failed:	119
`- action
   |- Currently banned:	1
   |  `- IP list:	93.17.128.20 
   `- Total banned:	1

Si vous voulez connaître toutes vos prisons actives, faites :

fail2ban-client status

Ensuite, utilisez la commande suivante pour réintégrer l'adresse IP :

fail2ban-client set qpsmtpd unbanip 93.17.128.20 

La commande générique est :

fail2ban-client set JAIL unbanip MYIP

Jail.conf

Le jail.conf est basé sur un template (/etc/e-smith/templates/etc/fail2ban/jail.conf) et le fichier par défaut contient la configuration comme ci-dessous. Vous pouvez ajouter votre propre template-custom de jail.conf à

/etc/e-smith/templates-custom/etc/fail2ban/jail.conf

Si c'est la première fois, vous devez créer le dossier de votre template-custom

mkdir -p  /etc/e-smith/templates-custom/etc/fail2ban/jail.conf

Ensuite, déployez le template

expand-template /etc/rc.d/init.d/masq
/etc/init.d/masq restart
signal-event fail2ban-conf

Default jail.conf

[DEFAULT]
ignoreip = 127.0.0.0/8 192.168.XXX.XXX 192.168.XXX.0/24
bantime  = 1800
findtime  = 900
maxretry = 3
usedns = yes
backend = auto


Important.png Note :
votre réseau et votre serveur sont dans la liste des adresses IP ignorées par fail2ban (voir IgnoreIP.)


[ssh]
enabled  = true
filter   = sshd
logpath  = /var/log/sshd/current
action   = smeserver-iptables[port="22",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="SSH",dest=root]
[ssh-ddos]
enabled  = true
filter   = sshd-ddos
logpath  = /var/log/sshd/current
action   = smeserver-iptables[port="22",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="SSH",dest=root]
[qpsmtpd]
enabled  = true
filter   = qpsmtpd
logpath  = /var/log/*qpsmtpd/current
maxretry = 9
action   = smeserver-iptables[port="25,465",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="Qpsmtpd",dest=root]
[http-overflows]
enabled  = true
filter   = apache-overflows
logpath  = /var/log/httpd/error_log
action   = smeserver-iptables[port="80,443",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="Apache (overflows)",dest=root]
[http-noscript]
enabled  = true
filter   = apache-noscript
logpath  = /var/log/httpd/error_log
action   = smeserver-iptables[port="80,443",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="Apache (noscript)",dest=root]
[http-scan]
enabled  = true
filter   = apache-scan
logpath  = /var/log/httpd/error_log
action   = smeserver-iptables[port="80,443",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="Apache (scan)",dest=root]
[http-auth]
enabled  = true
filter   = apache-auth
logpath  = /var/log/httpd/error_log
action   = smeserver-iptables[port="80,443",protocol=tcp,bantime=1800]
          smeserver-sendmail[name="Apache (auth)",dest=root]
[pam-generic]
enabled  = true
filter   = pam-generic
logpath  = /var/log/secure
maxretry = 6
action   = smeserver-iptables[bantime=1800]
          smeserver-sendmail[name="PAM generic",dest=root]
[recidive]
enabled  = true
filter   = recidive
logpath  = /var/log/fail2ban/daemon.log
bantime  = 604800
findtime = 86400
maxretry = 5
backend  = polling
action   = smeserver-iptables[bantime=604800]
          smeserver-sendmail[name="Recidive",dest=root]

Filtres locaux personnalisés

Vous pouvez ajouter vos règles personnalisées en ajoutant un fichier nom_de_fichier.local dans /etc/fail2ban/filters.d/

 wget https://bugs.koozali.org/attachment.cgi?id=6229 -O /etc/fail2ban/filters.d/apache-badbots.local

serait un exemple de règles locales de bad bots, veillez à tester pour votre cas personnel. Certaines règles avancées pourraient créer beaucoup de faux positifs et verrouiller vos utilisateurs, cf. [1].

Désinstallation

yum remove smeserver-fail2ban fail2ban

Contributions des utilisateurs

Test de nouvelles expressions régulières

Vous pouvez tester de nouvelles notes d'expressions régulières issues de ce bogue.

fail2ban-regex [LOG] [REGEX]

Vous pouvez également tester les fichiers de configuration actuels comme indiqué :

fail2ban-regex /var/log/qpsmtpd/current /etc/fail2ban/filter.d/qpsmtpd.conf

Notez que certains caractères tels que « ` » peuvent avoir besoin d’être échappés sur la ligne de commande comme ceci \` mais n’ont pas besoin d’être échappés dans les fichiers de configuration.

Par exemple, à partir du fichier qpsmptd.conf, cela fonctionne dans le fichier de configuration.

^\s*\d+\s*logging::logterse plugin \(deny\): ` <HOST>\s*.*90\d.*msg denied before queued$

Cependant, en ligne de commande, il faut l'écrire comme ceci :

^\s*\d+\s*logging::logterse plugin \(deny\): \` <HOST>\s*.*90\d.*msg denied before queued$


Afficher les adresses IP bannies par le service

Consultez le journal de fail2ban

Voici un autre script rapide qui vous montre les adresses IP bannies les plus récentes dans les journaux. Notez qu’elles ne le sont peut-être plus, mais il n’y a pas de vérification pour cela.

mkdir /root/bin
nano -w /root/bin/IP_list.sh

et copiez et collez le code ci-dessous dans le fichier :

#!/bin/sh
# Définir les variables de l'interface en ligne de commande de façon à pouvoir les lire.
TYPE=$1
LOG=$2

# Définir la chaîne grep principale
SEARCH="Ban ((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])"

# Ajouter le terme de recherche
SEARCH="\[$TYPE]\ $SEARCH"

# Maintenant, cherchez dans le journal
grep -oE "\[$TYPE\] Ban ((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])" $LOG

Enregistrez le fichier et rendez-le exécutable :

chmod 755 /root/bin/IP_list.sh

Utilisation :

IP_list.sh [service] [log]

Par exemple :

IP_list.sh qpsmtpd /var/log/fail2ban/daemon.log

Vérifiez l'IP bannie par fail2ban pour tous les prisons actives

Par Unnilennium (talk)

mkdir /root/bin
vim /root/bin/sfail2ban

Collez-lui ceci :

#!/bin/bash
for SERVI in $(fail2ban-client status|grep 'Liste des prisons'|cut -d':' -f2|sed 's/, / /g'| sed -e 's/^[ \t]*//')
do
fail2ban-client status $SERVI |grep -E 'liste IP|Statut de la prison'|sed 'N;s/\n/:/'|cut -d: -f2,4
done

puis faites :

chmod 755 /root/bin/sfail2ban

Utilisation :

sfail2ban

Résultat :

# sfail2ban
ftp:	 
imap:	 
pam-generic:	 
qpsmtpd:	 
recidive:	141.98.80.15
ssh:	
ssh-ddos:	
wordpress:	

Imprimez un résumé de la base de données de fail2ban

mkdir -p /root/bin
vi /root/bin/bansummary.sh

Collez ceci :

#!/bin/bash
 echo -e \
 "IP             \t"\
 "BanTime             \t"\
 "UnbanTime           \t"\
 "Jail"
 
 for ban in $(db fail2ban show |awk -F\= ' $2=="ban" {print $1}'); 
   do
     IP=$(db fail2ban getprop $ban Host)
     Bantime=$(date +"%F %T" -d @$(db fail2ban getprop $ban BanTimestamp))
     UnBanTime=$(date +"%F %T" -d @$(db fail2ban getprop $ban UnbanTimestamp))
     LastJail=$(zgrep -H "Ban $IP" $(find /var/log/fail2ban -type f -ctime -7) |tail -1 |awk '{print $6}') 
 
     printf "%-15s" "$IP"
     echo -e "\t$Bantime\t$UnBanTime\t$LastJail"
   done
 

Sauveagarder, puis rendre exécutable

chmod 755 /root/bin/bansummary.sh

Utilisation :

bansummary.sh

Sortie :

IP             	BanTime             	UnbanTime           	Jail
 46.246.39.228  	2017-09-09 18:45:00	2017-09-10 18:45:00	[http-scan]
 124.239.180.102	2017-09-09 12:07:32	2017-09-10 12:07:32	[http-scan]
 212.237.54.93  	2017-09-09 19:27:32	2017-09-10 19:27:32	[http-scan]
 

WordPress

Fail2Ban fonctionne avec WordPress mais nécessite une configuration supplémentaire. Veuillez consulter la page WordPress (en anglais).

Bogues

S'il vous plaît, rapportez les bogues dans la section SME-Contribs dans bugzilla et sélectionnez le composant smeserver-fail2ban ou utilisez ce lien .

Aperçu ci-dessous des problèmes actuels de cette contribution

IDProductVersionStatusSummary (12 tasks)
12453SME Contribs10.0CONFIRMEDextra coma leading to empty string fails ignore ip template fragment
12402SME Contribs10.0UNCONFIRMEDUsing smeserver-git makes smeserver-fail2ban ban even though whitelisted.
12285SME Contribs10.0UNCONFIRMEDWARNING message in daemon log after reboot about ssh
12199SME Contribs10.0CONFIRMEDadd externalip /internal ip to whitelist
11805SME Contribs10.0CONFIRMEDNFR: use fail2ban db to list banned host
11801SME Contribs10.0CONFIRMEDNFR: add a permanent/custom or manual jail
10799SME ContribsFuturCONFIRMEDNFR: Fail2ban OpenVPN routed templates
10798SME Contribs9.2CONFIRMEDNFR convert long mask to bit mask if entered as long mask
10786SME Contribs9.2CONFIRMEDlockout without a full masq restart
10638SME Contribs9.2CONFIRMEDIgnoreIP entry created with trailing slash stopping f2b from working
10422SME Contribs9.2UNCONFIRMEDNFR: portscan jail
8955SME Contribs9.2UNCONFIRMEDFail2Ban error in qpsmtpd.conf regex

Journal des modifications

Seules les versions publiées dans smecontribs sont répertoriées ici.

smeserver-fail2ban Changelog: SME 10 (smecontribs)
2024/09/05 Terry Fage 0.1.18-32.sme
- add local 2024-09-05.patch
2024/03/01 Brian Read 0.1.18-31.sme
- Edit SM2 Menu entry to conform to new arrangements [SME: 12493]

2022/07/29 Jean-Philippe Pialasse 0.1.18-30.sme
- add to core backup [SME: 12008]

- add local 2022-07-30 patch
2022/07/25 Jean-Philippe Pialasse 0.1.18-28.sme
- revert previous patch, wrong package [SME: 12011]
2022/07/22 Jean-Philippe Pialasse 0.1.18-27.sme
- add to core backup [SME: 12011]