Asterisk mit Fail2Ban und VoIPBL auf dem Raspberry Pi unter Raspbian installieren

8. Oktober 2020 (aktualisiert am 28. Oktober 2020, am 10. und 12. März 2021 und am 28. Juni 2021)

Mein kleiner Asterisk-SIP-Server ist vor einigen Tagen von einer alten FritzBox 7170 auf einen Raspberry Pi 3 B+ umgezogen. Zur Sicherheit wurde noch Fail2Ban installiert und konfiguriert, damit er vor mehrfachen erfolglosen Verbindungsversuchen, die Passwörter knacken wollen, geschützt ist. Die VoIP Blacklist VoIPBL wurde am 12.3.2021 installiert und bietet einen weiteren Schutz vor unerwünschten Eindringlingen. Dies hat sich als notwendig erwiesen, da mein SIP-Server nicht nur eine Haustelefonanlage ist. Die Nebenstellen können sich über das Internet von überall auf der Welt verbinden.

Bitte unbedingt https://elektronikbasteln.pl7.de/asterisk-raspberry-crash-wegen-eines-stromausfalls lesen, da ein Stromausfall zum Datencrash führen kann und dadurch eine Neuinstallation erfordert.

Inzwischen ist das Problem aber bei mir jedenfalls behoben, da VoIPBL anscheinend bei meiner Konfiguration dafür verantwortlich war. Ohne VoIPBL überstand mein Raspbian bis jetzt jeden Stromausfall problemlos. Nachdem der Strom wieder da war, war ohne ein Zutun Asterisk wieder online. Dennoch sind Sicherungskopien und eine Datensicherung der derjenigen Dateien, welche die individuelle Konfiguration beinhalten, unbedingt notwendig. Die SD-Karte nur im vollkommen stromlosen Zustand des Raspberry einsetzen oder herausziehen. Nach dem Ziehen des Netzsteckers sicherheitshalber 10 Sekunden warten, bevor man die SD-Karte entfernt.

Dieser Artikel erklärt nur, wie man Asterisk und Fail2Ban auf einem Raspberry installiert. Asterisk muss allerdings noch konfiguriert werden, falls diese Konfiguration noch nicht vorliegt.  Die Asterisk-Konfiguration setzt unumgänglich eine Einarbeitung in Asterisk voraus. Um den Einstieg so leicht wie möglich zu machen, gibt es unter

https://elektronikbasteln.pl7.de/eine-einfache-asterisk-konfiguration-fuer-einen-sip-server-als-telefonanlage

neben zahlreichen Beispiel-Konfigurationen auch Links zur praxisnahen Einführung in Asterisk, die selbst ich verstanden habe. Die Einführung braucht sich nur auf das heute weit verbreitete SIP-Protokoll für die IP-Telefonie beschränken, obwohl Asterisk noch weitere Protokolle beherrscht.

In meinem Fall musste ich die bereits vorhandene Asterisk-Konfiguration nur auf eine neue Version von 1.4.2.2 auf 16.2.1 anpassen, was relativ einfach war.

Raspberry Pi 3 B+
Mein kleiner Asterisk-SIP-Server läuft jetzt auf einem Raspberry Pi 3 B+, der wesentlich leistungsfähiger ist.

Die Ausgangslage anfängerfreundlich erklärt:  Wer schon mit dem Raspberry gearbeitet hat, kann das nachfolgende überspringen. Auf meinem Raspberry Pi 3 B+ befindet sich als Betriebssystem das neueste Raspberry Pi OS (32-bit) (Released: 2020-08-20) (früher und umgangssprachlich immer noch Raspbian genannt) mit den neuesten Updates. Dieses Linux-Betriebssystem auf der Basis von Debian besitzt eine grafische Oberfläche ähnlich wie Windows, was die Konfigurationsarbeit wesentlich vereinfacht. Nur routinierte Linux-Anwender sollten zum Raspberry OS Lite greifen, das ohne grafische Oberfläche daherkommt. Große Vorteile bringt der Verzicht nicht. Mit der grafischen Oberfläche liegt die CPU-Auslastung des Asterisk-Server bei unter 5%.

Mit dem Raspberry Pi Imager können wir das Image des Betriebssystems Raspberry Pi OS (32-Bi) auf die mindestens 16 GByte große Micro-SD-Karte kopieren, die wie dann in Raspberry stecken. Nach dem Anschalten der Spannungsversorgung installiert sich das Betriebssystem automatisch. Fertig!

Der Raspberry Pi kommt ohne Betriebssystem daher. Es fehlt sogar ein BIOS. Wenn wir den Raspberry nach dem Auspacken an einen HDMI-Monitor anschließen, passiert deshalb nichts. Wir müssen über eine Micro-SD-Karte ein Betriebssystem installieren.

USB-Card-Reader mit Adapterkarte für Micro SD. Sollte es Probleme beim Kopieren geben, einen anderen Card Reader verwenden. Der Slot für die Micro-SD-Karte befindet sich auf der schmalen Seite des Raspberry in der Nähe der kleinen LED.

Micro-SD-Karte mit dem Image des Betriebssystems versehen: Das Image des Betriebssystem muss erst einmal mit einem SD-Karten-Leser (Speicherkartenleser) über die USB-Schnittstelle des Rechners (in meinem Fall mit Windows 10) auf die Micro-SD-Karte kopiert werden. Dies erledigt seit dem März 2020 auch das kleine praktische Programm Raspberry Pi Imager, das es auch für Windows gibt. In diesem Programm lässt sich das gewünschte Betriebssystem auswählen. Die Bedienung ist buchstäblich kinderleicht und erklärt sich von selbst. Mit normalen Kopierprogrammen kann übrigens keine bootfähige SD-Karte erzeugt werden.

