Fail2ban vous prévient par SMS avec l’API de Free Mobile

Fail2ban est un outil très pratique pour protéger les serveurs de certaines attaques.

Et en plus, il peut vous prévenir par SMS, si vous avez une carte SIM de Free Mobile

fail2ban

Configuration des filters

Je pensais que la configuration par défaut des filters sous Debian fonctionnait à coup sûr : j’avais tort.

Je vous conseille de tester chaque filter (avec fail2ban-regex, ou en simulant une vraie attaque). J’ai dû plusieurs fois modifier les expressions régulières pour qu’elles correspondent aux logs effectivement générées par mon serveur Apache :

par :

  • pour le filtre apache-badbots, j’ai remplacé la regex :

par :

Mais, une fois bien configuré, c’est très efficace. Dès qu’une ligne dans un fichier de log correspond à une regex d’un filter, fail2ban prend les mesures nécessaires : en général blocage de l’IP via iptables, et envoi d’un email pour prévenir les administrateurs.

FreeMobile

Utilisation de l’API de SMS de Free Mobile

Depuis juin 2014, Free Mobile met à disposition de ses clients une API qui permet d’envoyer gratuitement des SMS sur votre téléphone via un appel d’URL.

Ca n’est pas très compliqué de s’en servir avec fail2ban : il suffit de se créer un nouveau fichier de configuration dans le répertoire action.d, et de le référencer dans jail.conf

Voici le fichier d’action sendSMSFreeMobile.conf que je me suis créé :

(il faut bien sûr renseigner dedans votre user et votre mot de passe)

Et dans jail.conf je l’ai configuré comme action par défaut, en plus du blocage et de l’envoi d’email :

Et ça marche !

Par contre, il y a quelques pièges à évite r :

    • Dans le fichier sendSMSFreeMobile.conf, attention à ne pas mettre le caractère % dans la ligne de commande wget, parce que fail2ban les interprète mal et refuse de démarrer. Je suis tombé sur ce cas au départ, parce que j’avais encodé les espaces en %20.
    • Debian et Ubuntu semblent ne pas connaître le certificat racine de l’URL de l’API. J’ai donc dû bypasser le contrôle du certificat avec l’option –no-check-certificate . Je sais : c’est mal. Mais le risque me paraissant faible, je n’ai pas pris la peine d’installer le certificat racine qui pose problème. Pour le faire, les explications sont là : http://thenubbyadmin.com/2014/01/29/solving-wget-error-cannot-verify-site-certificate-unable-to-locally-verify-the-issuers-authority/
    • EDIT du 27/08/2014 : suite aux suggestions de Leryan, j’ai amélioré les choses pour éviter de bypasser le contrôle du certificat. J’ai plutôt demandé à wget d’accepter le certificat de RapidSSL (voir les commentaires ci-dessous). Ce certificat peut être téléchargé ici : https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt et doit être placé dans le répertoire indiqué dans le fichier sendSMSFreeMobile.conf
    • Le user/password est ici en dur dans le fichier de configuration. Il peut être judicieux d’ajuster les droits d’accès à ce fichier pour que n’importe qui ne puisse pas le lire
    • Je n’ai pas pris la peine de tester le code HTTP retour : si ça ne marche pas tant pis. Donc attention à ne pas vous baser uniquement sur l’envoi de SMS. C’est juste un « nice-to-have » qui ne remplace pas l’envoi d’email. En particulier, l’envoi de SMS peut être bloqué par Free Mobile (code HTTP 402) si les envois sont trop fréquents

5 réflexions au sujet de « Fail2ban vous prévient par SMS avec l’API de Free Mobile »

  1. Et pourtant, installer un certificat n’est pas bien compliqué :

    En ayant installé ca-certificates, on met notre certificat (de préférence au format PEM je crois) dans /usr/local/share/ca-certificates, puis on lance un update-ca-certificates et zou, c’est fini ;)

    En gros :

    $ openssl s_client -showcerts -connect smsapi.free-mobile.fr:443 /usr/local/share/ca-certificates/smsapi.free-mobile.fr.crt
    $ update-ca-certificates

    Et hoplà, plus d’excuse pour ne pas le faire !

    1. Je reformule :

  2. Merci Leryan pour ce retour constructif :-)
    C’est vrai que j’ai été un peu fainéant sur ce coup-là.
    Cela dit, je m’interroge sur la meilleure manière de régler ce problème :

    • Forcer à accepter le certificat de smsapi.free-mobile.fr règle facilement le souci, et ne pose pas de problème de sécurité. Par contre, il faudra le mettre à jour à chaque fois qu’il sera renouvelé par Free Mobile. Et il y a un risque non négligeable que je n’y pense pas ;-). Le certificat actuel n’est valable que jusqu’en 2016
    • Installer le certificat manquant de la chaîne (celui de RapidSSL apparemment) dans le magasin ca-certificates de Debian. Je ne suis pas chaud pour cette solution tant que je ne connais pas la raison pour laquelle il n’est pas installé par défaut sur Debian Wheezy (et sur Ubuntu 14.04). Si jamais il y a une « bonne » raison, je risquerais d’accepter (à tort) des certificats générés par RapidSSL (dans n’importe quelle autre appli de l’OS). Mais c’est étrange puisque RapidSSL est accepté par Firefox
    • Indiquer à la ligne de commande wget d’accepter le certificat RapidSSL, uniquement pour cette requête

    J’ai choisi la dernière solution : le certificat de RapidSSL est valable jusqu’en 2020, et on peut demander à wget de l’accepter avec le paramètre –ca-certificate :

    Source : http://thenubbyadmin.com/2014/01/29/solving-wget-error-cannot-verify-site-certificate-unable-to-locally-verify-the-issuers-authority/

    Le certificat en question pouvant être téléchargé ici : https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt

    Je vais mettre à jour l’article pour cela.

    NB : il doit y avoir une petite coquille dans votre ligne de commande openssl car elle ne semble pas fonctionner en l’état : il manque peut-être quelque chose avant le « /usr/local/share/ca-certificates/smsapi.free-mobile.fr.crt »?

  3. J’allais me préparer à coder mais après une petite recherche google j’ai remarqué que tu l’avais fait proprement, merci beaucoup Mossroy :)

Laisser un commentaire

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