SME-101.10: Supplément: Fail2ban

From SME Server
Revision as of 04:02, 12 November 2018 by Michelandre (talk | contribs) (GA-0.0.1 // Ajustement pour TOC // Mise à jour des liens pour le Cours SME-101 // 2018-11-11 @22h02 HNE.)
Jump to navigation Jump to search

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


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:


  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 recommandation ou astuce.

   Une note.

   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 AutoBlockAutoBlock 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.

  1. 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


Tous les prérequis sont remplis, on peut installer Fail2ban.


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 yum 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.

  1. 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é.


Fail2ban est installé et fonctionnel.


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 rejette qpsmtpd, 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 de http. 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 de SOGo pour des défaillances d'authentification.
  • LemonLDAP-NG: vérifie les journaux système pour les défaillances d'authentification au portail LemonLDAP::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/*

/etc/e-smith/templates/etc/fail2ban/jail.conf/15MaxRetries:our $maxretry = $fail2ban{'MaxRetry'} || '3';
/etc/e-smith/templates/etc/fail2ban/jail.conf/15MaxRetries:$OUT .= "maxretry = $maxretry";
/etc/e-smith/templates/etc/fail2ban/jail.conf/30Service20qpsmtpd:my $max = $maxretry*3;
/etc/e-smith/templates/etc/fail2ban/jail.conf/30Service20qpsmtpd:maxretry = $max
/etc/e-smith/templates/etc/fail2ban/jail.conf/30Service30pam:maxretry = {$maxretry*2}
/etc/e-smith/templates/etc/fail2ban/jail.conf/90Recidive:maxretry = 5

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

total 4
4 -rw-r--r-- 1 root root 84 24 mai 13:19 15MaxRetries


On affiche le contenu du fichier.

# cat /etc/e-smith/templates-custom/etc/fail2ban/jail.conf/15MaxRetries

{
our $maxretry = $fail2ban{'MaxRetry'} || '3';

$OUT .= "maxretry = $maxretry";

}

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

{
our $maxretry = $fail2ban{'MaxRetry'} || '5';

$OUT .= "maxretry = $maxretry";

}


On reconstruit le gabarit.

# expand-template /etc/rc.d/init.d/masq


On repart masq.

# /etc/init.d/masq restart

Shutting down IP masquerade and firewall rules: Done!

Enabling IP masquerading: done


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

...
[DEFAULT]
ignoreip = 127.0.0.0/8 192.168.2.11 192.168.1.0/24 192.168.2.0/24
bantime = 1800
findtime = 900
maxretry = 5
usedns = yes
backend = auto
...
[qpsmtpd]
enabled = true
filter = qpsmtpd
logpath = /var/log/*qpsmtpd/current
maxretry = 15
action = smeserver-iptables[port="25,465",protocol=tcp,bantime=1800]
smeserver-sendmail[name="Qpsmtpd",dest=root]
...
[pam-generic]
enabled = true
filter = pam-generic
logpath = /var/log/secure
maxretry = 10
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]

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/

ls: impossible d'accéder à /etc/e-smith/templates-custom/etc/fail2ban/: Aucun fichier ou dossier de ce type


On reconstruit le gabarit.

# expand-template /etc/rc.d/init.d/masq


On repart masq.

# /etc/init.d/masq restart

Shutting down IP masquerade and firewall rules: Done!

Enabling IP masquerading: done


On signale la modification de la configuration. (Peut prendre quelques instants.)

# signal-event fail2ban-conf


On affiche la configuration de Fail2ban.

# config show fail2ban

fail2ban=service
Mail=enabled
status=enabled


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.

   Un paragraphe par service.

[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.

  1. 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.


  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.