Hinweis vom 10. März 2021: Das aktuelle Raspbian hat einen Fehler. Die obere Menueleiste wird im Root-Modus nicht angezeigt. Deshalb installierte ich die Version 3.2. vom 13.2.20. Sie ist unter  https://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/ zu finden und nach dem Download der Zip-Datei zu entpacken und kann dann wie gewohnt mit dem Raspberry Pi Imager auf die Micro-SD-Karte kopiert werden. Sie funktioniert auf meinem Raspberry Pi 3 B+ einwandfrei. Zur Sicherheit ist diese ältere Version zu sichern, bevor sie aus dem Internet verschwindet. Die hier vorgestellte Anleitung funktioniert nach meiner Erfahrung auf jeden Fall mit der Version 3.2 oder 3.4 auf dem Rasberry 3 B+.

Nachtrag vom 14.12.2021: Heute habe ich mit dem Raspberry Pi Manager das aktuelle Raspbian auf einen zweiten Raspberry 3 B installiert, den ich trotz Lieferschwierigkeiten noch ergattert hatte. Im grafischen Root-Modus fehlte wieder die Menueleiste. Also installierte ich wieder die alte Version

https://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/2020-02-13-raspbian-buster.zip

nach dem Entpacken der Zip-Datei. Bei der Installation bin ich nicht der Aufforderung nachgegangen nach Updates oder Aktualisierungen zu suchen. Stattdessen habe ich nach der Installation im CLI folgende Befehle eingegeben:

sudo apt update –allow-releaseinfo-change

Ein einfaches “sudo apt update” reicht nicht mehr aus. Die Antwort steht unter https://forums.raspberrypi.com/viewtopic.php?t=245073. Dann

sudo apt upgrade

ausfgeführt. Das hat recht lange gedauert. Damit ist aber das alte Raspbian aktualisiert.

Installation von Raspbian: Die so vorbereitete Micro-SD-Karte (Größe 16 GByte empfehlenswert) kommt nun in den SD-Karten-Slot des Raspberry Pi. Vorher hatten ich schon einen HDMI-Monitor (mit einem Adapter von HDMI nach VGA klappte es nicht), das LAN-Kabel, eine USB-Maus und eine USB-Tastatur angeschlossen. Nun nur noch das Steckernetzteil in die Steckdose stecken und das Programm fängt an sich selbständig zu installieren.

Dann erfolgen während der Einrichtung des Raspbians die üblichen Aufforderungen für die Länderauswahl, die Nachfrage nach dem Wlan-Schlüssel. Danach erfolgen die Updates. Vor dem Herunterladen der Updates sollten wir noch von WLAN auf den LAN-Zugang umstellen, weil dann das Laden der Updates schneller geht. Abgesehen davon wollen wir nur im Notfall den Raspberry über WLAN erreichen. Nach 10 Minuten war die Installation abgeschlossen und wir können sogar damit im Web surfen. Bis dahin kommen die allermeisten problemlos. Der steinige Weg fängt jetzt erst an.

Root-Rechte und Passwörter: Ohne Passwort geht in der Linuxwelt eigentlich nichts. Das voreingestellte Passwort für den voreingestellten User “Pi” lautet “raspberry”. So lautet der Standard-Login. Ich habe das Passwort über die grafische Oberfläche geändert.

Angemeldet als Pi können wir relativ wenig verändern. Wenn wir tief im System Eingriffe vornehmen wollen, brauchen wir Root-Rechte. Wir müssen uns als “root” anmelden.

Dazu müssen wir auf die Kommandozeilen-Ebene gehen.  Die grafische Oberfläche (der Desktop) besitzt oben eine Menüleiste. Dort befindet sich als Icon ein kleiner schwarzer Kasten (LX-Terminal), den wir aufrufen. Hier habe ich ich nun

sudo su

eingetippt. Dann die Eingabetaste betätigen und schon sind wir als  root angemeldet. Mit

passwd

können wir nun ein Passwort für den root anlegen, was wir machen sollten. Jetzt können wir uns über die grafische Oberfläche fast wie bei Windows abmelden und uns mit dem Passwort als root wieder anmelden. Unter “Raspberry-Pi-Konfiguration” lässt sich das Raspbian so einstellen, dass wir nach dem Booten zwischen Pi und Root auswählen können. Für die nachfolgenden Installations- und Konfigurationsarbeiten müssen wir uns als root auf dem Desktop anmelden, um vollen Zugriff zu erhalten, damit wir Konfigurations-Dateien mit dem Texteditor verändern können.

Sich als Root auf dem Desktop anmelden: Ganz ganz wichtig! Melden wir uns als “root” an, können wir alles im System verändern. Um uns als root auf dem dem Desktop anzumelden, müssen wir uns erst auf dem Desktop abmelden, weil in der Grundeinstellung sich Raspbian nach dem Booten als “pi” anmeldet. Vorher haben wir bereits wie beschrieben auf der Kommandozeilenebene im LX-Termnial mit “sudo su” und “passwd” ein Passwort für “root” angelegt. Wenn ja,  dann auf dem Desktop auf die rote Himbeere in der linken oberen Ecke des Raspbian-Bildschirms klicken und dann klappt ein Menü auf und ganz unten im diesem Menü auf das grüne Symbol “Abmelden” klicken. Es öffnet sich darauf ein Fenster in der Mitte des Schirms.  Dort wieder auf “Abmelden” klicken. Dann nicht als “pi” anmelden, sondern  als root und das enstprechende Passwort eintragen und dann wieder Anmelden. Dazu auf pi klicken, dann kommt “Sonstige” und dann root eintippen und dann unser Passwort.  Für alle Arbeiten an der Konfiguration zukünftig immer als root anmelden.

Abmelden, um sich danach gleich wieder als root anmelden zu können.
Auf “pi” klicken, dann erscheint “Weitere”. Dann “root” eintippen und das Passwort, welches wir vorher im LX-Terminal mit “sudo su” und “passwd” bestimmt haben. Sind wir dann als root angemeldet, können wir alle Dateien des Systems verändern, was natürlich auch das Betriebssystem zerstören könnte.

Damit sich beim Booten das Betriebssystem nicht immer automatisch als pi anmeldet, können wir unter “Einstellungen” -> “Raspberry Pi Konfiguration” -> System  -> “Automatischer Anmeldung” das “Als Benutzer pi anmelden” deaktivieren. Wir können dann nach jedem Booten zwischen pi und sonstige, also root, wählen.

