Installation der VoIP Blacklist VoIPBL für Asterisk auf einem Raspberry Pi

13. März 2021

VoIPBL ist eine kostenlose Blacklist für Asterisk mit Fail2Ban. Diese Blacklist enthält über 20.000 IP-Adressen und wird regelmäßig automatisch aktualisiert, damit sich Asterisk unerwünschte Eindringliche fernhalten kann. Der Dienst funktioniert sehr zuverlässig.

Die englischsprachige Anleitung ist unter

http://www.voipbl.org/

zu finden, an die ich mich orientiert habe. Weitere Anmerkungen habe ich unter https://github.com/WyoMurf/voipBL-CentOS6 gefunden. Die Anleitung auf der PDF unter https://www.thirdlane.com/forum/fail2ban-on-steroids-voip-blacklist scheint veraltet zu sein. Hier möchte ich zeigen, wie ich bei der Installation für meinen Raspberry Pi 3 B+ vorgegangen bin. Dabei habe ich mich an die offizielle Anleitung auf

  http://www.voipbl.org/#install

gehalten und für Linux-Anfänger ausführlicher erklärt. Meine Bedingungen sind:

Hardware: Raspberry Pi 3 B+ mit 16 GByte großer Micro-SD-Karte
Betriebssystem: Raspbian 3.2 (Bezug des gezippten Image hier)
Asterisk: Version  16.2.1

Voraussetzungen vor der Installation: Voraussetzung ist, das auf dem Raspberry die Programme Asterisk, Iptables und Fail2Ban erfolgreich installiert und konfiguriert wurden. Iptables war bei mir in Raspbian vorinstalliert. Wie das alles geht, ist unter

https://elektronikbasteln.pl7.de/asterisk-und-fail2ban-auf-dem-raspberry-pi

anfängerfreundlich beschrieben. Alle Arbeiten habe ich auf der grafischen Benutzeroberfläche von Raspbian ausgeführt, auf der ich mich als Root angemeldet habe.

Im Prinzip müssen wir nur drei Dateien erschaffen . Diese können wir zum Beispiel durch Copy+Paste und Notepad++  auf Windows erledigen. Dabei ist wie in Linux üblich die Zeichenkodierung UTF-8 zu verwenden. Diese 3 Dateien müssen in die entsprechende Stelle kopiert werden. Zum Kopieren von Windows auf Raspian nehme ich einen USB-Stick. Die bereits vorhandene jail.conf muss um einen Eintrag erweitert werden. Dann noch zwei Linux-Befehle ausführen und das war es schon.

Anleitung Schritt für Schritt:

Die voipbl ist zu erschaffen und nach /etc/cron.d/voipbl zu kopieren. Die Datei “voipbl” kommt also in den Ordner “/etc/cron.d”:

# Update der Blacklist alle 4 Stunden bei O Minuten einer Stunde
# siehe https://crontab.guru/
# nach einer Änderung: sudo service cron reload
# Update immer morgens um 4:30: 30 4 * * *
# Pfad: /etc/cron.d/voipbl
# Dateiname: voipbl
0 */4 * * * root /usr/local/bin/voipbl.sh

 

Die voipbl.sh ist zu erschaffen und nach /usr/local/bin/voipbl.sh zu kopieren:

#!/bin/bash

# Check if chain exists and create one if required
if [ `iptables -L | grep -c "Chain BLACKLIST-INPUT"` -lt 1 ]; then
  /sbin/iptables -N BLACKLIST-INPUT
  /sbin/iptables -I INPUT 1 -j BLACKLIST-INPUT
fi
    
# Empty the chain
/sbin/iptables -F BLACKLIST-INPUT
wget -qO - http://www.voipbl.org/update/ |\
  awk '{print "if [ ! -z \""$1"\" -a \""$1"\" !=  \"#\" ]; then /sbin/iptables -A BLACKLIST-INPUT -s \""$1"\" -j DROP;fi;"}' | sh

# Pfad: /usr/local/bin/voipbl.sh
# Dateiname: voipbl.sh
# Diese Datei arbeitet zusammen mit Iptables. Damit voipbl.sh ausführbar ist 
# und automatisch die IP-Adressen aus der Blacklist sperrt,
# ist sie im CLI mit dem Linux-Befehl
# chmod 700 /usr/local/bin/voipbl.sh
# ausführbar zu machen.

 

