Sécuriser votre instance Wallabag avec Fail2ban
Par Joël le dans Administration de serveurs. Marqué comme astuces, hack, sécurité, sysadmin, tutoriel avec 6 Commentaires
Salut les g33ks,
Dans la poursuite de ma quête de dégooglisation (mot magique signifiant « reprendre le contrôle sur ses données privées »), j’ai dernièrement pris la décision de migrer mon compte Pocket (qui a d’ailleurs été récemment intégré dans Firefox) vers une instance Wallabag que j’héberge moi même.
Après avoir paramétré ma nouvelle instance Wallabag sur mon serveur (installation, configuration, import de mes données « toussa toussa »), je suis donc passé en mode parano !
Car c’est bien joli tout ça, mais s’héberger ne doit pas signifier « perdre en sécurité » concernant ses données privées.
Ce billet n’abordera en aucun cas l’installation et la configuration de Wallabag, si vous êtes intéressé par ce service, visitez le site officiel : Wallabag.org
L’objectif ici est donc de partager avec vous une petite bidouille rapide à mettre en place sur votre serveur afin de protéger, grâce à Fail2ban, la page d’authentification à ce service.
Pré-requis :
Avoir une instance Fail2ban fonctionnelle sur la machine hébergeant Wallabag.
Si vous ne savez pas ce qu’est Fail2ban, je peux vous conseiller un peu de lecture :
Mise en place du filtre Wallabag :
Pour information, voici à quoi ressemble les logs Apache concernant Wallabag lorsque l’on essaie de s’authentifier avec un utilisateur n’existant pas en base de données et/ou un mauvais mot de passe :
**** Log apache pour le vhost wallabag **** [Sun Jun 28 20:30:25 2015] [error] [client 1XX.144.XX.41] user Leonard authentication failure, referer: https://mon-uri-wallabag.fr/ [Sun Jun 28 20:30:31 2015] [error] [client 1XX.144.XX.41] user Sheldon authentication failure, referer: https://mon-uri-wallabag.fr/ [Sun Jun 28 20:30:42 2015] [error] [client 1XX.144.XX.41] user Penny authentication failure, referer: https://mon-uri-wallabag.fr/
En connaissant le format de nos logs, on peut alors créer le filtre Fail2ban permettant l’analyse des logs Wallabag. Pour cela, il vous faudra réaliser les manipulations suivantes :
* Créer le fichier de filtre :
vim /etc/fail2ban/filter.d/apache-wallabag.conf
* Et y ajouter les lignes suivantes :
# Définition d'un filtre permettant de surveiller les tentatives d'authentification à Wallabag [Definition] failregex = .*\[error\] \[client <HOST>\] user.*authentication failure, referer.* ignoreregex =
Activation du filtre Wallabag :
L’activation de ce nouveau filtre se fait ensuite de la manière suivante :
* Éditer le fichier de configuration des jails Fail2ban :
vim /etc/fail2ban/jail.conf
* Et y ajouter les lignes suivantes :
# Wallabag filter [apache-wallabag] enabled = true port = http,https filter = apache-wallabag logpath = /var/log/apache2/mon-super-log-wallabag.fr-error.log maxretry = 3
Redémarrage du service Fail2ban :
Pour appliquer votre nouvelle configuration, il faut ensuite redémarrer le service :
service fail2ban stop service fail2ban status service fail2ban start
Vérification de la configuration :
Histoire de confirmer que nos modifications soient fonctionnelles, il ne vous reste plus qu’à essayer de vous authentifier à votre instance Wallabag avec des noms d’utilisateur inexistants en base ou avec un mot de passe erroné … Profitez-en pour jeter un coup d’oeil à vos logs !
* Consulter les logs de Fail2ban :
tail -f -n 20 /var/log/fail2ban.log
* Vous devriez y retrouver des lignes ressemblant à celles-ci :
2015-07-09 20:30:43,949 fail2ban.actions: WARNING [apache-wallabag] Ban 172.XXX.79.XX 2015-07-09 20:31:21,258 fail2ban.actions: WARNING [apache-wallabag] Ban 172.XXX.79.XX 2015-07-09 20:31:57,182 fail2ban.actions: WARNING [apache-wallabag] Ban 172.XXX.79.XX 2015-07-09 20:31:33,298 fail2ban.actions: WARNING [apache-wallabag] Ban 172.XXX.79.XX
* Vérifier la création dynamique de la règle IPtables :
Il peut être intéressant de contrôler les actions réalisées par IPtables. Si vous souhaitez vérifier si votre adresse IP (ou celle d’un méchant pirate) a bien été traitée par IPtables, vous pouvez utiliser la ligne de commande suivante :
iptables -nL --line-numbers | grep -A3 -e "^Chain fail2ban-apache-wallabag"
Résultats renvoyés :
Chain fail2ban-apache-wallabag (1 references) target prot opt source destination DROP all -- 172.XXX.79.XX 0.0.0.0/0 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Petit rappel pour la forme :
Après avoir titillé un peu son serveur pour tenter de se faire /kicker et de vérifier la prise en compte de la nouvelle configuration de Fail2ban, il peut être utile de demander à IPtables d’oublier notre adresse IP.
Pour rappel, si vous n’aviez pas gardé une session SSH ouverte, vous êtes sensés ne plus pouvoir accéder à votre machine distante ^^
* Supprimer son adresse IP des règles IPtables :
Si vous n’avez pas changé le nom du filtre Wallabag dans les différents fichiers que nous avons édités plus tôt, cette ligne de commande devrait fonctionner :
iptables -D fail2ban-apache-wallabag 1
Avec les paramètres suivants :
-D
permet de supprimer une ou plusieurs règles dans une chaine donnée (ici fail2ban-apache-wallabag)1
est le numéro de la règle à supprimer
Numéro de ligne indiqué grâce au paramètre--line-numbers
présent dans la commande précédente
Bonus avant la fin de cet article passionnant :
Je me suis rendu compte d’une chose lors de mes différents tests avec Fail2ban. Si le « petit nom » d’une règle fail2ban est trop long alors l’erreur suivante apparait dans vos logs :
2015-06-28 20:01:49,407 fail2ban.jail : INFO Jail 'apache-wp-login' started 2015-06-28 20:01:49,426 fail2ban.jail : INFO Jail 'apache-rss-login' started 2015-06-28 20:01:49,440 fail2ban.jail : INFO Jail 'apache-piwik-login' started 2015-06-28 20:01:49,455 fail2ban.jail : INFO Jail 'apache-mail-login' started 2015-06-28 20:01:49,513 fail2ban.actions.action: ERROR iptables -N fail2ban-apache-wallabag-login iptables -A fail2ban-apache-wallabag-login -j RETURN iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-wallabag-login returned 200
J’ai mis un petit moment avant de comprendre pourquoi mon nouveau filtre dédié à Wallabag ne s’activait pas, alors je partage cette petite information avec vous :)
* Solution à mettre en place :
Renommer le filtre créé plus tôt dans le répertoire de configuration des filtres /etc/fail2ban/filter.d/.
Éditer le fichier /etc/fail2ban/jails.conf pour y modifier l’appel au filtre (nom + appel du filtre).
Redémarrer le service Fail2ban pour appliquer à nouveau les modifications de la configuration.
Profitez-en pour analyser vos logs :
tail -f /var/log/fail2ban.log
Cela sera tout pour aujourd’hui, j’espère que cet article vous sera utile !
Source utilisée pour la rédaction de l’article :
– Aucune, n’ayant pas trouvé ce type de jail Fail2ban sur la Toile, j’ai tenté de la créer ^^
Sources des images utilisées en illustrations :
– Illustration principale du billet : l’image a été générée grâce au Générateur de Geektionnerd chez Framalab. Je l’ai ensuite modifiée via Gimp en changeant la couleur du background qui était initialement blanche (d’ailleurs, le thème du blog me remercie :D).
Fail2ban est en effet un incontournable de la sécurité !
Moi je l’utilise sous Debian (serveur Web standard).
Sympa le tuto en tout cas ;)
Ca ne fonctionne pas. Suffit de tester :
root@blabla:~# fail2ban-regex « [Sun Jun 28 20:30:25 2015] [error] [client 1XX.144.XX.41] user Leonard authentication failure, referer: https://mon-uri-wallabag.fr/ » « .*\[error\] \[client \] user.*authentication failure, referer.* »
Running tests
=============
Use failregex line : .*\[error\] \[client \] user.*authentication…
Use single line : [Sun Jun 28 20:30:25 2015] [error] [client 1XX.144…
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] WEEKDAY MONTH Day Hour:Minute:Second Year
`-
Lines: 1 lines, 0 ignored, 0 matched, 1 missed
|- Missed line(s):
| [Sun Jun 28 20:30:25 2015] [error] [client 1XX.144.XX.41] user Leonard authentication failure, referer: https://mon-uri-wallabag.fr/
`-
Hello,
Suite à ton commentaire, je me suis connecté au serveur hébergeant mon instance Wallabag et j’ai fait un test avec la commande suivante :
Je peux t’assurer que cela fonctionne :
Je pense que le problème vient de ta ligne de tests non ? Essaies de lui passer directement ton fichier de logs Apache plutôt qu’un bout de logs via la ligne de commande.
Si cela ne fonctionne toujours pas, il faut voir sur quelle version de Wallabag tu tournes et contrôler la configuration de ton Apache ou de ton vhost pour voir si tu ne reformates pas les logs générés par ton serveur.
Je décris un peu le fonctionnement de la commande « fail2ban-regex » dans ce billet si cela t’intéresse : Installer Fail2ban sur un serveur Debian
Bon courage pour le débogage :)
Merci pour la réponse. Je ne sais pas si le problème vient de la ligne de tests mais j’ai tout simplement repris tes éléments donc si ça ne marche pas c’est qu’il y a un problème dans ton article. Je n’ai pas encore Wallabag ou Apache, je cherche justement à tester cela avant (je mets les éléments directement dans la commande de test au lieu d’appeler les fichiers).
Mais en fait est-il possible que fail2ban soit buggué sur mon serveur ? Parce qu’un simple :
fail2ban-regex « 88.120.84.98 403″ » 403″
Ne me renvoie pas de match…
J’ai la version 0.8.13, il faudrait que je teste avec la dernière.
Re,
Pourrais-tu essayer de mettre les extraits de code que tu postes entre balises « pre » stp, car le design du blog interprète les guillemets et autres apostrophes et génère un affichage non cohérent et difficile à comprendre.
Si la dernière ligne de test que tu as posté est bien la suivante :
En effet, cela ne fonctionne pas, voilà ce que cela donne chez moi :
Fail2ban cherche par défaut des informations présentes dans la chaine de caractères que tu lui donnes pour qu’il puisse générer la requête qu’il donnera à exécuter au programme « iptables ».
Si par exemple, tu donnes à manger à fail2ban-regex quelque chose qui ressemble plus à une ligne de code bien formatée, voilà ce qu’il répond :
Cette commande renvoie un « Addresses found : [1] ».
Construire des expressions régulières, ce n’est à la base pas quelque chose de facile, mais si en plus on y ajoute la surcouche Fail2ban …
Il y a pas mal de documentations sur la Toile, voici par exemple un ensemble de tests que tu peux jouer sur ta machine :
Je les ai trouvé ici : http://www.fail2ban.org/wiki/index.php/MANUAL_0_8
Il y a pas mal de choses à lire pour en comprendre le fonctionnement alors bon courage :)
Dans tous les cas, je te confirme que mon billet ne contient aucune erreur et que la regexp que je détaille est en prod chez moi depuis trèèèèès longtemps :)
@+
Pingback : Wallabag v2 = mise à jour du filtre Fail2ban | Sublimigeek | Geek, Astuces, High Tech et découvertes du Net