Damit Raspbian sich nicht immer automatisch nach dem Booten als User “pi” anmeldet, gehe man auf “Einstellungen” -> “Raspberry-Pi-Konfiguration” -> System -> Und dann das “Als Benutzer “pi” anmelden” deaktivieren.

Tut mir leid wegen der schlechten Screenshots. Anders es ging  leider  in diesem Fall nicht anders.

OK, das sieht jetzt nach etwas Arbeit aus. Aber mit meiner Anleitung werdet Ihr Euch hoffentlich viel Arbeit und Zeit ersparen und auf sinnlose Umwege verzichten können. Links der HDMI-Monitor für den Raspberry. Dieser Monitor lässt sich auch auf VGA umstellen und dient dann als weiterer Monitor für das Notebook. Ganz rechts ein IP-Telefon für die Experimente mit Asterisk. Softphones gehen natürlich auch. Ein IP-Telefon ist allerdings eine sehr komfortable Einrichtung.

Und ab hier geht es an das Eingemachte: Aber keine Bange. Sollten wir unser Raspbian als “root” völlig verhunzen, müssen wir es nur wieder neu aufspielen. Übung macht den Meister. Übrigens besteht die Möglichkeit eine Sicherungskopie anzulegen, was am Ende des Aufsatzes beschrieben ist.

Folgende Arbeiten sind der Reihe nach auszuführen, um aus dem Raspian einen kleinen SIP-Server zu machen. Die wichtigsten Einzelschritte werden anschließend genau erklärt: Sie beziehen sich im speziellen Fall auf die Migration meines Asterisk-Servers von der Version 1.4.2.2 auf die Version 16.2.1. Die Anleitung lässt sich auf die meisten Fälle übertragen und gilt auch für eigene Asterisk-Konfigurationen. Dabei sollten wir immer als “root” angemeldet sein:

1. Einrichten einer statischen IP für den Raspberry
2. Installation von Asterisk (hier Vers. 16.2.1)
3. Überspielen der alten Asterisk-Konfigurations-Dateien
4. Anpassungen an der Asterisk-Konfiguration vornehmen
5. Portweiterleitungen im Router eventuell einrichten
6. Asterisk mit Softphones testen
7. Fehlende Audio-Dateien für Asterisk eventuell ergänzen
8. Installation von Fail2Ban (hier Vers. 0.10.2)
9. Installation von Iptables, falls noch nicht installiert
10. Konfiguration von Fail2Ban für Asterisk
11. Testen eines Stromausfalls

Einrichten einer statischen IP für den Raspberry: Wir sind im Root und gehen mit dem Dateimanager (gelbes Symbol in der oberen Leiste des Desktops) auf

/etc/dhcpcd.conf

(also Ordner etc aufrufen und dann die dhcpcd.conf aufrufen, immer mit rechten Maustaste arbeiten). In der dhcpcd. conf  den vorhandenen Eintrag “persistent” mit # am Zeilenanfang auskommentieren. Es muss dann stehen:

# persistent

# persistent

 

Dann zur Zeile “# Example static IP configuration:” springen. Darunter müssen wir folgendes eintragen, wenn wie im Beispiel der Asterisk-Server unter der lokalen IP 192.168.1.111 erreichbar sein soll und unser Router die IP 192.168.1.253 besitzt. Die statische IP soll nur für die Netzwerkverbindung (etho) über das LAN-Kabel gelten. Vorher müssen wir uns z.B. im Router vergewissern, ob die statische IP in unserem LAN nicht schon belegt ist. Wir tragen ein:

interface eth0
static_ip_adress=192.168.1.111/24
static routers=192.168.1.253
static domain_name_servers=192.168.1.253 8.8.8.8

interface eth0
static_ip_adress=192.168.1.111/24
static routers=192.168.1.253
#  Der eigene Router hat die IP 192.168.253
static domain_name_servers=192.168.1.253 8.8.8.8

Als zweiter Domain-Name-Server (DNS) ist hier die 8.8.8.8 von Google gewählt. Wir können auch einen anderen auswählen.

Wichtig ist, dass die Zeilen für ipv6 auskommentiert bleiben, weil dann nach einem Stromausfall und nach dem Wiederhochfahren die LAN-Verbindung nicht mehr richtig funktioniert. Kontrolle: Rechts oben in der Menüleiste gibt es das Netzwerksymbol mit den zwei blauen Pfeilen. Fahren wir mit der Maus auf die blauen Pfeile, müsste unter anderem “eth0: configured 192.168.1.111/24″ erscheinen. Die neue Einstellung können wir auch mit dem CLI-Befehl ” ifconfig” überprüfen (CLI-Befehl = Befehl auf der Kommandozeilenebene im LX-Terminal). Für die Wirksamkeit ist wahrscheinlich ein Neustart notwendig. Ich erinnere mich nicht mehr. Die dhcpcd.conf habe ich mir gesichert. Somit geht das Aufsetzen eines neuen Raspbian bequemer.

Anmerkung: Bei älteren Raspian Stretch Versionen wurde das eth0 durch eine Zeichenkombination ersetzt, die wir mit

ifconfig

herausfinden. Mehr dazu steht unter

https://www.raspberrypi.org/forums/viewtopic.php?t=191140.

Korrekte Anzeige für den LAN-Zugang (eth0) mit der statischen IP 192.168.1.111 des Raspberry Pi.

Installation von Asterisk (hier Vers. 16.2.1): Vorab sei gesagt, dass sämtliche Versuche ältere Asterisk-Versionen aus Debian-Paketen zum kompilieren scheiterten. Dann versuchte ich mich an einer Asterisk-Distribution mit FreePBX  heranzuwagen. Ich konnte mich mit der Oberfläche nicht anfreunden, da ich mich an den Umgang mit den Asterisk-Konfigurations-Dateien vertraut gemacht hatte. Schuster bleib bei deinen Leisten. Mit solchen Asterisk-Distrubition lässt sich der Raspberry auch nicht mehr für andere Aufgaben konfigurieren. Säter soll der Raspberry auch noch als FTP-Server und Druckertreiber dienen.

