Protéger un accès SSH avec fail2ban sous CentOS 7

Se prémunir de tentatives d’intrusion serveur en protégeant l’accès SSH avec fail2ban sous CentOS 7

Une connexion SSH sur un serveur est une opération plutôt sécurisée, mais cela ne veut pas dire que le serveur en question est protégé d’une quelconque tentative d’intrusion, notamment par force brute. D’ailleurs en analysant les logs système, même sur un petit serveur anodin, on peut en général voir des dizaines, voir des centaines de connexions avec des utilisateurs connus (root) ou inconnus qui échouent. Ce ne sont pas des attaques à proprement parler, mais des tentatives de connexion en essayant des combinaisons de nom d’utilisateur et de mot de passe. C’est sur ce genre de terrain que fail2ban peut aider à mieux protéger un serveur de connexions non voulues en créant des règles de pare-feu automatiquement suivant certaines conditions.

Installation de fail2ban

Pour une installation sous CentOS 7 comme c’est le cas ici, fail2ban n’est pas disponible dans le dépôt officiel, par contre il existe dans EPEL (Extra Packages for Enterprise Linux), il faut donc l’avoir installé au préalable.

sudo yum install epel-release

Maintenant le paquet est disponible, il peut être installé et démarré dans la foulée :

sudo yum install fail2ban
sudo systemctl enable fail2ban

Configuration d’un jail SSH

Cet article n’a pas pour but d’être une documentation pour fail2ban mais simplement de rapidement sécuriser l’accès SSH d’une machine. Pour faire vite, fail2ban fonctionne par jail, un jail est une combinaison d’un filtre et d’actions à faire lorsque la ou les conditions sont remplies.

La configuration de fail2ban se trouve sous /etc/fail2ban, il y a d’ailleurs un fichier jail.conf par défaut. Il est bon de ne pas toucher à ce fichier, mais d’ajouter les modifications dans un fichier jail.local qui sera toujours lu en priorité par rapport à jail.conf.

On peut créer notre fichier jail.local avec une configuration de base :

$ sudo vim /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600

findtime = 600
maxretry = 3

ignoreip = 78.212.210.104

[sshd]
enabled = true

Certains paramètres de la section [DEFAULT] ont été modifiés, en commençant par la durée de bannissement (bantime) qui est seulement de 10 minutes par défaut, elle est ici augmentée à 1 heure. C’est à dire que lorsqu’une IP se fait bannir, celle-ci ne pourra plus tenter de se connecter durant 1 heure.

Les deux paramètres suivant vont de pair. Il s’agit du nombre de fois (maxretry) qu’un utilisateur peut réessayer de se connecter pendant une durée définie (findtime) avant d’être banni pour la durée bantime. Par défaut, un utilisateur peut réessayer 5 fois, il est réduit à 3.

ignoreip permet d’ajouter des adresses IP qui seront exclues des jails. Si vous vous connectez souvent depuis un même poste en IP fixe, il est intéressant de pouvoir s’exclure.

Ensuite on peut ajouter des sections pour les jails, ici uniquement [sshd] que l’on active avec enabled = true.

On peut redémarrer fail2ban :

sudo systemctl restart fail2ban

Et voir son état avec la commande fail2ban-client qui retourne des informations sur :

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

Pour avoir des informations sur le jail sshd, ajouter son nom comme ceci :

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 163
| `- File list: /var/log/secure
`- Actions
 |- Currently banned: 1
 |- Total banned: 38
 `- Banned IP list: 78.13.139.14

Je vois ici qu’une IP (78.13.139.14) est bloquée en ce moment, qu’il y en a eu 38 en tout et que 163 échecs de connexion ont eu lieu.

Sinon le fichier de log de fail2ban se trouve logiquement sous /var/log/fail2ban.log.

La petite astuce de fin d’article pour rapidement dé-bannir une IP (cela peut arriver lors de tests) :

fail2ban-client set NOM_DU_JAIL unbanip ADRESSE_IP

Ceci est une petit introduction à fail2ban centrée sur le SSH, mais celui-ci permet de faire beaucoup plus, n’hésitez pas à lire la documentation officielle et les nombreux tutoriels disponibles en ligne.

Save

Save

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *