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
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.
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%.
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.
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.
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.
Tut mir leid wegen der schlechten Screenshots. Anders es ging leider in diesem Fall nicht anders.
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.
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
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.
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.
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:
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.
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.
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
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.
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.
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.
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.
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:
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.
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.
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 – |