GNU/Linux >> Tutoriels Linux >  >> Linux

Sécurisez votre serveur Linux avec Fail2Ban [Guide du débutant]

Qu'est-ce que Fail2Ban ?

Si vous avez activé SSH, veuillez vérifier l'historique de connexion de votre serveur Linux. Vous serez surpris de voir un grand nombre d'adresses IP qui tentent de se connecter à votre serveur via SSH.

Si vous n'avez aucun mécanisme en place pour dissuader ces tentatives de connexion, votre système est susceptible d'être attaqué par force brute. Fondamentalement, un script/bot continuera à tenter de se connecter SSH à votre système en essayant diverses combinaisons de nom d'utilisateur et de mots de passe.

C'est là qu'un outil comme Fail2Ban entre en scène. Fail2Ban est un logiciel gratuit et open source qui aide à sécuriser votre serveur Linux contre les connexions malveillantes. Fail2Ban bannira l'IP (pendant un certain temps) s'il y a un certain nombre de tentatives de connexion infructueuses.

Fail2Ban fonctionne immédiatement avec les paramètres de base, mais il est également extrêmement configurable. Vous pouvez le modifier à votre guise et créer des filtres et des règles selon vos besoins.

Ça a l'air intéressant? Pourquoi ne pas tester Fail2Ban ? Lisez et suivez le reste de l'article et essayez Fail2Ban vous-même.

Installer Fail2Ban sur Linux

Vous pouvez deviner la popularité de Fail2Ban du fait qu'il est disponible dans les dépôts officiels de toutes les principales distributions Linux. Cela rend l'installation de Fail2Ban une tâche simple.

Installer Fail2Ban sur CentOS et Red Hat

Vous devez être utilisateur root ou sudo pour installer un nouveau logiciel sur votre système.

Vous devez vous assurer que votre système est à jour et que le référentiel EPEL est installé.

sudo yum update && sudo yum install epel-release

Vous pouvez maintenant installer Fail2Ban avec la commande suivante :

sudo yum install fail2ban

Installer Fail2Ban sur Ubuntu et Debian

Tout d'abord, assurez-vous que votre système est mis à jour :

sudo apt update && sudo apt upgrade -y

Maintenant, installez Fail2Ban avec cette commande :

sudo apt install fail2ban

Comprendre le fichier de configuration Fail2Ban

Il existe deux fichiers de configuration principaux dans Fail2Ban :/etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf. Laissez-moi vous expliquer ce qu'ils font.

/etc/fail2ban/fail2ban.conf :Il s'agit du fichier de configuration des paramètres opérationnels du démon Fail2Ban. Les paramètres tels que le niveau de journalisation, le fichier journal, le socket et le fichier pid sont définis ici.

/etc/fail2ban/jail.conf :C'est là que toute la magie opère. C'est le fichier dans lequel vous pouvez configurer des éléments tels que l'heure d'interdiction par défaut, le nombre de reties avant d'interdire une adresse IP, la liste blanche des adresses IP, les informations d'envoi de courrier, etc. En gros, vous contrôlez le comportement de Fail2Ban à partir de ce fichier.

Maintenant, avant d'aller modifier ces fichiers, Fail2Ban conseille de faire une copie avec le fichier .local pour ces fichiers de configuration. C'est parce que les fichiers de configuration par défaut peuvent être écrasés dans les mises à jour et vous perdrez tous vos paramètres.

sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Comprenons maintenant le fichier jail.conf. Si vous utilisez la commande less pour lire ce gros fichier, cela peut sembler assez déroutant. Le fichier conf essaie de tout expliquer avec beaucoup trop de commentaires. Alors, laissez-moi simplifier cela pour vous.

Le fichier jail.conf est divisé en services. Il y a une section [Default] et elle s'applique à tous les services. Et puis vous pouvez voir différents services avec leurs paramètres respectifs (le cas échéant). Tous ces services sont entre parenthèses. Vous verrez des sections comme [sshd], [apache-auth], [squid] etc.

Si je supprime les commentaires, la section par défaut ressemble à ceci :

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = [email protected]
sender = [email protected]
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