Also entschied ich mich Asterisk ganz einfach mit

sudo apt-get update und dann

sudo apt-get install asterisk

zu installieren. Als Ergebnis wurde problemlos Asterisk mit der Version 16.2.1 installiert. Die Version war das Überraschungsei für mich. In zukünftigen Raspian-Versionen können andere Asterisk-Versionen installiert werden.

Mit

sudo asterisk -rvvv

können wir nach der Installation die Konsole von Asterisk starten und erfahren die installierte Version. Je mehr “v” wir hinter dem “r” eintippen, desto mehr Fehlermeldungen und Warnhinweise sind in der Asterisk-Konsole zu sehen. Wenn wir in der Asterisk-Konsole

sip show peers

eingeben, werden keine Telefon-Nebenstellen oder andere Zugänge angezeigt, weil die individuelle Konfiguration fehlt.

Die Konfigurations-Dateien (*.conf) von Asterisk befinden sich unter

/etc/asterisk

Viele dieser Konfigurations-Dateien sind leer. Da wir nur mit dem SIP-Protokoll arbeiten wollen, müssen wir nur wenige Dateien ersetzen oder konfigurieren.

Nun wurde es für mich spannend, da ich meine alten Konfigurations-Dateien der Uralt-Version 1.4.22 unbedingt verwenden wollte, um das Rad nicht neu erfinden zu müssen. Neu war allerdings die Datei pjsip.conf für mich, die es in den alten Versionen nicht gab. Asterisk kommt zum Glück auch mit älteren Konfigurationen klar, die die pjsip.conf noch nicht kennen. Die pjsip.conf müssen wir deshalb nicht verändern und lassen sie so, wie sie ist. Bevor ich die anderen Konfigurationsdateien ersetzte, habe ich die bereits vorhandenen unbenannt, damit sie nicht überschrieben werden, weil ich die dort enthaltenen Konfigurations-Anleitungen nicht verlieren möchte. Aus sip.conf wurde dann z.B. sip.conf1 oder sip.confold. Folgende Dateien ersetzte ich mit Hilfe eines USB-Sticks, um sie auf den Raspberry zu kopieren:

sip.conf  (für die Konfiguration des SIP-Protokolls)
extensions.conf  (legt die Wahlregeln fest)
rtp.conf (legt die Ports für RTP fest)
features.conf (für die Gesprächsweiterleitung)

Diese Konfigurationsdateien müssen wir nach unseren eigenen Wünschen selber erstellen. In meinem Fall hatte ich diese Arbeit schon erledigt. Wie das geht, ist unter

https://elektronikbasteln.pl7.de/eine-einfache-asterisk-konfiguration-fuer-einen-sip-server-als-telefonanlage

beschrieben. Man muss sich in Asterisk einarbeiten.  Die entsprechenden Hinweise und Beispiele für einen leichten Einstieg habe ich beigefügt.

Wenn man die Konfigurations-Dateien unter Windows verfasst, muss die Zeichen-Kodierung in UTF-8 vorliegen, weil dies Linux so verlangt. Deshalb editiere ich die Konfigurationsdateien unter Windows mit Notepad++ https://notepad-plus-plus.org/, das kostenlos ist.

Beim Editieren mit Notepad++ unter Windows darauf achten, dass die Zeichenkodierung auf UTF-8 erfolgt.

Möchte man die Konfigurationsdateien von Asterisk auf dem  Raspberry Pi mit Hilfe der graphischen Benutzeroberfläche verändern, muss man als Root auf dem Desktop angemeldet sein, wie ich das eingangs bereits beschrieben hatte.

Wenn man den USB-Stick wieder vom Raspberry abziehen will, darf man das Abmelden des Sticks vorher nicht vergessen. Auf der oberen Leiste im Raspbian links neben dem Bluetooth-Symbol ist ein Zeichen zum Abmelden des Sticks. Dort draufklicken. Falls man das doch vergessen  hat, muss man den Raspberry wieder neu booten, damit er den USB-Stick erkennt.

Die Dateiübertragungen zwischen PC und Raspberry erfolgt bequemerweise mit einem USB-Stick, obwohl es andere Methoden gäbe (z.B Netzwerk, FTP, Samba), welche aber zu installieren wären oder bei falscher Konfiguration unerwartete Probleme bereiten könnten.
Nach dem Einstecken des USB-Sticks in den Rasbberry erscheint dieses Fenster, in welchem wir den Dateimanager öffnen können, um Zugriff zum USB-Stick zu erlangen.
Bevor wir den USB-Stick wieder vom Raspberry abstecken, müssen wir ihn abmelden. Hier noch auf den entsprechenden Datenträger klicken (SanDisk Cruzer Edge)).
Jetzt erst können wir den USB-Stick sicher vom Raspberry entfernen.

Da in meinem speziellen Fall der Raspberry die gleiche statische IP wie die alte FritzBox 7170 hat und im Router alle notwendigen Portfreigaben bereits eingetragen sind, waren weitere Konfigurationen nicht notwendig. Ich habe das Glück immer eine gleiche öffentliche IP zu besitzen. Wer das nicht hat, kann sich zum Beispiel bei NoIP einen freien Hostnamen besorgen, wenn dies nicht schon der Fall ist.

Nach dem Abklemmen der alten FritzBox und dem Neustart des Raspberry Pi kam der sehr spannende Moment. Alle Nebenstellen innerhalb des LANS und außerhalb des LANs im Internet waren nach ein paar Minuten in beiden Richtungen erreichbar. Die komplizierte Routine für das CallThrough, bei der nach Ansage eine Nummer zu wählen ist, mit der man sich verbinden will, funktionierte einwandfrei. Die Audio-Dateien mit der weiblichen amerikanischen Stimme waren auch alle vorhanden, allerdings mit einer anderen Sprecherin. Nur ein paar Musikstücke fehlten. Alle Wahlregeln in der extensions.conf funktionierten wie gehabt. Große Erleichterung!

