Fail2ban/fr
Fail2ban pour SME Server
Mainteneur
Daniel B.
Firewall Services
mailto:daniel@firewall-services.com
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).
Systèmes requis
Cette contribution a été développée et testée sur SME Server 8 et plus. Elle ne fonctionnera probablement pas sur les SME 7.
Installation
Configurez les dépôts Firewall-Services, rpmforge :
db yum_repositories set fws repository \ BaseURL http://repo.firewall-services.com/centos/\$releasever \ EnableGroups no GPGCheck yes \ Name "Firewall Services" \ GPGKey http://repo.firewall-services.com/RPM-GPG-KEY \ Visible yes status disabled
Configurez les dépôts EPEL :
/sbin/e-smith/db yum_repositories set epel repository \ Name 'Epel - EL6' \ BaseUrl 'http://download.fedoraproject.org/pub/epel/6/$basearch' \ MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&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
- Redémarrez les services, installez les rpms
yum --enablerepo=fws --enablerepo=epel 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
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
Il n'y a pas de panneau de configuration, vous pouvez encore 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
[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]
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
ID | Product | Version | Status | Summary (12 tasks) ⇒ |
---|---|---|---|---|
12453 | SME Contribs | 10.0 | CONFIRMED | extra coma leading to empty string fails ignore ip template fragment |
12402 | SME Contribs | 10.0 | UNCONFIRMED | Using smeserver-git makes smeserver-fail2ban ban even though whitelisted. |
12285 | SME Contribs | 10.0 | UNCONFIRMED | WARNING message in daemon log after reboot about ssh |
12199 | SME Contribs | 10.0 | CONFIRMED | add externalip /internal ip to whitelist |
11805 | SME Contribs | 10.0 | CONFIRMED | NFR: use fail2ban db to list banned host |
11801 | SME Contribs | 10.0 | CONFIRMED | NFR: add a permanent/custom or manual jail |
10799 | SME Contribs | Futur | CONFIRMED | NFR: Fail2ban OpenVPN routed templates |
10798 | SME Contribs | 9.2 | CONFIRMED | NFR convert long mask to bit mask if entered as long mask |
10786 | SME Contribs | 9.2 | CONFIRMED | lockout without a full masq restart |
10638 | SME Contribs | 9.2 | CONFIRMED | IgnoreIP entry created with trailing slash stopping f2b from working |
10422 | SME Contribs | 9.2 | UNCONFIRMED | NFR: portscan jail |
8955 | SME Contribs | 9.2 | UNCONFIRMED | Fail2Ban error in qpsmtpd.conf regex |