Laissez-moi vous expliquer la signification de certains de ces paramètres.

  • bantime :définissez la durée de l'interdiction. La valeur par défaut est de 10 minutes.
  • findtime :La fenêtre dans laquelle l'action sur une IP sera effectuée. La valeur par défaut est 10 minutes. Supposons qu'une mauvaise connexion ait été tentée par une certaine IP à 10h30. Si la même IP atteint le nombre maximum de tentatives avant 10h40, elle sera bannie. Sinon, la prochaine tentative infructueuse après 10h40 sera comptée comme première tentative infructueuse.
  • maxretry :nombre de tentatives infructueuses avant qu'une action ne soit entreprise
  • usedns :le paramètre "warn" tente d'utiliser le reverse-DNS pour rechercher le nom d'hôte et l'interdire en utilisant le nom d'hôte. Le définir sur non bannira les adresses IP, pas le nom d'hôte.
  • destemail :l'adresse e-mail à laquelle les alertes seront envoyées (doit être configurée)
  • expéditeur :le nom de l'expéditeur dans l'e-mail de notification
  • mta :agent de transfert de courrier utilisé pour les e-mails de notification
  • banaction :ce paramètre utilise le fichier /etc/fail2ban/action.d/iptables-multiport.conf pour définir l'action après le nombre maximal de tentatives infructueuses
  • protocole :le type de trafic qui sera supprimé après l'interdiction

Si vous souhaitez apporter des modifications à n'importe quelle prison (ou à toute la prison), comme le nombre maximal de tentatives, le temps d'interdiction, le temps de recherche, etc., vous devez modifier le fichier jail.local.

Comment utiliser Fail2Ban pour sécuriser le serveur Linux

Laissez-moi vous montrer quelques-unes des façons dont vous pouvez utiliser Fail2Ban pour renforcer la sécurité Linux.

Notez que vous devez être un utilisateur root ou avoir un accès sudo pour exécuter les commandes fail2ban.

Activez Fail2Ban sur votre serveur et vérifiez toutes les prisons en cours d'exécution

Vous pouvez utiliser les commandes systemd pour démarrer et activer Fail2Ban sur votre serveur Linux :

systemctl start fail2ban
systemctl enable fail2ban

Une fois que Fail2Ban est activé, vous pouvez voir le statut et les prisons actives avec la commande fail2ban-client :

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

Au cas où vous vous poseriez la question, la prison sshd est activée par défaut.

Voir le journal Fail2Ban

Le journal Fail2Ban se trouve dans /var/log/fail2ban.log. Les fichiers journaux sont au format suivant :

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

Vous pouvez voir qu'il identifie les adresses IP et les interdit lorsqu'elles franchissent le seuil de tentatives maximales.

Voir les IP bannies par Fail2Ban

Une façon est de vérifier le statut d'une certaine prison. Vous pouvez utiliser le client Fail2Ban à cette fin.

fail2ban-client status <jail_name>

Par exemple, si vous devez voir toutes les mauvaises connexions ssh interdites par Fail2Ban, vous pouvez l'utiliser de la manière suivante. La sortie afficherait le nombre total de tentatives infructueuses et le nombre total d'adresses IP interdites.

[email protected]:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

Le système qui essaie de se connecter via SSH à partir de la connexion échouée devrait obtenir une erreur comme celle-ci

ssh: connect to host 93.233.73.133 port 22: Connection refused

Comment bannir définitivement une IP avec Fail2Ban

Vous savez maintenant que l'interdiction imposée à une adresse IP par Fail2Ban est temporaire. Par défaut, c'est pendant 10 minutes et l'attaquant peut essayer de se reconnecter après 10 minutes.

Cela pose un risque de sécurité car les attaquants pourraient utiliser un script qui tente de se connecter après un intervalle de 10 minutes.

Alors, comment mettez-vous une interdiction permanente en utilisant Fail2Ban ? Il n'y a pas de réponse claire à cela.

À partir de la version 0.11 de Fail2Ban, le temps de bannissement sera automatiquement calculé et les IP persistantes verront leur temps de bannissement augmenté de façon exponentielle.

Mais si vous vérifiez votre version Fail2Ban, vous utilisez probablement la version 0.10.

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

Dans les versions antérieures, vous pouviez utiliser un bantime négatif (bantime =-1) et cela aurait été équivalent à un ban permanent mais si vous essayez cette méthode, vous verrez probablement une erreur comme 'Starting fail2ban:ERROR NOK:(' l'image disque de la base de données est malformée',)'.