Die Nummern der eingetragenen Provider  von Sipgate, DusNet, AntiSip, Sip2Sip, AntiSip, IPTel, Linphone u.s.w. waren alle vom LAN und aus dem Internet erreichbar. Allerdings konnte ich über sie nicht heraustelefonieren. Der Fehler war schnell gefunden. Die Asterisk-Konsole meckerte, dass er mit den Zeilen, in denen

insecure

steht, nichts anfangen konnte. Also auskommentierte ich in der sip.conf sämtliche Zeilen, in der insecure steht wie folgt

; insecure

allerdings mit Ausnahme von insecure=invite unter [general]. Was passiert, wenn ich auch diesen Eintrag lösche, muss ich noch testen.

Jedenfalls funktionierte danach auf einmal auch das Heraustelefonieren von diesen Providern. Die kostengünstigen Tarife von EinfachVoip konnte ich nun ebenfalls wieder nutzen.

Sollten sich die Dateien nicht ändern lassen, weil sie nicht in UTF-8 vorliegen, dann den gesamten Inhalt herauskopieren und in eine neue Textdatei hineinkopieren und umbenennen. Dann erhält man eine Datei gleichen Inhalts im erforderlichen Format.

Testen kann man alles mit Softphones die sich im LAN befinden oder über VPN außerhalb des LANs.

Es fehlten noch ein paar Musikstücke aus dem alten Asterisk, die ich unter

/usr/share/asterisk/sounds/en

unterbringen konnte. Dort untergebracht, wurden sie erkannt.

Wer sich mit Asterisk beschäftigen will, findet für den Einstieg unter

http://das-asterisk-buch.de/1.6/index.html

leicht verständliche Informationen, auf die meine Konfiguration beruht. Mein alter SIP-Server ist unter

https://elektronikbasteln.pl7.de/telefontechnik-und-asterisk-programmierung.html

ausführlich beschrieben.

Muster-Konfiguration eines Asterisk-Muster-Sip-Servers: Im nachfolgenden Beitrag ist als Vorlage eine Musterkonfiguration veröffentlicht und beschrieben, damit man sofort loslegen kann:

Der Asterisk-Server läuft hinter einem Router im LAN auf einem Raspberry Pi 3 B+. Als Betriebssystem dient Raspbian.
Eine einfache Asterisk-Konfiguration für einen SIP-Server als Telefonanlage – 15.10.2020: Die hier vorgestellte Asterisk-Konfiguration dient als Muster für einen einfachen SIP-Server, der als Telefonanlage hinter einem Router arbeitet. Die Nebenstellen des SIP-Servers sind sowohl innerhalb des eigenen LANs als auch über das Internet erreichbar. Außerdem ermöglicht dieses Konfigurationsbeispiel Zugänge aus anderen Netzen über zwei fremde Provider. Über diese beiden Provider kann mit Hilfe von Vorwahlen das Einwählen in andere Netze stattfinden.

Außerdem sind noch verschiedene Testnummern integriert. Der hier vorgestellte Code dient als erweiterbares Schema und er wurde auf Asterisk 1.4.22 und auf Asterisk 16.2.1 über ein Jahr lang in einem realistischen Dauereinsatz getestet. Die Asterisk-Software steht kostenlos zur Verfügung. – weiter

Beim Entwurf dieser Muster-Konfiguration habe ich mich an http://das-asterisk-buch.de/1.6/index.html orientiert und dort befinden sich auch die Erklärungen, die sogar ich verstanden habe.

Die Asterisk-Konfiguration können wir mit Softphones ausprobieren. Auf dem Bild ist ein Android-Smartphone mit der Software Sipnetic abgebildet. Zusätzlich lässt sich ein VPN-Client wie z.B.  OpenVPN installieren, um einen Zugang über das Internet zu simulieren.

Sicherheitsmaßnahmen durch die Asterisk-Konfiguration: Selbstverständlich sollte jeder SIP-Account mit einem starken Passwort versehen werden, das weder gängige Begriffe noch übliche Abkürzungen verwendet.

Weiterhin sollte in der Sip.conf folgende Einträge stehen:

[general]

allowguest=no
alwaysauthreject=yes
; bei alwaysauthreject=yes ; bin ich mir nachträglich
; nicht mehr so sicher,
; ob dieser Eintrag mehr Nutzen als Schaden hat.
…….

[general]
; ...
allowguest=no
alwaysauthreject=yes
; bei alwaysauthreject=yes bin ich mir nachträglich
; nicht mehr so sicher,
; ob dieser Eintrag mehr Nutzen als Schaden hat.
; .......

 

Die Erklärung dafür und weitere Sicherheitstipps sind unter https://www.voip-info.org/asterisk-security/ beschrieben.

Insbesondere hält alleine der Eintrag “alwaysauthreject=yes” sehr viele Eindringlinge ab. Irgendwann waren aber dann sämtliche Nummern der externen Anbieter wie Sipgate, Sip2Sip, AntiSip u.s.w. weiter nicht mehr erreichbar. Ob dies mit “alwaysauthreject=yes” zusammenhängt, weiß ich nicht.  Heraustelefonieren ging noch. Jedenfalls ließ sich der Fehler nur durch eine komplette Neuinstallation des System beheben. Vielleicht war die SD-Karte beschädigt, weshalb die Erstellung von Sicherheitskopien dringend empfehle. Wie das geht, steht weiter unten im Text.

Installieren und Einrichten von  Fail2Ban: Wenn unsere Nebenstellenanlage nicht nur als Haustelefonanlage dient, sondern auch über das Internet erreichbar ist, dann ist Fail2Ban zwingend erforderlich, um massive Angriffe abzuwehren, bei denen immer und immer wieder die gleich IP versucht Passwörter durch Probieren zu knacken. Dies kann sogar zum Absturz des SIP-Servers führen.

Hier greift die selbe IP über 1000 Mal gleichzeitig auf den Asterisk-Server zu. Fail2Ban kann diese IP blockieren.

