Si vous utilisez le serveur IPBX Asterisk il est nécessaire d’installer et configurer le « fail2ban ».
Fail2ban est utilisé avec Asterisk pour sécuriser les connexions, éviter les fraudes.
Le principe de fonction de fail2ban est simple, il scanne des logs et analyse une ou plusieurs expressions régulières pour un service, en limitant le nombre d’essais maximum pour chaque service.
Mais depuis la version 1.8 le format des logs a quelque peu changé. Le port de l’utilisateur distant a été ajouté et par conséquent les filtres Asterisk existant sont inopérants.
On va regarder comment on peut le faire avec Ubuntu 12.04 LTS et Asterisk 1.8
Ma version d’Asterisk est suivante :
1. On installe :
| # sudo apt-get install fail2ban |
2. Configuration :
| # cd /etc/fail2ban/filter.d |
On va créer le nouveau fichier asterisk.conf
# nano asterisk.conf
Le contenu est suivant :
| # Fail2Ban configuration file # $Revision: 250 $ [INCLUDES] # Read common prefixes. If any customizations available — read them from # common.local # before = common.conf [Definition] # daemon = asterisk # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named « host ». The tag « <HOST> » can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+) # Values: TEXT # 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>:.*’ – Username/auth name mismatch NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>:.*’ – Device does not match ACL 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.* .*: Sending fake auth rejection for device .* \(to <HOST>\) # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT ignoreregex = |
La ligne « NOTICE.* .*: Sending fake auth rejection for device .* \(to <HOST>\) » est nécessaire si vous utiliser l’option « alwaysauthreject=yes » dans votre fichier sip.conf. Celui-là permet de repérer correctement l’IP à bloquer.

Si votre ligne de notice ne contient l’IP de client qu’essais s’enregistrer comme ici :

Il faut faire comme est d’écrit dans cette article…
3. Maintenait il faut créer le nouveau règle dans le fichier jail.conf (la prison)
# sudo nano /etc/fail2ban/jail.conf
| [DEFAULT]
# « ignoreip » can be an IP address, a CIDR mask or a DNS host [asterisk-iptables] enabled = true |
| Name | Default | Description |
|---|---|---|
| filter | Name of the filter to be used by the jail to detect matches. Each single match by a filter increments the counter within the jail | |
| logpath | /var/log/asterisk/fail2ban | Path to the log file which is provided to the filter |
| maxretry | 3 | Number of matches (i.e. value of the counter) which triggers ban action on the IP. |
| findtime | 600 sec | The counter is set to zero if no match is found within « findtime » seconds. |
| bantime | 600 sec | Duration (in seconds) for IP to be banned for. Negative number for « permanent » ban. |
4. Dans le fichier /etc/asterisk/logger.conf on vérifie qu’on a la ligne suivante :
| messages => notice,warning,error |
Et il faut activer le « dateformat » dans la section générale :
| [general] dateformat=%F %T |
5. on reload le service de log :
| # asterisk -rx « logger reload « |
6. et on lance fail2ban :
| # /etc/init.d/fail2ban start ou # service fail2ban start |
Si vous utiliser Ubuntu il est nécessaire de redémarrer votre serveur
7. La vérification.
| # iptables -L -n |
Si vous avez la nouvelle chaine fail2ban-ASTERISK dans le tableau « iptables » tout va bien :


On peut regarder le statut de fail2ban :
| # fail2ban-client status asterisk-iptables |

Pour supprimer la règle d’iptables
| # iptables -D fail2ban-NAME -s xxx.xxx.xxx.xxx -j DROP |
Pour tester vos lignes « regex » dans le fichier /etc/fail2ban/filter.d/asterisk.conf :
# fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf
8. Maintenant il faut configurer le fichier de logrotate. La fonction de logrotate est de permettre la rotation des logs de manière automatique.
# nano /etc/logrotate.d/asterisk
on vérifie le chemin /var/log/asterisk/messages
Il faut préciser qu’après de redémarrage de service fail2ban, les IP’s déjà bloquées, seront sortir de la liste de « ban ».
La solution :
On va créer le « blacklist » des IP’s :
sudo touch /etc/fail2ban/ip.blacklist |
Dans le fichier /etc/fail2ban/action.d/iptables-allports.conf on va modifier les lignes suivantes :
| actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP grep -q ‘<ip>’ /etc/fail2ban/ip.blacklist; \ if [ $? -eq 1 ]; \ then echo ‘<ip>’ >> /etc/fail2ban/ip.blacklist; \ fi |
| actionstart = iptables -N fail2ban-<name> iptables -A fail2ban-<name> -j RETURN iptables -I <chain> -p <protocol> -j fail2ban-<name> cat /etc/fail2ban/ip.blacklist | while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j DROP; done |
# service fail2ban reload
Le résultat:
# iptables -L -n
# cat /etc/fail2ban/ip.blacklist
Si vous allez continuer d’utiliser le blacklist, il faut ajouter la ligne dans le fichier /etc/fail2ban/action.d/iptables-allports.conf :
| actionunban = actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP sed -i /<ip>/d /etc/fail2ban/ip.blacklist |
ça vous permettra de supprimer correctement l’IP de » blacklist » quand vous voulez le faire avec la commande :
# fail2ban-client get asterisk-iptables actionunban 9.9.9.9
ou
# sed -i /9.9.9.9/d /var/log/asterisk/messages
On peut télécharger le blacklist depuis le site et l’ajouter dans le votre:
# wget -O – http://tsrit.16mb.com/wp-content/uploads/2015/03/ip.blacklist.txt
# cp ip.blacklist.txt /etc/fail2ban/ip.blacklist


Laisser un commentaire