Sécuriser votre instance Wallabag avec Fail2ban

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

Sécuriser votre instance Wallabag avec Fail2ban

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 :

=> Liste des articles Fail2ban sur le blog : Tout Fail2ban sur Sublimigeek ! <=

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).

6 Commentaires


  1. 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 :

      fail2ban-regex /var/log/apache2/log-wallabag-error.log /etc/fail2ban/filter.d/apache-wallabag.conf

      Je peux t’assurer que cela fonctionne :

      Running tests
      =============
      
      Use regex file : /etc/fail2ban/filter.d/apache-wallabag.conf
      Use log file   : /var/log/apache2/log-wallabag-error.log
      
      Results
      =======
      
      Failregex
      |- Regular expressions:
      |  [1] .*\[error\] \[client \] user.*authentication failure, referer.*
      |
      `- Number of matches:
         [1] 1 match(es)
      
      Summary
      =======
      
      Addresses found:
      [1] 
          XXX.XXX.XXX.XXX (Sun Oct 25 19:24:24 2015)
      

      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 :

          fail2ban-regex "88.120.84.98 403" " 403"

          En effet, cela ne fonctionne pas, voilà ce que cela donne chez moi :

          Use regex line :  403
          Use single line: 88.120.84.98 403
          
          No 'host' group in ' 403'
          Cannot remove regular expression. Index 0 is not valid
          

          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 :

          fail2ban-regex "25-10-2015 20:00:00 192.168.1.1" "<HOST>$"

          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 :

          fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed'     '\[<HOST>\] authentication failed'

          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 :)

          @+

  2. Pingback : Wallabag v2 = mise à jour du filtre Fail2ban | Sublimigeek | Geek, Astuces, High Tech et découvertes du Net

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


« »