- Pourquoi passer d’une ligne téléphonique « classique » à un serveur Asterisk (VOIP) ?
- Comment configurer le firewall de votre BBOX3 pour Asterisk
- Comment configurer le firewall de votre serveur Asterisk en 5 minutes
- Asterisk, une configuration simple pour bien débuter
- Comment connecter votre serveur Asterisk à OVH
- Comment configurer un adaptateur PAP2T pour une ligne SIP (OVH/Asterisk)?
- Comment configurer le modem Technicolor (Voo) pour téléphoner avec SIP (OVH/Asterisk)
- fail2ban: protégez votre serveur Asterisk !
- Connecter Asterisk à son GSM avec CSipSimple
fail2ban représente la troisième couche de protection de notre serveur Asterisk.
Les deux premières étant les pare-feu respectifs de notre box internet et du serveur lui même.
Il agit comme un analyseur de log, il permet de détecter les tentatives à répétition d’identification.
Il peut être utilisé pour protéger plusieurs services/protocoles, et le plus souvent pour ssh, apache, asterisk.
Comme son nom l’indique, il bannit les « fails ».
C’est à dire qu’il cherche dans les logs à l’aide de « regex » (expressions régulières) les erreurs de connexions afin de pouvoir bannir (ban) les adresses IPs qui sont à l’origine de ces tentatives.
Si vous le souhaitez, vous trouverez plus d’information sur fail2ban en suivant ces liens:
Installer fail2ban
L’installation de fail2ban sous raspbian (debian sur raspberry) se fait à partir des dépôts, il suffit donc de taper la commande
sudo apt-get update && sudo apt-get install fail2ban
Il en va de même sous Ubuntu ou Debian.
Vous pouvez vérifier la version installée avec la commande
sudo fail2ban-client –version
Configuration de fail2ban
Les fichiers de configuration se trouvent dans le répertoire /etc/fail2ban.
Les plus important sont /etc/fail2ban/fail2ban.conf, /etc/fail2ban/jail.conf.
Il est vivement conseillé de « surcharger » ces fichiers, c’est à dire d’utiliser une extension à ces fichiers,
pour faire cela, vous devez créer les fichiers suivant /etc/fail2ban/fail2ban.local et /etc/fail2ban/jail.local.
Le but étant de protéger notre configuration lorsque l’on update fail2ban.
Sans oublier les filtres que l’on retrouve dans le répertoire /etc/fail2ban/filter.d
jail.local
Par défaut, fail2ban autorise 5 tentatives de connexions (maxretry = 5) toutes les 10 minutes (findtime =600s),
et s’il trouve ces 5 tentatives banni l’ip pour 10 minutes (bantime=600s).
Si votre serveur Asterisk est online 24/7, cela signifie 5 tentatives toutes les 10 minutes, je vous laisse faire le calcul par an (x6 x24 x365).
Pour autant que vous avez suivi scrupuleusement l’un ou l’autre « tuto » bien placés lors des recherches sur google,
vos users sont 6001, 600x ou 101, 10x (n’utilisez pas les numéros d’extensions comme users!), combien de temps votre mot de passe va tenir ?
Il faut être beaucoup plus sévère !
Section Default
Pour cela, éditons le fichier /etc/fail2ban/jail.local avec les valeurs suivantes
- ignoreip: permet de ne pas bannir ces ranges d’adresses IPs
J’y ai placé la boucle locale (127.0.0.1/8) mon réseau local (192.168.1.1/24) et mon réseau VPN (10.8.0.1/16) - findtime (par défaut 600s = 10 minutes): permet de renseigner la période pendant laquelle le log est examiné
J’y ai placé une heure (3600s)
l’inconvénient d’un grand findtime est que le système doit analyser des fichiers de logs plus volumineux,
il y a donc un impact sur les performances. - bantime (par défaut 600s): permet de renseigner la durée pendant laquelle l’IP est bannie
j’y ai placé une journée (86400s)
Section Asterisk
Ajoutons à ce fichier, une section pour notre serveur Asterisk
On y retrouve
- entre [ ], le nom de la jail (prison) dans l’exemple « asterisk-iptables »
- enabled: permet d’activer/désactiver un filtre
pour l’activer, la valeur doit être true (vrai) - filter: permet de pointer vers le fichier filtre
je créerai plus bas dans ce post un fichier /etc/fail2ban/filter.d/asterisk.conf, je place donc la valeur asterisk - port: permet de specifier le port qui sera bloqué
pour asterisk, comme les connections se font en SIP sur le port 5060, j’ai définit ce port
(A adapter si votre configuration est différente) - action: permet de définir l’action entreprise par ce filtre
le nom (name=) permet de créer une table iptables dédiée de la forme fail2ban-NAME (avec cette config fail2ban-ASTERISK)
On peut également décider si l’on souhaite recevoir un mail lorsque le filtre est utilisé. - logpath: permet de préciser le fichier de log à analyser
C’est dans ce fichier que les tentatives de connexions sont enregistrées, pour asterisk /var/log/asterisk/messages - maxretry: permet de préciser le nombre maximum de tentative avant d’activer le filtre
Je n’autorise que 3 tentatives, la 4ième active le filtre - findtime: seulement si vous désirez des valeurs différents du défaut (21600s = 6h)
- bantime: même remarque que pour le findtime
J’ai choisi de créer un fichier jail.local,
vous pouvez également créer les fichiers jail.conf et asterisk.conf dans le répertoire /etc/fail2ban/jail.d/
Filtre Asterisk
Dans la section précédente, nous avons fait référence à un fichier « filtre » /etc/fail2ban/filter.d/asterisk.conf
Ce fichier permet de préciser les « expressions » que le programme devra retrouver dans le fichier de log.
Ces expressions dépendent de votre version d’Asterisk, voici le contenu de mon fichier:
comme je suis sympa, si vous voulez copier coller:
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Wrong password
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Username/auth name mismatch
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Device does not match ACL
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Peer is not supposed to register
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – ACL error (permit/deny)
NOTICE.* .*: Registration from ‘.*’ failed for ‘:.*’ – Device does not match ACL
NOTICE.* .*: Registration from ‘\ ».*\ ».*’ failed for ‘:.*’ – No matching peer found
NOTICE.* .*: Registration from ‘\ ».*\ ».*’ failed for ‘:.*’ – Wrong password
NOTICE.* <HOST> failed to authenticate as ‘.*’$
NOTICE.* .*: No registration for peer ‘.*’ \(from \)
NOTICE.* .*: Host <HOST> failed MD5 authentication for ‘.*’ (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
NOTICE.* .*: <HOST> failed to authenticate as ‘.*’
NOTICE.* .*: <HOST> tried to authenticate with nonexistent user ‘.*’
VERBOSE.*SIP/-.*Received incoming SIP connection from unknown peer
SECURITY.* SecurityEvent= »FailedACL ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »InvalidAccountID ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »ChallengeResponseFailed ».*RemoteAddress= ».+?/.+?//.+? ».*
SECURITY.* SecurityEvent= »InvalidPassword ».*RemoteAddress= ».+?/.+?//.+? ».*
Comment Tester ?
Vérifier le status de fail2ban
La première chose à faire est de s’assurer que notre configuration est bien en cours d’exécution.
Pour cela, il faut utiliser la commande « reload » du service
sudo service fail2ban reload
Vous pouvez également redémarrer le service
sudo service fail2ban restart
Si aucun message ne s’affiche, c’est que tout est bon, mais vous pouvez-vous en assurez avec
sudo service fail2ban status
Si vous désirez connaîtres le status de vos jails, vous pouvez utiliser la commande
sudo fail2ban-client status
il est également possible de spécifier le status de quelle « jail » on veut contrôler avec « sudo fail2ban-client status »
Utiliser fail2ban-regex
la commande « fail2ban-regex <log_file> <filter_file> » permet de tester votre filtre sur un fichier.
Par exemple si j’exécute la commande pour le filtre asterisk sur le fichier /var/log/asterisk/messages
Ce qui m’indique que le filtre à trouver 10 lignes dans le fichier de log qui correspondent aux « regex »;
vérifions cela avec le couple tail/grep:
5 lignes avec le regex contenant « Wrong password »
5 lignes avec le regex content « InvalidPassword »
(J’ai masqué le user sur le screenshot comme je n’ai supprimé que quelques lettres de son user pour générer cette erreur de connexion, on est jamais trop prudent)
A noter que l’ip ne sera pas bannie car étant dans le range renseigner dans ignoreip.
Est-ce que mon filtre fonctionne ?
comme déjà précisé, vous pouvez utiliser la commande sudo fail2ban-client status afin de vérifier les IPs bannies par votre filtre.
Vous pouvez également afficher le contenu de la table iptables avec la commande
sudo iptables -nL fail2ban-ASTERISK
La table est vide car la configuration du firewall n’autorise que les IPs locales ou du VPN à tenter de se connecter.
Le nom de la table fail2ban-ASTERISK dépend de la configuration de votre jail
- action = iptables-allports[name=ASTERISK, protocol=all]
Voilà ce qui conclut cet article.