SME-101.10: Supplément: Fail2ban
Description générale
Ce Cahier-10 du Cours SME-101 décrit l'installation de Fail2ban sur un Serveur SME-9.x.
Référence: https://wiki.contribs.org/Fail2ban/fr.
Fail2ban fonctionne en surveillant les fichiers journaux (/var/log/pwdfail
, /var/log/auth.log
, etc.) pour les entrées sélectionnées et l'exécution de scripts basés sur celles-ci. Le plus souvent il est utilisé pour bloquer les adresses IP sélectionnées qui peuvent appartenir à des hôtes qui tentent de compromettre la sécurité du système. Il peut interdire l'adresse IP de l'hôte faisant trop de tentatives de connexion ou toute autre action non désirée à l'intérieur d'un laps de temps défini par l'administrateur.
Fail2ban est généralement mis en place afin d'amnistier un hôte bloqué ou de ne pas "verrouiller" les connexions authentiques qui peuvent avoir été temporairement mal configurées. Un bannissement de plusieurs minutes est généralement suffisant pour arrêter une connexion réseau inondée par des agression malveillantes ou réduire la probabilité d'une attaque par dictionnaire.
Par défaut, après l'installation de Fail2ban, les services de base les plus importants sont surveillés sans aucun besoin de configuration manuelle. (voir la section Services de la Contrib Fail2ban/fr).
But final de ce cahier
Cours SME-101
But final du cours SME-101
Après avoir suivi le cours SME-101, l'Étudiant possédera un site de Commerce en ligne fiable et hautement sécuritaire. De plus, il pourra utiliser un clone de son site, sur un Serveur SME virtuel sur sa station de travail, pour tester de nouvelles extensions et applications sans compromettre la sécurité ou l'intégrité de son site en ligne.
Documentation
Le cours SME-101, se voulant une base solide pour la création d'un site de Commerce en ligne, comprend plusieurs cahiers:
- Cahier-00: Les bases de Linux, SME-101.00 Linux de base.
- Cahier-01: Installation et configuration des logiciels prérequis sur le poste de travail de l'Étudiant de même que le téléchargement des fichiers qui seront installés sur le Serveur SME virtuel, SME-101.01 Logiciels de la station de travail.
- Cahier-02: Description du parcours des paquets IP du Serveur SME vers l'Internet, création de la machine virtuelle, installation/configuration du serveur Linux SME et enfin, sauvegarde/restauration de ce dernier, SME-101.02 Serveur SME.
- Cahier-03: Abonnement à un FAI, installation et configuration d'un modem ADSL/VDSL, création d'un domaine chez un fournisseur de Service DNS dynamique avec installation d'un script pour sa mise à jour et enfin la marche à suivre pour l'obtention et la configuration d'un domaine FQDN[1], SME-101.03 ADSL/VDSL, DDNS et Domaine FQDN.
- Cahier-04: Installation d'un certificat SSL de l'autorité de certification Let's Encrypt et script de mise à jour, SME-101.04 Certificat Let's Encrypt.
- Cahier-05A: Installation et configuration de WordPress, SME-101.05A WordPress.
- Cahier-05B: Installation et configuration de l'extension de sécurité Wordfence, SME-101.05B Wordfence.
- Cahier-06: Installation et configuration de l'extension de vente en ligne WooCommerce, création de comptes chez Stripe et PayPal pour les paiements en ligne, SME-101.06 WooCommerce.
- Cahier-07: Sauvegarde/restauration ou migration d'un site avec l'extension Duplicator, SME-101.07 Duplicator.
- Cahier-08: Serveur mandataire inversé, SME-101.08 Serveur mandataire inversé.
- Cahier-09: Supplément: SME & BackupPC-4.2, SME-101.09: Supplément: SME & BackupPC-4.2.
- Cahier-10: Supplément: Fail2ban.
Tous les logiciels nécessaires sont du domaine public ou LIBRE sous licence GPL; ils ne coûtent pas un sous. Le seul achat nécessaire est l'obtention d'un nom de domaine FQDN au prix initial de $15 CAD et son renouvellement annuel d'environ $30 CAD.
Particularités de ce document
Notes au lecteur
- Les captures d’écrans ne sont que des références.
- Les informations écrites ont préséance sur celles retrouvées dans les captures d’écrans. Se référer aux différents tableaux lorsque ceux-ci sont présents.
Conventions
- Toutes les commandes à entrer à la console du Serveur SME commencent habituellement avec l'invite # pour l'usager root ou $ pour un usager sans privilège particulier.
- L'invite
mysql>
de la console MySQL est toujours présente. - La sortie de la commande est séparée de celle-ci par une ligne vide sans couleur de fond.
- L'invite de retour n'est jamais présent pour la plupart des commandes.
- Les affichages à surveiller sont en rouge, bleu, orange ou magenta.
# ping 192.168.1.149
192.168.1.149 is alive
Les liens de référence Internet sont en bleu de même que ceux intra-document mais, ces derniers débute par un " # ".
Manipulation, truc ou ruse pour se tirer d’embarras.
Une étape, note ou procédure à surveiller.
Danger pour la sécurité du système.
Indique que la commande est sur une seule ligne. Pour ce document en PDF, il faudra copier la commande entière dans un éditeur de texte ASCII tel que NotePad++ et la mettre sur une seule ligne avant de la copier à la console.
Une chaîne de caractères en magenta indique qu’il faut remplacer cette chaîne par vos propres paramètres.
Commande à exécuter si ce n'est déjà fait. |
Commande indiquée à titre d'information seulement. |
Prérequis
Installation d'un Serveur SME
Voir le Cahier-2: SME-101.02 Serveur SME.
Mise à jour
Avant de commencer quoi que ce soit, il est toujours préférable de mettre à jour le Serveur SME.
Voir le chapitre: Mise à jour du Cahier-2.
Certificat Let's Encrypt
On peut installer un certificat de sécurité SSL de Let's Encrypt. Voir le Cahier-4: SME-101.04 Certificat Let's Encrypt.
Diagramme réseau
Paramètres SSHD
Dans le Cahier-2, au chapitre Configuration du Serveur SME:
- Accès par terminal sécurisé (SSH): – Autoriser l’accès complet (LAN et Internet)
- Autoriser l'administrateur à se connecter au serveur par SSH: Oui
- Autoriser l'authentification par SSH à l'aide de mots de passe standards: Oui
- Port TCP pour l’accès SSH: 2222
On se logue en root à la console du serveur.
login as: root root@192.168.1.11's password: mot-de-passe-de root Last login: Wed May 23 20:59:46 2018 ************ Welcome to SME Server 9.2 ************* Before editing configuration files, familiarise yourself with the automated events and templates systems. Please take the time to read the documentation http://wiki.contribs.org/Main_Page Remember that SME Server is free to download and use, but it is not free to build Please help the project : http://wiki.contribs.org/Donate ****************************************************
On affiche les paramètres SSHD.
# config show sshd
sshd=service AutoBlockAutoBlock=enabled AutoBlockTime=900 AutoBlockTries=4 LoginGraceTime=600 MaxAuthTries=2 MotdStatus=enabled PasswordAuthentication=yes PermitRootLogin=yes TCPPort=2222 UsePAM=yes access=public status=enabled
Les paramètres sont bien définis correctement et on peut utiliser PuTTY pour se loguer au serveur. Voir la secion PuTTY du Cahier-1: "SME-101.01 Logiciels de la station de travail" pour se familiariser avec ce logiciel de connexion.
Paramètre AutoBlock
Par défaut, AutoBlock est activé sur les Serveur SME 9.x. On voit le paramètre AutoBlock
AutoBlock dans l'affichage produit par la dernière commande ci-dessus.
Il a été noté que l'une des fonctionnalités de Fail2ban chevauche la fonction AutoBlock
qui est intégrée au démon SSHD
de SME.
L'option AutoBlock
de SSHD
doit être désactivée pour s'assurer que ce soit bien Fail2ban qui contrôle le trafic SSH et non pas le pare-feu intégré de SME.
On désactive AutoBlock.
# config setprop sshd AutoBlock disable
On signale le changement pour qu'il devienne permanent.
Peut prendre un certain temps.
# signal-event remoteaccess-update
On vérifie.
- config show sshd
sshd=service
AutoBlock=disabled
AutoBlockTime=900
AutoBlockTries=4
LoginGraceTime=600
MaxAuthTries=2
MotdStatus=enabled
PasswordAuthentication=yes
PermitRootLogin=yes
TCPPort=2222
UsePAM=yes
access=public
status=enabled
Installation
Introduction
Référence: https://wiki.contribs.org/Fail2ban et https://wiki.contribs.org/Fail2ban/fr.
Fail2ban n'est pas seulement un outil contre les attaques par force brute sur SSH, il peut aussi être utile contre les attaques de protocole http ou pourriels (spam) sur votre serveur. Voir ci-dessus: #httpd-e-smith et #polluposteur.
Dépôts de logiciels[2]
Configuration pour le dépôt de logiciels "Firewall-Services".
Prendre tout le contenu de l'encadré pour la commande.
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
Configuration pour le dépôt de logiciels "EPEL".
Prendre tout le contenu de l'encadré pour la commande.
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 //dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL \ Visible no \ status disabled
On signale le changement à yum.
# signal-event yum-modify
Attendre 20-30 secondes pour que yu
m ait terminé sa mise à jour.
On vérifie le dépôt "fws".
# db yum_repositories show fws
fws=repository BaseURL=http://repo.firewall-services.com/centos/$releasever EnableGroups=no GPGCheck=yes GPGKey=http://repo.firewall-services.com/RPM-GPG-KEY Name=Firewall Services Visible=yes status=disabled
On vérifie le dépôt "epel".
# db yum_repositories show epel
epel=repository BaseUrl=http://download.fedoraproject.org/pub/epel/6/$basearch EnableGroups=no GPGCheck=yes GPGKey=http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL MirrorList=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch Name=Epel - EL6 Visible=no status=disabled
Installation de la Contrib Fail2ban
On lance l'installation.
- yum -y --enablerepo=fws --enablerepo=epel install smeserver-fail2ban
Modules complémentaires chargés : fastestmirror, smeserver Configuration du processus d'installation Loading mirror speeds from cached hostfile * base: centos.mirror.globo.tech ... Résolution des dépendances ... Dépendances résolues ============================================================================================ Paquet Architecture Version Dépôt Taille ============================================================================================ Installation: smeserver-fail2ban noarch 9:0.1.18-1.el6.fws fws 25 k ... python-inotify noarch 0.9.1-1.el6 epel 50 k Résumé de la transaction ============================================================================================ Installation de 6 paquet(s) ... (1/6): fail2ban-0.9.6-1.el6.1.noarch.rpm | 468 kB 00:00 ... (6/6): smeserver-fail2ban-0.1.18-1.el6.fws.noarch.rpm | 25 kB 00:00 -------------------------------------------------------------------------------------------- Total 541 kB/s | 660 kB 00:01 ... Migrating existing database yum_installed ... Verifying : fail2ban-0.9.6-1.el6.1.noarch 1/6 ... Verifying : libmnl-1.0.2-3.el6.x86_64 6/6 Installé: smeserver-fail2ban.noarch 9:0.1.18-1.el6.fws Dépendance(s) installée(s) : fail2ban.noarch 0:0.9.6-1.el6.1 gamin-python.x86_64 0:0.1.10-9.el6 ipset.x86_64 0:6.11-4.el6 libmnl.x86_64 0:1.0.2-3.el6 python-inotify.noarch 0:0.9.1-1.el6 Terminé ! ============================================================== WARNING: You now need to run BOTH of the following commands to ensure consistent system state: signal-event post-upgrade; signal-event reboot You should run these commands unless you are certain that yum made no changes to your system. ==============================================================
Avant de lancer les commandes traditionnelles de signalisation des changements et réamorçage, il nous faut activer le démon[3] de masquage[4] d'adresses IP pour que Fail2Ban puisse fonctionner correctement.
Si on désactive le masquage, Fail2ban ne bannira rien.
On active le masquage d'adresses IP.
# db configuration setprop masq status enabled
On vérifie.
# db configuration show masq
masq=service
DenylogTarget=drop
Logging=most
Stealth=no
Trace=disabled
pptp=yes
status=enabled
On signale les changements de manière traditionnelle.
# signal-event post-upgrade; signal-event reboot
Broadcast message from root@fail2ban (/dev/pts/0) at 23:07 ... The system is going down for reboot NOW!
A défaut d'exécuter ces commandes, la prochaine fois que les règles iptables seront rechargées, l'accès au réseau sera complètement verrouillé.
Usage
Commande DB
Dans le gestionnaire Server Manager , il n'existe pas de panneau de configuration pour Fail2ban. Toutefois, on peut gérer cette Contrib avec la librairie config
d'OpenSSL.
On affiche la configuration de Fail2ban.
[root@fail2ban ~]# config show fail2ban
fail2ban=service Mail=enabled status=enabled
Options disponibles
IgnoreIP
: listes d'adresses IP ou de sous-réseaux, en notation CIDR,[5] qui ne seront jamais bloquées par Fail2ban. Une virgule sépare les adresses. 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 (Server Manager > Accès à distance > Gestion à distance) sont toujours automatiquement mis sur la liste blanche.FilterLocalNetworks
: peut être activée ou désactivée (désactivée par défaut). Si activée, les réseaux locaux ne seront pas mis sur la liste blanche et Fail2ban pourra ainsi bannir des hôtes du réseau interne. 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: 1800.FindTime
: fenêtre de vérification de Fail2ban, en secondes. Par défaut: 900. Signifie que Fail2ban vérifiera seulement le nombre de connexions échouées ou tentées durant les 15 dernières minutes (900 secondes).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ée ou désactivée (activée par défaut). Si elle est activée, chaque bannissement sera notifié par courriel.MailRecipient
: si Mail est activé, l'adresse du courriel qui recevra les notifications de bannissement. Par défaut: root (le compte "admin" recevra les courriels).
Après avoir modifié l'un de ces paramètres, vous devez signaler le changement à l'aide de la commande suivante:
signal-event fail2ban-conf |
Exemple
Si on veut mettre une adresse IP particulière ainsi qu'un sous-réseau sur la liste blanche, on lance la commande:
config setprop fail2ban IgnoreIP 12.15.22.4,17.20.0.0/16 |
Puis, il nous faut signaler la modification.
signal-event fail2ban-conf |
La commande signal-event fail2ban-conf
redémarre effectivement le service et supprime les bannissements existants mais un changement de findtime se traduit par un ré-bannissement. Sachez que le délai de redémarrage peut être prolongé de façon inattendue en raison du processus d'analyse des journaux pour extraire les adresses incriminées.
Services
Les services suivants sont surveillés et Fail2ban interdira les adresses IP pour la durée BanTime si plus de MaxRetry d'échecs d'authentification se produisent en moins de FindTime
.
ssh
dovecot
: (seulement avec SME-9 ou si on utilise https://wiki.fws.fr/smedev/dovecot?s[]=smeserver&s[]=dovecot smeserver-dovecot)qpsmtpd
: si un serveur externe vous envoie trop de courriels que rejetteqpsmtpd
, c'est probablement un polluposteur et Fail2ban va le mettre sur la liste noire.MaxRetry
est de x3 pour ce service; ainsi avec la configuration par défaut, un serveur externe va être mis sur la liste noire si 9 courriels sont rejetés en deça de 15 minutes.httpd-e-smith
: le serveur standard dehttp
. Trois différents filtres vérifient les journaux du serveur Apache.noscripts
: vérifie le client qui demande de rouler des scripts qui ne sont pas disponibles sur le serveur. Habituellement, c'est un pirate adolescent[6] (script-kiddy) qui essaie d'exploiter des failles de vulnérabilité.scan
: un autre jeu de filtres pour les balayages populaires (phpMyAdmin, wp-login, zone admin, etc...).auth
: va vérifier les défaillances d'authentification standards.
pam
: va vérifier les défaillances d'authentification génériques. Tout ce qui utilise pam devrait fonctionner.SOGo
: vérifie les journaux deSOGo
pour des défaillances d'authentification.LemonLDAP-NG
: vérifie les journaux système pour les défaillances d'authentification au portailLemonLDAP::NG
.ftp
: vérifie les défaillances d'authentification au démon FTP.Ejabberd
: vérifie les défaillances d'authentification àejabberd
.
Chaque filtre se désactive automatiquement si le service correspondant est désactivé.
Filtre spécifique
Vous pouvez désactiver un filtre spécifique.
Exemple, si vous souhaitez désactiver les filtres Apache.
db configuration setprop httpd-e-smith Fail2Ban disabled |
Puis, il faut signaler le changement de la configuration.
signal-event fail2ban-conf |
Bannissements sélectifs
Fail2ban fera de son mieux pour effectuer une interdiction sélective.
Exemple
Si 3 échecs d'authentification SSH sont détectés, seul le port TCP 22 (ou tout autre port que vous avez choisi pour SSH) sera bloqué pour l'adresse IP fautive. Idem pour httpd-e-smith
, SOGo
, LemonLDAP::NG
bloquera seulement les ports TCP 80 et 443, qpsmtpd
bloquera les ports TCP 25 et 465, dovecot
bloquera 143 et 993, etc.
Bannissements complets
Il existe seulement deux façons de bannir complètement tous les ports/protocoles pour une adresse IP fautive:
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'IP du client sera mis en liste noire pour l'ensemble des ports.recidive
Il s'agit d'un filtre spécial. Il surveille les journaux Fail2Ban et met sur la liste noire l'adresse IP du client qui se fait verrouillée plusieurs fois. Si un client est bloqué 5 fois en 24 heures, il sera mis sur la liste noire pour une semaine complète.
Usage de Fail2ban
Affichage de toutes les prisons
# fail2ban-client status
Status
|- Number of jail: 14
`- Jail list: ftp, http-auth, http-badbots, http-fakegooglebot, http-noscript, http-overflows, http-scan, http-shellshock, imap, pam-generic, qpsmtpd, recidive, ssh, ssh-ddos
Affichage des adresses IP bannies d'une prison spécifique
# fail2ban-client status ssh
Status for the jail: ssh
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/sshd/current
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Script affichant tous les bannissements
Le script ci dessous affichera le nombre total de tous les bannissements de toutes les prisons.
On crée le fichier dans le répertoire /root.
On se rend donc dans le répertoire de l'usager root.
# cd
On vérifie.
# pwd
/root
On crée le fichier du script.
# touch checklist_ban.sh
On ajuste les droits.
# chmod 700 checklist_ban.sh
On vérifie.
# ls -alsd checklist_ban.sh
0 -rwx------ 1 root root 0 24 mai 10:39 checklist_ban.sh
On écrit le contenu du fichier avec la commande cat >>
.
Prendre tout le contenu de l'encadré pour la commande.
cat >> /root/checklist_ban.sh <<'EOT' #!/bin/bash #lancer le script en sudo JAILS=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list://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 EOT
On vérifie.
# cat checklist_ban.sh
#!/bin/sh
#lancer le script en sudo
JAILS=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list://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
Il n'y a pas de ligne vide avant la ligne #!/bin/sh. Ci-dessus, nous avons inséré une ligne vide pour faciliter la copie de la commande.
On lance le script pour vérifier son fonctionnement.
# ./checklist_ban.sh
http-auth 0 http-badbots 0 http-fakegooglebot 0 http-noscript 0 http-overflows 0 http-scan 0 http-shellshock 0 imap 0 pam-generic 0 qpsmtpd 0 recidive 0 ssh 0 ssh-ddos 0
Le script fonctionne parfaitement.
Amnistie d'un bannissement d'une adresse IP
Dans certains cas, vous pouvez réintégrer une adresse IP immédiatement si vous ne voulez pas attendre le processus automatique de réintégration de Fail2ban.
- Vous devez trouver la prison spécifique qui a bloqué l'adresse IP. Pour ce faire, vous pouvez vous référer au courriel reçu par l'utilisateur admin.
- Ou vous pouvez afficher une prison spécifique.
# fail2ban-client status qpsmtpd
Status for the jail: qpsmtpd |- Filter | |- Currently failed: 4 | |- Total failed: 99 | `- File list: /var/log/sqpsmtpd/current /var/log/qpsmtpd/current `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 123.123.123.123
On utilise la commande suivante pour amnistier l'adresse IP.
# fail2ban-client set qpsmtpd unbanip 123.123.123.123
La commande générique est la suivante.
fail2ban-client set PRISON unbanip ADRESSE_IP |
Si on veut connaître toutes les prisons actives.
# fail2ban-client status
Status
|- Number of jail: 14
`- Jail list: ftp, http-auth, http-badbots, http-fakegooglebot, http-noscript, http-overflows, http-scan, http-shellshock, imap, pam-generic, qpsmtpd, recidive, ssh, ssh-ddos
Fichier jail.conf
Fichier jail.conf par défaut
Lors de l'amorçage du serveur, lorsque le gabarit standard de Fail2ban est lu, tous les fichiers du répertoire /etc/e-smith/templates/etc/fail2ban/jail.conf
sont assemblés en un fichier unique, recréé à chaque amorçage, et qui écrase le fichier, présent lors de la fermeture du serveur, /etc/fail2ban/jail.conf
.
C'est pour cette raison qu'on ne modifie jamais directement un fichier de configuration mais, qu'on crée un gabarit personnalisé.
Lors de l'assemblage des fichiers composant un gabarit standard, les fichiers du gabarit personnalisé ont préséance sur ceux du gabarit standard.
On peut toujours se référer aux fichiers composant le gabarit standard de Fail2ban dans le répertoire: /etc/e-smith/templates/etc/fail2ban/jail.conf
pour composer les fichiers qu'on veut modifier avec le gabarit personnalisé.
Fichiers composant le gabarit standard de Fail2ban:
# ls -als /etc/e-smith/templates/etc/fail2ban/jail.conf
total 80
4 drwxr-xr-x 2 root root 4096 23 mai 22:38 .
4 drwxr-xr-x 4 root root 4096 23 mai 22:38 ..
4 -rw-r--r-- 1 root root 10 27 oct. 2017 00Default
4 -rw-r--r-- 1 root root 1032 27 oct. 2017 05IgnoreIP
4 -rw-r--r-- 1 root root 85 27 oct. 2017 10BanTime
4 -rw-r--r-- 1 root root 87 27 oct. 2017 10FindTime
4 -rw-r--r-- 1 root root 84 27 oct. 2017 15MaxRetries
4 -rw-r--r-- 1 root root 13 27 oct. 2017 16Dns
4 -rw-r--r-- 1 root root 15 27 oct. 2017 20Backend
4 -rw-r--r-- 1 root root 116 27 oct. 2017 25Actions
4 -rw-r--r-- 1 root root 736 27 oct. 2017 30Service10ssh
4 -rw-r--r-- 1 root root 680 27 oct. 2017 30Service15dovecot
4 -rw-r--r-- 1 root root 668 27 oct. 2017 30Service20qpsmtpd
4 -rw-r--r-- 1 root root 2466 27 oct. 2017 30Service25httpd
4 -rw-r--r-- 1 root root 270 27 oct. 2017 30Service30pam
4 -rw-r--r-- 1 root root 577 27 oct. 2017 30Service35SOGo
4 -rw-r--r-- 1 root root 605 27 oct. 2017 30Service40LemonLDAPNG
4 -rw-r--r-- 1 root root 496 27 oct. 2017 30Service45ftp
4 -rw-r--r-- 1 root root 512 27 oct. 2017 30Service50Ejabberd
4 -rw-r--r-- 1 root root 322 27 oct. 2017 90Recidive
[root@fail2ban ~]#
Création d'un gabarit personnalisé pour jail.conf
À faire seulement si on veut configurer d'une manière spéciale et très spécifique avec un gabarit personnalisé.
On veux changer le nombre maximum d'essais maxretry
de 3 à 5.
Nous aurions pu facilement utiliser la commande config
mais, pour notre exemple on utilise un "gabarit personnalisé" pour démontrer la marche à suivre pour modifier un paramètre quelconque.
On cherche quel fichier du gabarit standard spécifie le paramètre maxretry
.
# grep "maxretry" /etc/e-smith/templates/etc/fail2ban/jail.conf/* |
Il existe plusieurs fichiers du gabarit standard qui utilise maxretry mais il n'y a que fichier 15MaxRetries qui utilise le symbole $ comme premier caractère (qui définit une variable) pour maxretry
et qui est suivi par le caractère = (qui lui assigne une valeur numérique).
On crée un répertoire pour le gabarit personnalisé.
# mkdir -p /etc/e-smith/templates-custom/etc/fail2ban/ |
On copie le fichier 15MaxRetries
du gabarit standard dans le répertoire de notre gabarit personnalisé.
# cp /etc/e-smith/templates/etc/fail2ban/jail.conf/15MaxRetries /etc/e-smith/templates-custom/etc/fail2ban/jail.conf |
On vérifie.
# ls -ls /etc/e-smith/templates-custom/etc/fail2ban/jail.conf |
On affiche le contenu du fichier.
# cat /etc/e-smith/templates-custom/etc/fail2ban/jail.conf/15MaxRetries |
On utilise l'éditeur vi
ou "Notepad++" pour remplacer la valeur 3 par 5.
On vérifie.
# cat /etc/e-smith/templates-custom/etc/fail2ban/jail.conf/15MaxRetries |
On reconstruit le gabarit.
# expand-template /etc/rc.d/init.d/masq |
On repart masq
.
# /etc/init.d/masq restart |
On signale la modification de la configuration. (Peut prendre quelques instants.)
# signal-event fail2ban-conf |
On vérifie le fichier ré-assemblé c.-à-d. /etc/fail2ban/jail.conf
.
# cat /etc/fail2ban/jail.conf |
On voit que, dans la section [DEFAULT], notre paramètre maxretry = 5 est défini à la valeur qu'on lui a donné dans le gabarit personnalisé.
Suppression d'un gabarit personnalisé
On supprime le répertoire créé au paragraphe #Création d'un gabarit personnalisé pour jail.conf.
Les options -rf ne demandent aucune confirmation et ne pardonnent pas les erreurs.
# rm -rf /etc/e-smith/templates-custom/etc/fail2ban/ |
On vérifie.
# ls -als /etc/e-smith/templates-custom/etc/fail2ban/ |
On reconstruit le gabarit.
# expand-template /etc/rc.d/init.d/masq |
On repart masq.
# /etc/init.d/masq restart |
On signale la modification de la configuration. (Peut prendre quelques instants.)
# signal-event fail2ban-conf |
On affiche la configuration de Fail2ban.
# config show fail2ban |
Paramètre ignoreip
Votre réseau et votre serveur sont dans la liste des adresses IP ignorées par Fail2ban (voir: IgnoreIP
au paragraphe #Options disponibles).
[DEFAULT] ignoreip = 127.0.0.0/8,192.168.1.1,192.168.1.0/24 bantime = 1800 findtime = 900 maxretry = 3 usedns = yes backend = auto
Autres services
Les différents services qu'on peut ajouter au fichier jail.conf
.
[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
Il suffit de lancer la commande suivante pour désinstaller Fail2ban.
# yum remove smeserver-fail2ban fail2ban |
Bogues
S'il vous plaît, rapportez les bogues dans la section SME-Contribs de bugzilla et sélectionnez le composant smeserver-fail2ban ou utilisez ce lien.
Aperçu ci-dessous des problèmes actuels de cette Contrib.
ID | Product | Version | Status | Summary (7 tasks) |
10422 | SME Contribs | 9.2 | UNCONFIRMED | NFR: portscan jail |
10370 | SME Contribs | 9.2 | UNCONFIRMED | NFR modify 90Recidive template to allow adjustment with db variables |
9709 | SME Contribs | 9.2 | CONFIRMED | add jail for wordpress |
9669 | SME Contribs | 9.2 | CONFIRMED | ERROR No file(s) found for glob /var/log/sogo/sogo.log |
9557 | SME Contribs | 9.2 | UNCONFIRMED | masq file doesn't reflect fail2ban banned IPs |
9556 | SME Contribs | 9.2 | UNCONFIRMED | http filters in jail.conf use wrong log files |
8645 | SME Contribs | 9.2 | CONFIRMED | AuthExtern pwauth failures not been logged by fail2ban jail http-auth |
Toutes les commandes de Fail2ban
Voir: http://www.fail2ban.org/wiki/index.php/Commands.
Le manuel original de Fail2ban
Voir: http://www.fail2ban.org/wiki/index.php/MANUAL_0_8.
Exemples de bannissements
Bannissement d'une adresse IP spécifique
Quelquefois, il est préférable de bannir une adresse spécifique pour arrêter de recevoir des courriels d'un polluposteur.
Dans Thunderbird, on sélectionne le courriel > Affichage > Code source du message.
X-Spam-Level: ****** X-Spam-Status: Yes, hits=6.9 required=5.0 tests=AXB_JT_FOLNO0,HTML_MESSAGE,MIME_QP_LONG_LINE,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E8_51_100,RAZOR2_CHECK,RCVD_IN_DNSWL_LOW X-Spam-Flag: YES X-Spam-Check-By: micronator.org Received: from smtp13.macau.ctm.net (HELO zimbramta07.macau.ctm.net) (125.31.5.33) by micronator.org (qpsmtpd/0.84) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 08 Feb 2016 03:38:39 -0500
Comme on le voit ci-dessus, SpamAssassin a donné un statut de 6.9 à ce courriel.
Bannissement
On bloque cette adresse dans la prison qpsmtpd (démon du courrier).
# fail2ban-client set qpsmtpd banip 125.31.5.33
125.31.5.33
On vérifie.
- fail2ban-client status qpsmtpd
Status for the jail: qpsmtpd |- Filter | |- Currently failed: 0 | |- Total failed: 12 | `- File list: /var/log/sqpsmtpd/current /var/log/qpsmtpd/current `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 125.31.5.33
Bannissement d'une plage d'adresses IP
On fait une recherche de l'adresse 125.31.5.33 sur http://www.monwhois.fr/.
... Lookup results for 125.31.5.33 from whois.lacnic.net server: inetnum: 125.31.0.0 - 125.31.63.255 ... address: Rua da Lagos, Telecentro address: P.O. Box 868 address: Taipa address: Macau e-mail: noc@macau.ctm.net ... route: 125.31.5.0/24 ...
Route spécifie 125.31.5.0/24.
Bannissement
On ne connaît personne à Macau. Nous allons donc bannir toute cette plage d'adresses pour les courriels (prison qpsmtpd).
# fail2ban-client set qpsmtpd banip 125.31.5.33/24
125.31.5.33/24
On vérifie.
# fail2ban-client status qpsmtpd
Status for the jail: qpsmtpd |- Filter | |- Currently failed: 0 | |- Total failed: 24 | `- File list: /var/log/sqpsmtpd/current /var/log/qpsmtpd/current `- Actions |- Currently banned: 1 |- Total banned: 2 `- Banned IP list: 125.31.5.33/24
Bannissement pour une semaine
Si on veut bannir pour un peu plus longtemps, une semaine, on peut utiliser la prison recidive; voir le paragraphe #Bannissements complets.
On vérifie que la prison recidive est présente.
# fail2ban-client status
Status
|- Number of jail: 13
`- Jail list: http-auth, http-badbots, http-fakegooglebot, http-noscript, http-overflows, http-scan, http-shellshock, imap, pam-generic, qpsmtpd, recidive, ssh, ssh-ddos
Bannissement
On bannit la plage d'adresses IP du paragraphe précédent pour une semaine en l'insérant dans la prison recidive.
# fail2ban-client set recidive banip 125.31.5.33/24
125.31.5.33/24
On vérifie.
# fail2ban-client status recidive
Status for the jail: recidive |- Filter | |- Currently failed: 1 | |- Total failed: 39 | `- File list: /var/log/fail2ban/daemon.log `- Actions |- Currently banned: 3 |- Total banned: 3 `- Banned IP list: 162.213.152.92 66.131.226.189 125.31.5.33/24
Affichage de toutes le prisons
# ./checklist_ban.sh
ftp 0 http-auth 0 http-badbots 0 http-fakegooglebot 0 http-noscript 0 http-overflows 0 http-scan 0 http-shellshock 0 imap 0 pam-generic 0 qpsmtpd 1 recidive 3 ssh 0 ssh-ddos 0
Victoire totale, hissons la bannière de la victoire.
- ↑ FQDN: Dans le DNS, un Fully Qualified Domain Name (FQDN, ou nom de domaine complètement qualifié) est un nom de domaine qui révèle la position absolue d'un nœud dans l'arborescence DNS en indiquant tous les domaines de niveau supérieur jusqu'à la racine. On parle également de domaine absolu, par opposition aux domaines relatifs. Par convention, le FQDN est ponctué par un point final.
Référence: https://fr.wikipedia.org/wiki/Fully_qualified_domain_name. - ↑ Dépôts de logiciels: En informatique, un dépôt ou référentiel (de l'anglais repository) est un stockage centralisé et organisé de données. Ça peut être une ou plusieurs bases de données où les fichiers sont localisés en vue de leur distribution sur le réseau ou bien un endroit directement accessible aux utilisateurs. La plupart des distributions GNU/Linux utilisent des dépôts accessibles sur Internet, officiels et non officiels, permettant aux utilisateurs de télécharger et de mettre à jour des logiciels compatibles. Ces logiciels sont distribués sous forme de paquets. Référence: https://fr.wikipedia.org/wiki/D%C3%A9p%C3%B4t_(informatique)#D%C3%A9p%C3%B4ts_de_logiciels.
- ↑ Démon (daemon - disk and execution monitor): Un programme démon, normalement lancé au démarrage du système, est inoffensif et réside en mémoire en attente des requêtes. Il s'exécute lorsqu'une requête concerne le port sur lequel il est en veille. Parmi les fonctions dont il est chargé, on peut mentionner: le routage et la distribution du courrier électronique (sendmail), la gestion des connexions réseaux (inetd) et l'impression en tâche de fond (Lpd). Généralement, le nom du programme démon se termine par d ou .d. Chaque serveur Web a un démon httpd (HyperText Transfer Protocol Daemon) qui attend continuellement les requêtes provenant des clients Web et de leurs utilisateurs. Référence: http://gdt.oqlf.gouv.qc.ca/ficheOqlf.aspx?Id_Fiche=2069962.
- ↑ Masquage d'adresses IP: Technique qui permet à un serveur de remplacer par une adresse IP publique les adresses privées des postes de travail d'un réseau local d'entreprise, fonctionnant ou non selon le protocole IP, pour faire en sorte qu'ils puissent partager la même connexion à Internet. Note: Développé par la compagnie Linux, le masquage d'adresses IP est une technique particulière de traduction d'adresses de réseau. En anglais, on utilise le terme network address translation et le sigle NAT comme équivalents de traduction d'adresses de réseau. Termes privilégiés: masquage d'adresses IP n. m. // masquage IP n. m. Référence: http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=8363603.
- ↑ CIDR: Classless Inter-Domain Routing (routage interdomaine sans classes), a été mis au point par le document 1993RFC 15185 afin de diminuer la taille de la table de routage contenue dans les routeurs. Pour ce faire, on agrège plusieurs entrées de cette table en une seule.
La distinction entre les adresses de classe A, B ou C a été ainsi rendue obsolète, de sorte que la totalité de l'espace d'adressage unicast (envoi individuel) puisse être gérée comme une collection unique de sous-réseaux indépendamment de la notion de classe. Le masque de sous-réseau ne peut plus être déduit de l'adresse IP elle-même, les protocoles de routage compatibles avec CIDR, dits classless, doivent donc accompagner les adresses du masque correspondant.
Référence: https://fr.wikipedia.org/wiki/Adresse_IP#Agr%C3%A9gation_des_adresses. - ↑ pirate adolescent: Jeune pirate amateur, à la recherche d'une intrusion facile, souvent irresponsable et sans éthique, qui utilise des scripts déjà existants, disponibles gratuitement sur le Net, pour effectuer ses attaques malveillantes. Note: Les pirates adolescents utilisent des programmes de script conçus par d'autres au lieu d'en créer eux-mêmes. Généralement, ils laissent des traces pour marquer leur passage. Leur but est souvent la célébrité (ou tout au moins d'impressionner les copains). Ils constituent une menace pour tous les systèmes informatiques, puisqu'ils font habituellement une sélection aléatoire de leurs cibles. Référence: http://www.granddictionnaire.com/ficheOqlf.aspx?Id_Fiche=8872869.