Fail2Ban entdeckt solche mehrfache Verbindungsversuche und meldet das Ergebnis an IpTables, um die Firewall von Raspian zu veranlassen für eine bestimmte Zeit, welche frei wählbar ist, die unerwünschten IP-Adressen zu sperrren.

Funktionierende Anleitungen waren im Internet für die neue Fail2Ban-Version 0.10.2 nicht zu finden. Geholfen hat mir im ersten Schritt die unvollständige Anleitung unter

https://ixnfo.com/en/configuring-fail2ban-for-asterisk.html

Demnach müssen wir  Fail2Ban mit

sudo apt-get install fail2ban

installieren. Die installierte Version finden wir dann  mit

sudo fail2ban-client

heraus. Nun öffnen wir die Datei

/etc/asterisk/logger.conf

und tragen dort folgendes ein, wenn dies nicht bereits der Fall ist:

[general]

dateformat = %F %T

[logfiles]

console =>  notice,warning,error,debug
messages => security,notice,warning,error

[general]

dateformat = %F %T

[logfiles]

console =>  notice,warning,error,debug
messages => security,notice,warning,error

 

Nun das  Logging-System neu starten:

sudo asterisk -rvvv
logger reload
quit

Es müsste dann die Meldung “Asterisk Queue Logger restarted” erscheinen.

Nun öffnen wir die Datei

/etc/fail2ban/jail.d/defaults-debian.conf

Sollte diese nicht vorhanden sein, dann nehmen wir mit der dortigen asterisk.conf vorlieb.

In diese Datei tragen wir zusätzlich ein:

[asterisk]
enabled = true
bantime = 7200

[asterisk]
enabled = true
bantime = 7200

 

Erst durch den zusätzlichen Eintrag in den Zeilen4 bis 6 in der /etc/fail2ban/jail.d/defaults-debian.conf wird der jail “asterisk” geschaffen.

86400 Sekunden entsprechen 24 Stunden, die ein unerwünschter Eindringling gesperrt wird. Wir können auch andere Zeiten wählen. Ich wählte dann 7200 Sekunden, also 2 Stunden, falls etwas versehentlich gebannt wird. Um diesen Eintrag zu aktivieren, geben wir

sudo fail2ban-client reload

ein. Es müsste dann die Meldung “OK” erscheinen. Nun geben wir zur Kontrolle

sudo fail2ban-client status asterisk

ein. Es müsste dann eine Meldung wie “Status for the jail: asterisk” erscheinen und weitere Informationen über das, was geblockt wird und das diese Daten in /var/log/asterisk/messages aufgezeichnet werden. Das ist immerhin ein Anfang, auch wenn bis jetzt noch keine IP-Adressen geblockt werden können. Iptables weiß nämlich noch nichts davon und kann die Firewall von Raspian nicht veranlassen die störenden IPs zu sperren.

Fail2Ban hat den Jail namens Asterisk gefunden und hat schon eine IP-Adresse geloggt. Allerdings können noch weitere Konfigurationen notwendig sein, damit Iptables seine Aufgabe erfüllen kann.

Iptables installieren und mit Fail2Ban und Asterisk verknüpfen: Wir müssen nun kontrollieren, ob Iptables überhaupt installiert ist.

sudo apt-get install iptables

Bei mir war iptables 1.8.2-4 schon installiert, was ich durch den obigen Befehl erfuhr. Nach welchen Regeln iptables vorgehen soll, erfahren wir mit dem Befehl

iptables -L

Mit

iptables -F

können wir alle Einträge löschen, falls wir mal Mist gebaut haben. Dieser Befehl ist gemein, da nach seiner Ausführung Fail2Ban nicht mehr funktioniert. Nach dem kompletten Neustart von Raspbian war aber wieder alles in Ordnung.

Damit iptables reagiert und unerwünschte IP-Adressen blockt, habe ich in der Datei

/etc/fail2ban/jail.conf

folgenden Eintrag ergänzt, den ich hier gefunden habe. Diesen Eintrag also nur ergänzen und den bereits vorhandenen Inhalt nicht verändern. Wir tragen also zusätzlich in /etc/fail2ban/jail.conf folgendes ein:

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
# sendmail-whois[name=ASTERISK, dest=me@shifteight.org,
# sender=fail2ban@shifteight.org]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 7200

#  Ich habe hier eine relativ kurze Bantime von 2 Stunden
# (7200 Sekunden) gewaehlt. Sollte jemand versehentlich
# beim Anlegen seiner SIP-Konfiguration sich beim Passwort
# vertippen, ist seine IP nur für zwei Stunde gesperrt.

[DEFAULT]

# Multiple addresses can be specified,
# separated by a space.

ignoreip = 127.0.0.1 10.1.1.1 94.254.10.244 192.168.1.111

# destemail = youraddress@shifteight.org

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
# sendmail-whois[name=ASTERISK, dest=me@shifteight.org,
# sender=fail2ban@shifteight.org]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 7200

#  Ich habe hier eine relativ kurze Bantime von 2 Stunden
# (2700 Sekunden) gewaehlt. Sollte jemand versehentlich
# beim Anlegen seiner SIP-Konfiguration sich beim Passwort
# vertippen, ist seine IP nur für zwei Stunde gesperrt.

[DEFAULT]

# Multiple addresses can be specified,
# separated by a space.

ignoreip = 127.0.0.1 10.1.1.1 94.254.10.244 192.168.1.111

# destemail = youraddress@shifteight.org
# Für eine E-Mail-Benachrichtigung muss noch Postfix installiert sein,
# was mir zu aufwändig erschien.

Dadurch erst konnte die Firewall des Raspberry eingreifen und Asterisk schützen.

Fail2Ban war fleißig und in iptables haben sich schon Einträge angesammelt.

Eigene IP-Adressen ignorieren lassen: Unter ignoreip sind die eigenen IPs eingetragen, damit sich das eigene System nicht selbst aussperrt. Da geht schneller als man denkt. An einer alten FritzBox bei mir im Keller, die nur noch als ATA mit einer statischen IP dient, waren zwei analoge Telefone angeschlossen. Ich hatte das Passwort eines dieser Telefone geändert und prompt war diese FritzBox nicht mehr erreichbar, da sogleich die vergeblichen Versuche von Asterisk sich mit einem falschen Passwort verbinden zu wollen Fail2Ban reagieren ließ und die statische IP dieser FritzBox sperrte. Nach der  Änderung der statischen IP war die Welt wieder in Ordnung.

