Protéger vos services auto-hébergés avec Fail2ban

Par le dans . Marqué comme , , , , , avec 2 Commentaires

Protéger vos services auto-hébergés avec Fail2ban

Salut la compagnie,

Cela faisait un bail que je n’avais pas publié sur Sublimigeek mais l’IRL, ces derniers temps, ne me permet que très peu de « temps libre » ^^

Pour ceux qui me suivent sur Twitter, vous aurez également remarqué que je ne gazouille plus beaucoup en ce moment. Ce n’est qu’une question de temps, promis, je reviens le plus rapidement possible ;)

Enfin, osef du 3615 MyLife, à la base, je suis venu vous parler de Fail2ban, petit paquet GNU/Linux dont j’avais déjà parlé sur le blog avec les articles suivants :

Je vais donc continuer sur ma lancée histoire de partager avec vous les 2 ou 3 jails que j’ai ajouté à ma configuration. Si vous aussi, vous auto-hébergez vos services RSS, Cloud ou autres, je pense que cela vous sera bien utile !!

Petit rappel pour les g33ks à la mémoire courte :

Fail2ban est un logiciel capable d’analyser en temps réel les logs de votre serveur web. Cela lui permet alors d’en extraire, via des règles pré-définies ou à définir, les adresses IP des méchants pirates qui essaient de faire du mal à votre serveur bien aimé, avec par exemple, un brute force sur la page d’authentification de votre blog (je dis ça totalement au hasard hein ^^). Une fois ces adresses IP extraites, Fail2ban met à jour la configuration d’IPtables de votre serveur afin de leur en interdire l’accès temporairement ou définitivement en fonction de votre configuration.

Petit exemple sur une de mes machines :

Sondes Munin listant les IP bloqués par Fail2ban

Sondes Munin listant les IP bloquées par Fail2ban

Au moins, je suis sûr que ça fonctionne hein ^_^

Bon on passe aux choses sérieuses ?!

Allez c’est parti, je me suis creusé un peu la tête pour voir si il n’était pas possible d’adapter un filtre déjà existant aux différents logs des services auto-hébergés que j’utilise au quotidien et voilà ce que cela donne.

Protéger la page d’authentification de son agrégateur RSS :

business_cat_meme_generator_why_banned

Depuis la fermeture de Google Reader, j’ai décidé d’héberger moi même mon agrégateur de Flux et pour cela j’ai porté mon choix sur un projet français que j’apprécie beaucoup, Leed que vous trouverez ici : Projet Leed RSS

Comme tout bon service, celui-ci propose une page d’authentification que certains curieux tentent de brute forcer (c’est une méthode utilisée en cryptanalyse pour trouver un mot de passe ou une clef. Il s’agit de tester, une à une, toutes les combinaisons possibles, merci Wikpédia)

Pour mettre cette règle en place, rien de plus simple, il faut réaliser ces 2 manipulations :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification de LeedRss
#
[apache-rss-login]
enabled = true
port    = http,https
filter  = apache-rss-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-rss-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à LeedRSS
#
[Definition]
failregex = ^<HOST> -.*POST /action.php\?action=login HTTP.*
ignoreregex =

Protéger la page d’authentification de son nuage informatique personnel (aKa. OwnCloud) :

i_want_you_banned

Depuis plusieurs mois, j’ai pour objectif de quitter tout doucement mais sûrement l’ensemble des services de Google. Et pour commencer, j’ai décidé de quitter Google Drive pour me monter mon propre cloud grâce au projet OwnCloud.

Une fois de plus, des petits malins viennent tester la configuration du serveur, j’ai donc mis en place une règle Fail2ban pour éviter cela.
Là encore, rien de bien compliqué, il suffit de suivre les manipulations décrites ci-dessous :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification d'OwnCloud
#
[apache-owncloud-login]
enabled = true
port    = http,https
filter  = apache-owncloud-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-owncloud-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à OwnCloud
#
[Definition]
failregex = ^<HOST> -.*POST / HTTP/1.1" 200
ignoreregex =

Protéger la page d’authentification de son serveur de streaming personnel (aKa Subsonic) :

banned

Toujours dans l’optique de quitter les services de Google et de me séparer cette fois-ci des services de Google Music, j’ai écrit il y a un petit moment sur le blog un tutoriel vous expliquant comment s’installer sans prise de tête un serveur de streaming audio/vidéo grâce au projet Subsonic.

Toujours pour des questions de sécurité, j’ai préféré limiter les accès à mon installation. Même joueur joue encore :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification de Subsonic
#
[apache-subsonic-login]
enabled = true
port    = http,https
filter  = apache-subsonic-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-subsonic-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à Subsonic
#
[Definition]
failregex = ^<HOST> -.*GET /login.view\?error HTTP/1.1" 200
ignoreregex =