Die voipbl.conf ist zu erschaffen und nach /etc/fail2ban/action.d/voipbl.conf zu kopieren:

[Definition]

actionban   = <getcmd> "<url>/ban/?serial=<serial>&ip=<ip>&count=<failures>"
actionunban = <getcmd> "<url>/unban/?serial=<serial>&ip=<ip>&count=<failures>"

[Init]

getcmd = wget --no-verbose --tries=3 --waitretry=10 --connect-timeout=10 \
              --read-timeout=60 --retry-connrefused --output-document=- \
          --user-agent=Fail2Ban

url = http://www.voipbl.org

# Pfad: /etc/fail2ban/action.d/voipbl.conf
# Dateiname: voipbl.conf
# Diese Datei konfiguriert Fail2Ban und definiert die Aktionen für die VoIP Blacklist

 

Die bereits vorhandene jail.conf in /etc/fail2ban/jail.conf ist um die Zeile

voipbl[serial=XXXXXXXXXX]

zu ergänzen, um den den neuen Dienst voipbl in asterisk-iptables einzutragen. Die vielen XXXXXXXXXX sind keine Platzhalter. Sie müssen tatsächlich so stehen:

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK], protocol=all]
         voipbl[serial=XXXXXXXXXX]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 10800

[DEFAULT]

# Nachfolgend sind die nicht zu sperrenden IP-Adressen
# durch Leerzeichen zu trennen

ignoreip = 127.0.0.1

# Alles andere in der Datei bleibt so und sollte nicht verändert werden.

 

Wenn die drei Dateien kopiert sind und die jail.conf um die eine Zeile verändert wurde, gehen wir in als Root angemeldeter Nutzer in die CLI (der schwarze Kasten) und führen den Befehl

chmod 700 /usr/local/bin/voipbl.sh

aus, damit die voipbl.sh ausführbar wird. Die Anführungszeichen natürlich weglassen.

Dann müssen wir noch Fail2ban neu starten. Das ist mir mit

fail2ban-client restart” und/oder “fail2ban-server restart

gelungen. Wenn danach keine Fehlermeldungen kommen, ist alles in Ordnung.

Nun müssen wir vielleicht eine Stunde oder mehr warten, bis die Blacklist heruntergeladen wird. Das können wir mit dem Befehl

iptables -L

kontrollieren und verfolgen. Das Herunterladen der langen Liste kann ebenfalls eine Stunde oder mehr beanspruchen.

Dann können wir die Asterisk-Console aufrufen:

asterisk -rvvvvvvv

Die Anzahl der “v” bestimmt die Gesprächigkeit (verbosity). Je mehr “v”s, desto mehr Meldungen zeigt Asterisk an. Wir können z.B. die verbosity auf den sehr hohen Wert 10 stellen:

core set verbose 10

Wir werden hoffentlich feststellen, dass nun nur noch die betriebsüblichen Meldungen wie z.B. Verbindungsaufbau der Gespräche zu beobachten sind. Bei mir sind keine unerlaubten Zugriffe mehr festzustellen. Voller Erfolg!

Nach der Installation ist ein Herunterfahren und ein Neustart des Raspberry empfehlenswert, besonders wenn Gespräche eine ungewöhnlich hohe CPU-Belastung von 10% und mehr benötigen und der Dienst ksoftirqd/0 mit ebenfalls um die 10% CPU-Belastung aktiv ist. Normal wäre 0%. Die CPU-Belastung lässt sich mit dem Befehl “top” überprüfen. Eine Gesprächsverbindung belastet normalerweise die CPU mit etwa 3,3%  bis 3,6% und Fail2Ban benötigt 0,3%. 10 gleichzeitig geöffnete Channels kommen mit 12% CPU-Leistung aus. Nach dem Neustart des Raspberry muss eventuell mit “file2ban-client restart” File2Ban neu gestartet werden.

Ob die Konfiguration von Fail2Ban mit VoIPBL funktioniert, lässt sich mit

fail2ban-client -d

überprüfen. Der Befehl liefert eine Menge Text, in welchem  der Begriff “voipbl” mehrfach vorkommt.