Man könnte noch eine E-Mail-Benachrichtigung installieren, worauf ich der Einfachheit wegen verzichtet habe.

Ein paar wichtige Befehle für Iptables und Fail2Ban:

Die Bezeichnung <IP-Adresse> einschließlich der spitzen Klammern  ist durch die IP zu ersetzen.

Welche IPs hat Fail2Ban gesperrt?
sudo fail2ban-client status asterisk

Eine IP entsperren:
fail2ban-client unban <IP-Adresse>

Fail2Ban neu starten nach Änderungen seiner Konfiguration:
sudo fail2ban-client restart

Liste der in Iptables gesperrten IP-Adressen:
iptables -L

IP-Adresse in Iptables hinzufügen:
iptables -A INPUT -s <IP-Adresse> -j DROP

IP-Adresse in Iptables hinzufügen:
iptables -A INPUT -s <IP-Adresse> -j DROP

IP-Adresse in Iptables hinzufügen:
iptables -D INPUT -s <IP-Adresse> -j DROP

Noch mehr Sicherheit mit der kostenlosen VoIP Blacklist  VoIPBL (Nachtrag vom 12. März 2021): Auf http://voipbl.org/ ist eine Anleitung für Asterisk beschrieben, die den Zugriff auf die kostenlose VoIP-Blacklist VoIPBL ermöglicht. Diese Blacklist enthält über 20.000 IP-Adressen. Voraussetzung ist, dass Fail2Ban und Iptables bereits installiert sind und funktionieren. Ich selbst habe es ausprobiert und es funktioniert.

Nachtrag vom 26.5.2021: Allerdings musste ich leider feststellen, dass mit VoIPBL mein Rasbberry nach einem Stromausfall oder nach einem ordnungsgemäßen Herunterfahren nicht mehr richtig hochfuhr und im Notfall-Modus landetete. Eine Neuinstallation des gesamten Systems war notwendig, weshalb ich VoIPBL vorerst nicht mehr verwende. Ich verwende die Raspian-Version vom 13.2.20. Ohne VoIPBL gab es durch erzwungene Stromausfälle nie Probleme.

Unter https://elektronikbasteln.pl7.de/installation-der-voip-blacklist-voipbl-fuer-asterisk-auf-einem-raspberry-pi befindet sich die ausführliche Beschreibung der Installation.

Im Prinzip müssen laut dieser Anleitung nur ein 3 neue Dateien eingefügt werden:

/etc/cron.d/voipbl
/usr/local/bin/voipbl.sh
/etc/fail2ban/action.d/voipbl.conf

Die bereits vorhandene jail.conf muss laut der Beschreibung um eine Zeile erweitert werden und die neue voipbl.sh muss mit dem Befehl “chmod 700 /usr/local/bin/voipbl.sh” ausführbar gemacht werden. Zum Schluss muss mit dem Befehl “fail2ban-client restart” und/oder “fail2ban-server restart” Fail2Ban neu gestartet werden. Das wäre alles. Nach ein paar Stunden kommt dann die sehr sehr lange Blacklist, die man sich mit “iptables -L” anschauen kann. Der Download kann einige Stunden dauern und belastete die CPU zeitweise mit 14%. Also kein Problem für den kleinen Raspberry Pi 3 B+. Die Liste wird alle 4 Stunden aktualisert. Mit VoIPBL war dann in der Asterisk-Console selbst mit “core set verbose 10” Ruhe.

Kaum zu glauben, aber mit den meisten älteren FritzBoxen lassen sich auch Wählscheibentelefone wie dieses hier aus den 1940er Jahren betreiben, das dann mit Hilfe einer FritzBox mit dem Asterisk-Server auf dem Raspbian kommunizieren kann. Es entsteht eine Symbiose zwischen alter und moderner Technik.

Dauerbetrieb: Für den regulären Betrieb ist am Raspberry nur das Netzteil und das Netzwerkkabel angeschlossen. Nach einem Stromausfall fährt der Raspberry mit Asterisk und Fail2Ban wieder selbständig hoch. Dank Fail2Ban ist ein Eingreifen fast nicht mehr notwendig. Das Programm Logrotate sorgt in der Voreinstellung automatisch dafür, dass die Log-Dateien nicht überlaufen und regelmäßig gelöscht werden. Der Raspberry verbraucht nur etwa 3 Watt, was die Stromrechnung in Grenzen hält.

Nach den Aufräumarbeiten auf meinem Schreibtisch hat der Raspberry eine schützende Sandwich-Verpackung erhalten und erfüllt hinter dem Monitor versteckt seinen Dienst als Asterisk-SIP-Server.

SSH: Der Raspberry lässt sich über SSH erreichen. In der Voreinstellung von Raspbian ist SSH abgeschaltet. SSH lässt über die graphische Oberfläche aktivieren:

Aktivieren von SSH in Raspbian.

Mit dem Programm Putty z.B. lässt sich dann der Raspberry von einem anderen Rechner fernbedienen. Man kommt als root allerdings nicht hinein. Mit pi und dem Kennwort ging es und dann kommt man sich mit “sudo su” also root anmelden.

Erreichen der Asterisk-Konsole mit SSH.
Putty auf meinem Windows-Rechner für die Fernbedienung des Raspberry.

Putty gibt es hier zum Download.

Datensicherung: SD-Karten halten nicht ewig. Kopierfehler sind möglich. Die SD-Karten können für die Datensicherung mit dem dem Win32 Disk Imager geklont werden (Download hier). Beschreibung der Datensicherung hier oder hier. Die Datansicherung als img-Datei wird so groß wie die SD-Karte selbst. Für Linux gibt es zahlreiche Anleitung für die Verkleinerung des Image.

Fernwartung mit AnyDesk für den Raspberry Pi: Das Programm lässt sich unter

