La sécurité, pour les administrateurs système, est une lutte permanente car vous devez suffisamment sécuriser vos systèmes pour les protéger contre les attaques indésirables, mais pas au point d'entraver la productivité des utilisateurs. C'est un équilibre difficile à maintenir. Il y a toujours des plaintes de "trop" de sécurité, mais lorsqu'un système est compromis, les plaintes vont de "Il n'y avait pas assez de sécurité" à "Pourquoi n'avez-vous pas utilisé de meilleurs contrôles de sécurité ?" Le combat est réel. Il existe des contrôles que vous pouvez mettre en place qui sont à la fois efficaces contre les attaques d'intrus et suffisamment furtifs pour permettre aux utilisateurs d'opérer de manière généralement sans entraves. Fail2ban est la réponse pour protéger les services contre la force brute et autres attaques automatisées.
Remarque :Fail2ban ne peut être utilisé que pour protéger les services qui nécessitent une authentification par nom d'utilisateur/mot de passe. Par exemple, vous ne pouvez pas protéger le ping avec fail2ban.
Dans cet article, je montre comment protéger le démon SSH (SSHD) d'une attaque par force brute. Vous pouvez configurer des filtres, comme fail2ban
les appelle, pour protéger presque tous les services d'écoute de votre système.
Installation et configuration initiale
Heureusement, il existe un package prêt à installer pour fail2ban
qui inclut toutes les dépendances, le cas échéant, de votre système.
$ sudo dnf -y install fail2ban
Activer et démarrer fail2ban
.
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
Sauf si vous avez une sorte de problème de syntaxe dans votre fail2ban
configuration, vous ne verrez aucun message de sortie standard.
Maintenant, pour configurer quelques éléments de base dans fail2ban
pour protéger le système sans qu'il interfère avec lui-même. Copiez le /etc/fail2ban/jail.conf
fichier dans /etc/fail2ban/jail.local
. Le jail.local
file est le fichier de configuration qui nous intéresse.
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ouvrez /etc/fail2van/jail.local
dans votre éditeur préféré et effectuez les modifications suivantes ou vérifiez que ces quelques paramètres sont définis. Recherchez le paramètre ignoreip
et ajoutez toutes les adresses IP à cette ligne qui doivent avoir accès sans possibilité de verrouillage. Par défaut, vous devez ajouter l'adresse de bouclage et toutes les adresses IP locales au système protégé.
ignoreip = 127.0.0.1/8 192.168.1.10 192.168.1.20
Vous pouvez également ajouter des réseaux entiers d'adresses IP, mais cela enlève une grande partie de la protection que vous souhaitez engager fail2ban
pour. Restez simple et local pour le moment. Enregistrez le jail.local
fichier et redémarrez le fail2ban
services.
$ sudo systemctl restart fail2ban
Vous devez redémarrer fail2ban
chaque fois que vous modifiez la configuration.
Configuration d'un service filtré
Une nouvelle installation de fail2ban
ne fait pas grand-chose pour vous. Vous devez configurer des soi-disant filtres pour tout service que vous souhaitez protéger. Presque tous les systèmes Linux doivent être accessibles par SSH. Dans certaines circonstances, vous arrêteriez et désactiveriez certainement SSHD pour mieux sécuriser votre système, mais je suppose que chaque système Linux autorise les connexions SSH.
Les mots de passe, comme chacun le sait, ne sont pas une bonne solution de sécurité. Cependant, c'est souvent la norme selon laquelle nous vivons. Ainsi, si l'accès utilisateur ou administratif est limité à SSH, vous devez prendre des mesures pour le protéger. Utilisation de fail2ban
"surveiller" SSHD pour les tentatives d'accès infructueuses avec interdiction ultérieure est un bon début.
Remarque :avant de mettre en œuvre tout contrôle de sécurité susceptible d'entraver l'accès d'un utilisateur à un système, informez les utilisateurs que ce nouveau contrôle peut les verrouiller hors d'un système pendant dix minutes (ou la durée que vous décidez) si leurs tentatives de connexion infructueuses dépassent votre paramètre de seuil .
Pour mettre en place des services filtrés, vous devez créer un fichier "jail" correspondant sous le /etc/fail2ban/jail.d
annuaire. Pour SSHD, créez un nouveau fichier nommé sshd.local
et saisissez-y les instructions de filtrage des services.
[sshd]
enabled = true
port = ssh
action = iptables-multiport
logpath = /var/log/secure
maxretry = 3
bantime = 600
Créez le [sshd] rubrique et entrez le réglage que vous voyez ci-dessus comme point de départ. La plupart des paramètres sont explicites. Pour les deux qui pourraient ne pas être intuitivement évidents, le paramètre "action" décrit l'action que vous souhaitez fail2ban
à prendre en cas d'infraction. Pour nous, fail2ban
utilise iptables
de bannir l'adresse IP du système incriminé pendant un "bantime" de 600 secondes (10 minutes).
Vous pouvez, bien sûr, modifier n'importe lequel de ces paramètres pour répondre à vos besoins. Dix minutes semblent être suffisamment longues pour qu'un bot ou un script "passe" vers des hôtes moins sécurisés. Cependant, dix minutes ne suffisent pas à aliéner les utilisateurs qui tapent leur mot de passe plus de trois fois.
Une fois que vous êtes satisfait des paramètres, redémarrez le fail2ban
services.
À quoi ressemble le bannissement
Sur le système protégé (192.168.1.83), tail
le /var/log/fail2ban.log
pour voir toutes les actions d'interdiction en cours.
2020-05-15 09:12:06,722 fail2ban.filter [25417]: INFO [sshd] Found 192.168.1.69 - 2020-05-15 09:12:06
2020-05-15 09:12:07,018 fail2ban.filter [25417]: INFO [sshd] Found 192.168.1.69 - 2020-05-15 09:12:07
2020-05-15 09:12:07,286 fail2ban.actions [25417]: NOTICE [sshd] Ban 192.168.1.69
2020-05-15 09:22:08,931 fail2ban.actions [25417]: NOTICE [sshd] Unban 192.168.1.69
Vous pouvez voir que l'adresse IP 192.168.1.69 a été interdite à 09h12 et réactivée dix minutes plus tard à 09h22.
Sur le système distant, 192.168.1.69, une action d'interdiction ressemble à ceci :
$ ssh 192.168.1.83
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
$ ssh 192.168.1.83
ssh: connect to host 192.168.1.83 port 22: Connection refused
Vous pouvez voir que j'ai entré mon mot de passe incorrect trois fois avant d'être banni. L'utilisateur banni, à moins d'en être explicitement informé, ne saura pas pourquoi il ne peut plus atteindre le système cible. Le fail2ban
filtre effectue une action d'interdiction silencieuse. Il ne donne aucune explication à l'utilisateur distant, et l'utilisateur n'est pas non plus averti lorsque l'interdiction est levée.
Débannir un système
Il arrivera inévitablement qu'un système soit banni et qu'il faille rapidement le débannir. En d'autres termes, vous ne pouvez pas ou ne voulez pas attendre l'expiration de la période d'interdiction. La commande suivante débannira immédiatement un système.
$ sudo fail2ban-client set sshd unbanip 192.168.1.69
Vous n'avez pas besoin de redémarrer le démon fail2ban après avoir lancé cette commande.
Récapitulez
C'est en gros comment fail2ban
œuvres. Vous configurez un filtre et lorsque les conditions sont remplies, le système distant est banni. Vous pouvez interdire pendant de plus longues périodes et vous pouvez configurer plusieurs filtres pour protéger votre système. N'oubliez pas que fail2ban
est une solution unique et ne protège pas votre système contre d'autres vulnérabilités. Une approche en couches et à multiples facettes de la sécurité est la stratégie que vous souhaitez poursuivre. Aucune solution unique n'offre une sécurité suffisante.
Vous pouvez trouver des exemples d'autres filtres et quelques fail2ban
avancés implémentations décrites sur fail2ban.org.
[ Vous voulez en savoir plus sur la sécurité ? Consultez la liste de vérification de la sécurité informatique et de la conformité. ]