Asterisk und Fail2Ban auf dem Raspberry Pi unter Raspbian installieren

8. Oktober 2020

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. 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.

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.

Card Reader mit Adapterkarte für Micro SD. Sollte es Probleme beim Kopieren geben, einen anderen Card Reader verwenden.

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 Window 10) auf die Micro-SD-Karte kopiert werden. Dies erledigt aseit 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.

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 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 sollten wir uns als root anmelden, um vollen Zugriff zu erhalten, damit wir Konfigurations-Dateien mit dem Texteditor verändern können.

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.

Und ab hier geht es an das Eingemachte: Aber keine Bange. Sollten wir unser Raspbian völlig verhunzen, müssen wir es nur wieder neu aufspielen. Übung macht den Meister. Übrigens besteht die Möglichkeit eine Sicherungskopie anzulegen

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.2.4.4 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.254 8.8.8.8

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

 

Als zweiter Domain-Server 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.

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 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. 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. In ihrer stehen sehr viele auskommentierte Hinweise. Auf verdacht trug ich folgendes in die pjsip.conf ein:

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0

 

Ob dies tatsächlich notwendig ist, weiß ich nicht. In einer weiteren Version habe ich auf diesen Eintrag verzichtet und die vorhandende pjsip.conf nicht verändert. Asterisk kommt offenbar auch mit älteren Konfigurationen klar, die die pjsip.conf noch nicht kennen. Bevor ich die anderen Konfigurationsdateien ersetzte, habe ich die bereits vorhandenen unbenannt, damit sie nicht überschrieben werden. 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
extensions.conf
rtp.conf
features.conf

Da 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 ersichtlich. 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. 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.

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 Dietansicherung 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.