https://anydesk.com/de/downloads/raspberry-pi

herunterladen. Es ist ein Debian-Paket, das wir aus dem Web-Browser des Raspian herunterladen. Wenn man nicht mehr weiter weiß, kann ein hilfreicher Mitmensch den Desktop des Raspberry mit seiner Maus und seiner Tastatur aus der Ferne bedienen.

CPU-Auslastung des Raspberry Pi 3 B+: Ohne Gespräche belastet Asterisk die CPU mit 1 bis 2%, mit einem Gespräch 3,6%, mit 5 Gesprächen gleichzeitig 14,5%. Fail2Ban benötigt 0,3%. Die restlichen Dienste erfordern etwa 2%. Der Raspberry ist also noch unterfordert. Der kleine SIP-Server könnte also überschlägig 30 Gespräche gleichzeitig bedienen, was nach Erfahrungswerten von Nebenstellenanlagen einer Teilnehmerzahl von 300 Anschlüssen entsprechen würde, da nie alle gleichzeitig telefonieren werden, wenn man von einem Call-Center absieht. Dafür müssten 300 Accounts in der Sip.conf stehen, die dann als Text-Datei etwa 200 bis 300 kByte groß wäre. Ein Datenbanksystem ist demnach nicht notwendig. Die CPU-Auslastung lässt sich unter Linux mit dem Befehl “top” ermitteln.

Benötigte Bandbreite: Ein Gespräch benötigt in eine Richtung etwa 120 kbit/sec bis 150 kbit/sec. Bei 30 Gesprächen sind dies also maximal 4500 kbit/s. Das entspricht 4,5 Megabit/sec. Mit der Upload-Geschwindigkeit vieler ADSL-Internetanschlüsse könnte es im Extremfall eng werden. In der Praxis kommen aber im Hobby-Betrieb, in der Familie und bei Kleinbetrieben selten mehr als 3 Gespräche gleichzeitig vor. Für 3 Gespräche reicht dann selbst ein sehr langsamer Upload von 0,5 Megabit/sec gerade mal so. Für den Raspberry, das LAN-Kabel und einem gewöhnlichen Internet-Anschluss ist der Betrieb eines kleinen SIP-Servers also kein Belastungsproblem.

Energiebedarf und eine etwas amüsante Kostenrechnung: Eine alte Nebenstellenanlage in Relais-Technik mit Hebdrehwählern hatte für 300 Teilnehmer einen ganzen Raum benötigt. Hinzu käme noch die umfangreiche Verlegung von analogen Telefonkabeln. Die Mechanik erforderte regelmäßige Wartungsarbeiten.

Jetzt erledigt dies ein kleiner Kasten in der Größe einer Zigarettenschachtel bei einer Leistungsaufnahme von 3 bis 5 Watt, der mit einem lahmen 10 Mbit/sec Ethernet-Anschluss auskommt. Bei 30 Cent/kWh und 4 Watt Leistungsaufnahme würde der Betrieb pro Jahr etwa 10 Euro kosten (Für mich in Schweden 5 Euro, streng genommen noch weniger, da der zusätzliche Stromverbrauch 7 Monate pro Jahr den Heizungsbedarf um 20 kWh pro Jahr mindert, was etwa 1,5 Euro bei 7 Cent / pro kWh Heizkosten entspricht. Also liegen die Energiekosten eigentlich bei nur 5 – 1,5 Euro = 3,5 Euro pro Jahr, wenn man es bis zur Sinnlosigkeit überspitzt sieht ).

Legen wir noch einmal für die jährliche Abschreibung des Raspberry Pi etwa 5 Euro drauf, denn nach spätestens 10 Jahren wird eine Neuanschaffung fällig, für die Rücklagen gebildet werden müssen, kommen wir in Schweden auf unter 10 Euro / Jahr an Kosten, in Deutschland etwas mehr. Wohlgemerkt sind die Kosten für eine Wiederbeschaffung eines gleichwertigen Produkts schwer abzuschätzen. Einerseits ist die Inflationsrate für die kommenden Jahre unbekannt. Andererseits ist mit einem weiteren Preisverfall für Elektronikprodukte zu rechnen. Hinzu kommt eine unklare weltwirtschaftliche Entwicklung, die Vorhersagen hinsichtlich der Preisentwicklung erschweren. Der Betrieb eines eigenen SIP-Servers ist trotz aller Unwägbarkeiten dennoch ein sehr kostengünstiges Hobby mit einem überschaubaren finanziellen Wagnis, das sich jeder leisten kann, da das restliche Equipment meistens bereits vorhanden ist. Der Betrieb des SIP-Servers ist auf jeden Fall für die nächsten Jahre durch die Bildung von Rücklagen gesichert.

Fazit: Früher war das Telefonieren teuer und es hieß “Fasse dich kurz”. Heute gibt es die Flatrate. Mit einem eigenen Asterisk-Server liegen die Kosten praktisch bei Null, was niemanden mehr überrascht. Nur an der Telefontechnik Interessierte führen Gespräche über selbst gestrickte Telefonserver. Es ist also nicht viel anders als beim Amateurfunk und deshalb sind die meisten meiner Teilnehmer Funkamateure, was mich nicht überrascht. Einige hatten früher auch beruflich mit Fernmeldetechnik zu tun. Nur ist der Aufwand viel geringer und die Übertragungsqualität ist viel besser als im Amateurfunk. Das Antennenproblem entfällt. Mein Asterisk-Server bietet für Funkamateure sogar einen Zugang zu einem 70cm-Amateurfunk-Relais. Den braucht eigentlich niemand. Aber es geht ja in der Hauptsache um das technische Experiment. Der besondere Charme dabei liegt darin, dass sich auch alte Wählscheibentelefone betreiben lassen und eine Symbiose zwischen alter und neuer Technik bilden.

Auf jeden Fall musste ich bei dem ganzen Projekt feststellen, dass man sich wohl kaum ein Hobby aussuchen kann, das ausgefallener ist als dieses. Jeder muss bekanntlich seinen eigenen Weg gehen.

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter