Installation et configuration de Fail2ban pour Asterisk 1.8 sur Ubuntu

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
ignoreip = 127.0.0.1/8 192.168.0.1/24
bantime = -1
maxretry = 3
findtime = 60000

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@asterisk]
logpath = /var/log/asterisk/messages
maxretry = 3
bantime = 259200

Jail Options
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

logrotate

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

fail2baniptables

# 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