Installation of fail2ban for asterisk
Created on 110215 by Yannick Vaucher
Switzernet.com
3 Création d'un fichier de filtrage
5 Modifier les format de date d'asterisk
Nos serveurs se faisant constamment attaquer par des attaques de type brute force, nous avons décidé de mettre en place fail2ban pour le protocole SIP sur nos serveurs asterisk.
Ceci pour des raisons évidentes de sécurité mais également pour la qualité de notre système.
Par attaques de type brute force nous désignons les tentatives répétées d'entrer des mots de passe. Ceci dans le but de trouver le mot de passe correct pour prendre possession du compte SIP dans le cas présent.
Lors de ces attaques nos servers doivent alors gérer des milliers de requêtes en même temps. De l'ordre de 120 requêtes par secondes.
Il en résulte une forte sollicitation du CPU. Comme nous pouvons le voir dans le graphe suivant, des pics de 10 à 15 minutes utilisent parfois plus de 3 fois la charge CPU d'une utilisation moyenne.
Cela à pour incidence de diminuer la qualité des appels en surchargeant les serveurs.
apt-get update
apt-get install fail2ban
Créer :
/etc/fail2ban/filter.d/asterisk.conf
Et y insérer les définitions suivantes:
# 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.* .*: Registration from '.*' failed for '<HOST>' - Peer is not supposed to register
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>.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Ajouter les règles pour asterisk à la fin du fichier /etc/fail2ban/jail.conf
Attention à bien définir le chemin de notre fichier de log : /var/log/asterisk.log
Définir également le sender afin d'identifier le serveur qui génère l'alerte.
Il est aussi important de paramétrer les paramètres suivants :
maxretry : Le nombre de tentative authorisée avant de bloquer l'IP
bantime : Le temps en seconde de la durée du banissement.
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=<alerts mail address>, sender=fail2ban@server]
logpath = /var/log/asterisk.log
maxretry = num_of_retry
bantime = ban_time
Modifier le format de date dans
/etc/asterisk/logger.conf
Exécuter
asterisk -rx "logger reload"
|
-r Au lieu de lancer un nouveau processus Asterisk, essayer de se connecter au processus asterisk lancé et fournis l'interface pour le contrôler -x Executer une commande |
/etc/init.d/fail2ban start
iptables -D fail2ban-ASTERISK -s xxx.xxx.xxx.xxx -j DROP
Fail2Ban (with iptables) And Asterisk
http://www.voip-info.org/wiki/view/Fail2Ban+%28with+iptables%29+And+Asterisk
* * *
Copyright © 2011 by Switzernet