Fail2Ban est un utilitaire d'analyse de journaux qui analyse les fichiers journaux de divers processus et interdit les adresses IP qui font trop d'échecs de mot de passe. Lorsqu'une tentative de connexion est localisée, Fail2Ban ajoutera une nouvelle règle à iptables pour bloquer l'adresse IP de l'attaquant, temporairement ou définitivement. Il peut également vous alerter par e-mail pour la même chose.
Il est principalement axé sur la détection des intrusions via SSH, mais il peut être configuré pour fonctionner avec n'importe quel service utilisant des fichiers journaux.
Prérequis
-
Un serveur basé sur Fedora 33 ou CentOS 8 avec un utilisateur non root avec des privilèges sudo.
-
Installez l'éditeur Nano car c'est ce que nous allons utiliser.
$ sudo dnf install nano -y
Installer Fail2Ban
Pour installer Fail2Ban sur CentOS 8, vous devez d'abord installer le référentiel EPEL Yum.
$ sudo dnf install epel-release
Fedora 33 est livré avec Fail2Ban.
Exécutez la commande suivante pour installer Fail2Ban sur Fedora 33 et CentOS 8.
$ sudo dnf install fail2ban
Une fois installé, nous devons activer le service.
$ sudo systemctl enable fail2ban
Ensuite, démarrez le service fail2ban.
$ sudo systemctl start fail2ban
Vous pouvez maintenant vérifier l'état du service pour voir s'il fonctionne correctement.
$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
Docs: man:fail2ban(1)
Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 19032 (f2b/server)
Tasks: 3 (limit: 1125)
Memory: 11.0M
CPU: 96ms
CGroup: /system.slice/fail2ban.service
??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Configurer Fail2Ban
Le service Fail2Ban conserve ses fichiers de configuration dans le /etc/fail2ban
annuaire. Vous tomberez sur un fichier jail.conf
dedans. Ce fichier est généralement remplacé lors des mises à niveau du package, il ne doit donc pas être modifié.
Au lieu de cela, toutes les configurations doivent être faites dans un nouveau fichier que nous appellerons jail.local
. Les paramètres de ces 2 fichiers peuvent être outrepassés via les fichiers de /etc/fail2ban/jail.d/
répertoire.
Les configurations sont appliquées dans l'ordre suivant :
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, Par ordre alphabétique/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, Par ordre alphabétique
jail.conf
contient un [DEFAULT]
section suivie de sections pour les services individuels. Chacune de ces sections peut être remplacée en les définissant dans .local
fichiers.
Configurer jail.local
Nous allons créer un nouveau jail.local
fichier.
$ sudo nano /etc/fail2ban/jail.local
Collez-y le code suivant.
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd
[sshd]
enabled = true
Appuyez sur Ctrl + X pour fermer l'éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier. Ceci définit un nouveau bantime
par défaut pour tous les services, change le backend en systemd
et active le `sshd
prison.
Redémarrez Fail2ban pour mettre en œuvre les nouvelles modifications.
$ sudo systemctl restart fail2ban
Nous pouvons confirmer les paramètres nouvellement appliqués en utilisant fail2ban-client
utilitaire.
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Nous pouvons également obtenir le statut détaillé de chaque prison spécifiquement de la manière suivante.
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Plus de paramètres
jail.conf
fournit beaucoup plus de paramètres qui peuvent être personnalisés en utilisant /jail.local
dossier. Nous passerons ensuite en revue certains paramètres.
IP en liste blanche
Vous pouvez mettre en liste blanche/ignorer les adresses IP bloquées par Fail2ban en utilisant le code suivant.
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
Si vous souhaitez ajouter des IP à la liste blanche uniquement pour certaines prisons, vous pouvez le faire via fail2ban-client
.
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
Remplacer JAIL
dans la commande ci-dessus avec le nom de la prison pour laquelle vous souhaitez modifier le paramètre.
Temps d'interdiction et nombre de nouvelles tentatives
Il existe 3 paramètres qui peuvent définir l'heure et le nombre de tentatives d'interdiction.
bantime
- est la durée en secondes pendant laquelle une IP est bannie. Pour définir une interdiction permanente, définissez cette valeur sur un nombre négatif. La valeur par défaut est 10 minutes ou 600 secondes.
findtime
- est la durée entre les tentatives de connexion avant qu'une interdiction ne soit définie. Cette valeur est toujours un nombre de secondes. Par exemple, si Fail2ban est configuré pour interdire une adresse IP après 5 tentatives de connexion infructueuses, ces 5 tentatives doivent avoir lieu dans les 10 minutes définies bantime
limite.
maxretry
- est le nombre de tentatives à partir d'une seule adresse IP avant qu'une interdiction ne soit imposée. La valeur par défaut est 3.
Pour personnaliser ces paramètres, collez les lignes suivantes dans \etc\fail2ban\jail.local
fichier sous le [DEFAULT]
rubrique.
bantime = 3600
findtime = 300
maxretry = 4
Alertes par e-mail
Pour envoyer des alertes par e-mail, vous devez d'abord installer un agent de transfert de courrier (MTA). Pour notre objectif, nous allons installer sendmail
.
$ sudo dnf install sendmail
Pour recevoir l'e-mail, ajoutez le code suivant dans \etc\fail2ban\jail.local
fichier sous [DEFAULT]
rubrique.
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s
destemail
fait référence à l'identifiant de l'e-mail de destination qui est l'identifiant sur lequel vous souhaitez recevoir les e-mails, sendername
fait référence au nom de l'expéditeur, nous utilisons donc Fail2Ban pour cela. mta
fait référence à l'agent de transfert de courrier utilisé qui est sendmail
ici. Si vous utilisez Postfix
, puis utilisez la valeur mail
pour le mta
variables.
action
fait référence à l'action par défaut qui a lieu une fois qu'une intrusion est détectée. La valeur par défaut est %(action_)s
qui n'interdit que l'utilisateur. %(action_mw)s
bannira et enverra un e-mail avec un rapport Whois ; tandis que %(action_mwl)s
interdira et enverra un e-mail avec le rapport Whois ainsi que les informations des fichiers journaux pertinents. Cela peut également être modifié sur une base spécifique à la prison.
Paramètres pour les prisons individuelles
Comme nous le savons déjà, [DEFAULT]
s'applique à toutes les prisons, il est temps d'examiner certaines prisons spécifiques et leurs paramètres.
Prison SSHD
Nous avons déjà défini [sshd]
plus tôt dans notre jail.local
dossier. Nous pouvons le personnaliser un peu plus avec le code suivant.
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
Dans ce cas, nous utilisons une variable prédéfinie ssh
pour le port qui est le port SSH par défaut. Si vous utilisez un port SSH différent, vous devez le changer. logpath
fait référence à l'emplacement du fichier journal à surveiller. %(ssh_log)s
utilise une valeur définie dans le fichier de configuration standard de Fail2ban (/etc/fail2ban/paths-common.conf
).
Prison Nginx
Nginx a plusieurs prisons qui peuvent être utilisées dans Fail2Ban. Par exemple, si une partie de votre site protégée par un mot de passe est attaquée à plusieurs reprises, vous pouvez utiliser une section [nginx-http-auth]
dans jail.local
fichier pour cela.
[nginx-http-auth]
enabled = true
Nous pouvons également ajouter une section appelée [nginx-botsearch]
pour arrêter les requêtes vers des dossiers ou des emplacements qui n'existent pas.
[nginx-badbots]
enabled = true
Il existe également d'autres prisons Nginx, mais elles ne sont pas préconfigurées avec Fail2Ban. Ils doivent être créés manuellement et la plupart d'entre eux peuvent être basés sur ceux d'Apache avec lesquels Fail2Ban est livré.
Filtres Fail2Ban et Failregexs
Il existe un autre paramètre dans la configuration Fail2Ban appelé filtres. Les filtres décident si une ligne du fichier journal indique un échec d'authentification.
La valeur du filtre dans le fichier de configuration est une référence à un fichier situé dans /etc/fail2ban/filter.d
répertoire avec son .conf
extension supprimée.
Vous pouvez voir quels types de filtres sont disponibles en consultant le répertoire.
$ ls /etc/fail2ban/filter.d
Vous y verrez 2 fichiers journaux pour Nginx ; nginx-badbots.conf
et nginx-http-auth.conf
.
Ces fichiers de configuration utilisent des expressions régulières (regex) pour analyser les fichiers journaux. Ceux-ci sont appelés Failregexs. Vous pouvez personnaliser ou créer de nouveaux filtres en écrivant vos propres expressions régulières. Nous n'aborderons pas ces expressions régulières en profondeur car elles sortent du cadre de ce didacticiel.
Surveiller les journaux Fail2Ban et le pare-feu
Vous pouvez vérifier l'état de Fail2Ban en utilisant systemctl
comme indiqué précédemment.
$ sudo systemctl status fail2ban
Pour obtenir un peu plus de détails, vous pouvez utiliser le journalctl
commande.
$ sudo journalctl -b -u fail2ban
Vous pouvez également utiliser fail2ban-client
pour interroger le statut de fail2ban-server
ou et prison individuelle.
$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name
Vous pouvez également interroger le fichier journal de Fail2ban.
$ sudo tail -F /var/log/fail2ban.log
Vous pouvez lister les règles actuellement configurées pour iptables.
$ sudo iptables -L
Vous pouvez également répertorier les règles iptables dans un format qui reflète les commandes nécessaires pour activer ces règles.
$ sudo iptables -S
Conclusion
Ceci conclut notre tutoriel sur l'installation et la configuration de Fail2Ban sur un serveur basé sur Fedora 33 ou CentOS 8. Si vous avez des questions, postez-les dans les commentaires ci-dessous.