Fail 2 Ban est un outil propre aux systèmes Linux, permettant de se protéger contre les attaques de brute force ayant pour but de permettre à un attaquant de s’authentifier.
Il est possible de configurer Fail2Ban pour qu’il protège Asterisk.
1) Fonctionnement
Fail2Ban n’est donc pas un outil propre à Asterisk.
Il est utilisé pour se protéger contre les attaques de brute force d’authentification (SSH, Apache, FTP, etc…).
Dans le cas d’Asterisk, Fail2Ban va analyser les logs d’Asterisk, à la recherche de tentatives de connexions échouées.
Si Fail2Ban détecte plus d’un certain nombre de connexions échouées, il va bloquer l’IP source du client qui tente de se connecter.
Le blocage se fait à l’aide d’une règle IP table.
Il est bien entendu possible de paramétrer le nombre de connexion menant à un blocage.
De même qu’il est possible de paramétrer le temps de blocage, ou l’intervalle de temps de recherche de Fail2Ban.
Par exemple : bloquer un client pendant 1h après 5 tentatives d’authentifications manquées en 10 mins.
La configuration va se faire dans les deux fichiers suivants :
- /etc/fail2ban/filter.d/asterisk.conf
- /etc/fail2ban/jail.conf
De plus, le fichier de log d’Asterisk sera utilisé pour chercher les tentatives de connexion.
Le fichier asterisk.conf correspond au filtre de Fail2Ban pour Asterisk. Il permet de définir les logs qui correspondent à des erreurs de connexion.
Le fichier jail.conf permet de dire à Fail2Ban d’analyser le fichier de log d’Asterisk à l’aide des filtres définis dans asterisk.conf.
2) Configuration
Tout d’abord, il nous faut installer Fail2Ban.
Pour cela, entrer la commande suivante :
apt-get install fail2ban
Puis démarrer Fail2Ban.
/etc/init.d/fail2ban start
Afin de ne pas vous bloquer vous-même, vous pouvez mettre votre IP (ou une autre) en liste blanche.
Pour cela, éditer le fichier jail.conf, et ajouter votre IP dans ingnoreip.
Dans /etc/fail2ban/jail.conf
[DEFAULT] ignoreip = 127.0.0.1 192.168.1.200
Ensuite, il faut modifier le format de date des logs d’Asterisk.
Dans le fichier /etc/asterisk/logger.conf, décommentez la ligne :
;dateformat=%F %T
Ainsi, Asterisk utilisera le format suivant pour les logs :
yyyy-mm-dd HH:MM:SS
Puis redémarrer Asterisk.
asterisk -rvv logger reload
A présent, nous pouvons créer le filtre Fail2Ban pour Asterisk.
Le filtre est à créer dans le fichier /etc/fail2ban/filter.d/asterisk.conf.
[INCLUDES] [Definition] failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Wrong password NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No matching peer found NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No matching peer found NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Username/auth name mismatch NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Peer is not supposed to register NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - ACL error (permit/deny) NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>:.*' - No matching peer found NOTICE.* .*: Registration from '\".*\".*' failed for '<HOST>:.*' - Wrong password NOTICE.* <HOST> failed to authenticate as '.*'$ NOTICE.* .*: No registration for peer '.*' \(from <HOST>\) NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*) NOTICE.* .*: Failed to authenticate user .*@<HOST>.* NOTICE.* .*: <HOST> failed to authenticate as '.*' NOTICE.* .*: <HOST> tried to authenticate with nonexistent user '.*' VERBOSE.*SIP/<HOST>-.*Received incoming SIP connection from unknown peer ignoreregex =
Il faut maintenant créer la prison.
Celle-ci a pour but de faire le lien entre le filtre et le fichier de log. C’est aussi elle qui définit les paramètres de blocage.
Dans le fichier /etc/fail2ban/jail.conf, ajouter la section suivante :
[asterisk-iptables] enabled = true filter = asterisk action = iptables-allports[name=ASTERISK, protocol=all] logpath = /var/log/asterisk/messages maxretry = 5 bantime = 3600 findtime = 120
Cette prison définie un maximum de 5 tentatives manquées dans l’espace de 2 minutes. Au-delà, l’utilisateur est bloqué pour 1 heure.
Libre à vous de personnaliser ces paramètres.
Nous pouvons à présent relancer Fail2Ban puis faire un test.
/etc/init.d/fail2ban restart
Pour tester Fail2Ban sur Asterisk, entrer la commande suivante :
fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf
Cela va demander à Fail2Ban d’analyser le fichier de log, pour voir si le filtre détecte des erreurs de d’authentification.
Parmi les résultats, vous retrouverez la partie suivante, qui vous indiquera les erreurs d’authentification détectées :
Après une erreur d’authentification, vous pourrez voire le compteur augmenter.
Si les tests sont concluants, c’est que Fail2Ban est en mesure de protéger votre serveur Asterisk contre le Bruteforce.
Merci.
Je viens de mettre en place. Si cela marche comme annoncé, cela va me résoudre bien des problèmes de tentatives de piratage.