Une solution de contournement pas si propre serait d'augmenter le bantime à quelque chose comme 1 jour, 1 semaine, 1 mois ou 1 an. Cela pourrait contourner le problème jusqu'à ce que la nouvelle version soit disponible sur votre système.

Comment débloquer une IP bloquée par Fail2Ban

Vérifiez d'abord si l'adresse IP est bloquée ou non. Puisque Fail2Ban fonctionne sur les iptables, vous pouvez regarder dans l'iptable pour voir les IP bannies par votre serveur :

iptables -n -L

Vous devrez peut-être utiliser la commande grep s'il y a beaucoup trop d'adresses IP interdites.

Si vous trouvez l'adresse IP spécifiée dans la sortie, elle est interdite :

Ainsi, la prochaine étape consiste à trouver quelle "prison" interdit ladite adresse IP. Vous devrez utiliser la commande Grep avec les journaux fail2ban ici.

Comme vous pouvez le voir dans la sortie ci-dessous, l'adresse IP est interdite par la prison sshd.

[email protected]:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

Maintenant que vous connaissez le nom de la prison bloquant l'IP, vous pouvez débannir l'IP en utilisant le client fail2ban :

fail2ban-client set <jail_name> unbanip <ip_address>

Comment ajouter une IP à la liste blanche dans Fail2Ban

Ce ne sera pas une bonne chose si vous vous bannissez, n'est-ce pas ? Pour ignorer qu'une adresse IP soit bannie par la session actuelle de Fail2Ban, vous pouvez ajouter l'IP à la liste blanche à l'aide d'une commande comme celle-ci :

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

Vous pouvez facilement trouver votre adresse IP sous Linux. Dans mon cas, c'était

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

Si vous souhaitez mettre définitivement l'adresse IP sur liste blanche, vous devez modifier le fichier de configuration de la prison. Allez dans ladite section prison et ajoutez la ligne ignoreip comme ceci :

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

Si vous souhaitez ajouter une adresse IP à la liste blanche de toutes les prisons de votre système, il serait préférable de modifier le fichier /etc/fail2ban/jail.local et d'ajouter une ligne sous la section DEFAULT comme ce que nous avons vu ci-dessus.

Vous devrez redémarrer Fail2Ban pour que ce changement prenne effet.

Comment voir la liste blanche IP par une prison

Vous pouvez voir toutes les adresses IP mises sur liste blanche par une prison à l'aide de cette commande :

fail2ban-client get <JAIL_NAME> ignoreip

Il devrait montrer toutes les adresses IP ignorées par Fail2Ban pour cette prison :

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

Comment supprimer une IP de la liste blanche Fail2Ban

Si vous supprimez l'IP de la liste blanche d'une certaine prison, vous pouvez utiliser cette commande :

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

Si vous souhaitez supprimer définitivement l'IP, vous devez modifier le fichier /etc/fail2ban/jail.local.

Quoi d'autre ?

Vous pouvez faire beaucoup plus de choses avec Fail2Ban. Ce guide vous donne les bases pour démarrer avec Fail2Ban. Je n'ai pas touché à des sujets tels que les actions, les notifications par e-mail, les filtres, etc.

Une fois que vous connaissez les bases de Fail2Ban, vous pouvez commencer à en explorer davantage. Pour le moment, jouez simplement avec et ajoutez une couche de sécurité supplémentaire à SSH sur votre serveur Linux.


Linux
  1. Affichez les connexions réseau de votre serveur Linux avec netstat

  2. Sécurisez vos conteneurs avec SELinux

  3. Créez votre stockage cloud avec ownCloud 6 sur Linux Mint 17

  4. Sécurité Linux :protégez vos systèmes avec fail2ban

  5. 6 outils open source indispensables pour sécuriser votre serveur Linux

Protégez votre confidentialité en ligne avec ces distributions Linux

Sécurisez votre réseau Linux avec firewall-cmd

ReaR :sauvegardez et restaurez votre serveur Linux en toute confiance

Comment sécuriser les serveurs Linux avec SE Linux

10 conseils de renforcement SSH exploitables pour sécuriser votre serveur Linux

Comment sécuriser SSH avec Fail2Ban