Protéger la page d’authentification de son client Webmail personnel (aKa RainLoop) :

3D-printed-ban-hammer

Comme je l’ai dit plusieurs fois, j’ai continué à me séparer des produits Google petit à petit, donc après Google Drive, Google Music, je me suis attaqué à un gros poisson … Gmail ! (que je n’ai d’ailleurs pas encore totalement abandonné malgré moi !). Enfin, je vous passe les détails, mais je me suis installé et configuré un serveur de mails que j’utilise en mode IMAP over SSL/TLS via un client lourd (Thunderbird pour ne pas le nommer). Mais j’ai également eu besoin d’accéder à mes courriels via une interface Web. Je vous conseille pour cela le bien connu RoundCube (que l’on ne présente plus) mais personnellement, je suis parti sur le projet RainLoop que je n’ai découvert que récemment et qui propose une interface fluide et aérée !

Pour les plus curieux d’entre vous, voici le lien permettant d’accéder à une démonstration en ligne : http://demo.rainloop.net/

Même joueur joue encore … Nouvelle règle pour notre Webmail :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification de RainLoop
#
[apache-mail-login]
enabled = true
port    = http,https
filter  = apache-mail-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-mail-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à RainLoop
#
[Definition]
failregex = ^<HOST> -.*POST /index.php\?/Ajax/0/ HTTP/1.1" 200 
ignoreregex =

Protéger la page d’authentification à sa plate-forme Analytics (aKa Piwik) :

ban_him

Nouveau service Google abandonné, j’ai nommé, Google Analytics que j’ai remplacé par le projet Piwik. Il reste encore l’appel au script de Google Analytics sur le blog, mais c’est juste le temps de faire quelques tests et comparaisons, sur les statistiques générées par les différentes plate-formes.

Encore une fois, histoire de sortir couvert, on met en place sa petite règle Fail2ban :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification de Piwik Analytics
#
[apache-piwik-login]

enabled = true
port    = http,https
filter  = apache-piwik-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-piwik-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à Piwik
#
[Definition]
failregex = ^<HOST> -.*POST /index.php\?module=CoreHome&action= HTTP/1.1" 200 
ignoreregex =

Protéger la page d’authentification à sa plate-forme de blogging (aKa WordPress) :

ban_hammer

Je conclurai cet article avec une dernière Jail Fail2ban bien plus connue cette fois-ci. Celle qui protège la page d’authentification à l’interface d’administration de WordPress. Je ne peux à proprement parlé d’abandon d’un service de Google, mais je n’utilise pas Blogger et c’est toujours ça de pris !

Encore une fois, on reprend les mêmes manipulations que l’on adapte un peu au service que l’on souhaite protéger :

Éditer le fichier jail.conf pour y ajouter les lignes suivantes :

vim /etc/fail2ban/jail.conf
#
# Empêcher le brute force sur la page d'authentification de WordPress
# Page du CMS concernée : wp-login.php
#
[apache-wp-login]

enabled = true
port    = http,https
filter  = apache-wp-login
logpath = /var/log/apache2/chemin_vers_vos_logs_apache.log
maxretry = 3

Créer le fichier du nouveau filtre et y ajouter les lignes suivantes :

vim /etc/fail2ban/filter.d/apache-wp-login.conf
#
# Filtre permettant de surveiller les tentatives d'authentification à WordPress
#
[Definition]
failregex = ^<HOST> -.*POST /wp-login.php HTTP.*
ignoreregex =

En conclusion :

Il est tout à fait possible de protéger l’ensemble de ses services auto-hébergés avec Fail2ban. Il suffit d’analyser un peu les logs générés par chaque service, de comprendre un minimum les expressions rationnelles et de se lancer dans l’écriture de ses propres jails :)

J’espère que cet article vous aura aidé dans la sécurisation de vos serveurs. N’hésitez pas à laisser un commentaire si vous connaissez d’autres règles à ajouter à la configuration de Fail2ban, je mettrai à jour le billet afin de les partager avec les Sublimigikien(ne)s passant par ici !

A bientôt pour de nouvelles aventures !

Source utilisée pour la rédaction de l’article :
– Aucune, seulement les logs de mon serveur et mes petits doigts pour générer les regexp nécessaires aux filtres des requêtes !

Sources des images utilisées en illustrations :
– Source de l’image « Ban hammer  » : knowyourmeme.com
– Source de l’image « I want you banned » : knowyourmeme.com
– Source de l’image « Cat ban » : diylol.com
– Source de l’image « Ban hammer » from Wikipedia : http://en.wikipedia.org/wiki/Banhammer

2 Commentaires


N'hésitez pas, laissez un commentaire — DoFollow activé sur ce site —


« »