SIP-Scanner blockieren, die selbst Fail2Ban nicht entdecken kann

17. Januar 2022

Wenn im Asterisk-CLI Meldungen wie “Timeout on … on non-critical invite transaction.” als “WARNING” auftreten, handelt es sich meistens um einen Angriff durch einen SIP-Scanner. Diese sind für Betreiber von Asterisk-Servern eine Gefahr, da Fail2Ban oft nicht in der Lage ist diese unerwünschten Eindringlinge zu blockieren. Manchmal treten die Attacken der SIP-Scanner als DoS-Angriffe (DoS = Denial of Service) massenhaft auf und können sogar den Betrieb eines Asterisk-Servers empfindlich stören. Nachfolgend eine Lösung ohne den Einsatz nicht ausreichend getesteter Skripte, die den Asterisk-Server eventuell zum Abstürzen bringen könnten.

Nach meiner langjährigen Beobachtung von Hacker-Angriffen auf ungeschützte SIP-Server möchte ich nach meiner Erfahrung eine teilweise Entwarnung aussprechen. Wer als Hobby einen Asterisk-Server betreibt, der keinen Zugang zu kostenpflichtigen Accounts betreibt, braucht sich nicht wegen eines möglichen finanziellen Schadens um den Schlaf bringen. Wer dennoch auf seinem SIP-Server Zugänge zu kostenpflichtigen Nummern betreibt, sollte auf eine automatische Aufladung der Konten verzichten, damit der maximale finanzielle  Schaden auf vielleicht 20 oder 30 Euro begrenzt ist. Bei der Verwendung von starken Passwörtern ist selbst dieses Risiko minimal.

Die meisten SIP-Provider-Anbieter ermöglichen den Verzicht auf eine automatische Aufladung, wie das bei Sipgate oder Einfach-Voip (Nextmobile) der Fall ist. Sipgate zum Beispiel sperrt das Telefonieren für ausgehende Gespräche, wenn es einen Hackerangriff feststellt. Man muss dann den Support von Sipgatge für eine Freischaltung kontaktieren. Einfach-Voip (Nexxtmobile) informiert automatisch per E-Mail über ungewöhnliche Vorgänge, sobald eine Nummer im falschen Format gewählt wurde. Außerdem können durch das Pattern Matching in den Wahlregeln von  Asterisk zusätzliche geheime Vorwahlen eingebaut werden. Sie stellen nach einem erfolgreichen Erraten eines einfachen Passworts die nächste Hürde dar. Zudem lassen sich Auslandsgespräche sperren. Entweder erfolgt dies durch die Einstellungen beim SIP-Provider oder durch die Wahlregeln des eigenen SIP-Servers. Die maximale Dauer eine Gesprächs lässt sich begrenzen.

Auch habe ich noch nie beobachtet, dass versucht worden ist SIP-Accounts zu hacken, die außerhalb des eigenen LAN angemeldet sind, da den Hackern die öffentlichen IPs dieser externen  SIP-Accounts unbekannt sind. Zudem sind diese IPs in der Regel dynamisch. Sie ändern sich also in unregelmäßigen Abständen. Wer also gerne über einen aus Liebhaberei oder Idealismus betriebenen Asterisk-Server telefoniert, braucht sich überhaupt keine Sorgen machen. Wenn jemand überhaupt zu Schaden kommt, dann ist es immer nur der Betreiber des Asterisk- oder SIP-Servers. Es sind immer nur solche Nebenstellen-Nummern, die im eigenen LAN angemeldet sind, Angriffsversuchen ausgesetzt, da dem Hacker in der Regel nur die öffentliche IP des angegriffenen SIP-Servers bekannt ist. Sollte dennoch der theoretisch unwahrscheinliche Fall eintreten und es gelingen einen extern angemeldeten Account zu knacken und zu übernehmen, gelingt das Telefonieren in die öffentlichen Netze nur über solche Accounts, die im SIP-Server eingetragen sind.

Auch wurden noch nie IAX2-Accounts angegriffen, da sich SIP-Scanner nur auf das SIP-Protokoll spezialisiert haben, was der Name bereits erklärt. Mir sind nach langer Suche im Internet auch keine frei verfügbaren Scanner bekannt, die das IAX2-Protokoll behandeln können. Wahrscheinlich beschäftigen sich damit nur Geheimdienste. Die SIP-Server sollten deshalb untereinander nur über IAX2 kommunizieren und zudem Vorwahlen verwenden, um ganz sicher zu gehen.

SIP-Server, die keinen Zugang zu kostenpflichtigen Telefonanbietern besitzen, sollten sich dennoch vor SIP-Scannern schützen, da sie mit ihren DOS-Attacken sehr viele Anfragen pro Sekunde ausführen, welche die CPU-Auslastung des Servers überlasten können, wodurch Telefonate nicht mehr möglich sind. Im schlimmsten Fall stürzt der SIP-Server ab und muss von Hand neu gestartet werden. Offenbar haben einige infantile Hacker aus reiner Lust an der Zerstörung Genugtuung daran andere zu ärgern oder sie wissen nicht, was sie tun.

Die  nachfolgenden Angaben  beziehen sich auf Erfahrungen mit Asterisk 16.2.1, Iptables 1.8.2 und Fail2Ban 0.10.2 unter Raspbian GNU/Linux 10 (buster) vom  Februar 2020.  Iptables und Fail2Ban sind selbstverständlich installiert und aktiv. Alle CLI-Befehle sind als “root” auszuführen (eventuell die Befehle mit “sudo” einleiten). Die aktuelle Raspbian-Version können wir mit dem CLI-Befehl “cat /etc/os-release” erfahren.

Neben dem Einsatz von File2Ban reichen entsprechende Einträge in Iptables, der Firewall von Linux aus, um sich wirksam gegen SIP-Scanner zu schützen.

Wichtige Maßnahmen zum Schutz von Asterisk-SIP-Servern:
1. Sicherheitsrelevante Einträge in der sip.conf unter [general]
2. Starke Passwörter der SIP-Accounts
3. Geheime PIN-Nummern für den Zugang in das öffentliche Netz
4. Fail2Ban zum Schutz gegen die wiederholte Eingabe falscher Passwörter
5. Eine Blacklist der Useragents häufiger SIP-Scanner in Iptables
6. Anweisungen in Iptables, die eine DoS-Attacke unterbinden

Daneben gibt es noch weitere Maßnahmen und kommerzielle Produkte, die leider kostenpflichtig sind, da ihre Pflege und Aktualisierung Zeit und Geld kosten. Das Internet ist voll mit Vorschlägen seinen SIP-Server sicherer zu machen.

SIP-Scanner: Die Software der SIP-Scanner besteht aus mehreren Tools, um SIP-Server zu entdecken, auszuspionieren, abzuhören, mit ihnen auf Kosten anderer zu telefonieren oder die Passwörter zu knacken. Viele SIP-Scanner sind kostenlos und dienen angeblich zum Testen der Sicherheit des eigenen SIP-Servers, obwohl sie für strafbare Handlungen verwendet werden können.

Trotz Fail2Ban geschah ein massiver Angriff fast im Sekundentakt durch einen SIP-Scanner in den frühen Morgenstunden (für die Großansicht auf das Bild klicken). Die IP des Angreifers konnte ausfindig gemacht werden. Sein ganzer Bereich wurde gesperrt.

Es ist davon abzuraten den für das SIP-Protokoll üblichen Port 5060 einzusetzen, damit SIP-Scanner kein leichtes Spiel haben. Der Port 5060 ist auch deshalb für den eigenen SIP-Server ungeeignet, wenn er sich hinter einem Router befindet und dieser Router VoIP beherrscht, wie das bei  modernen FritzBoxen immer der Fall ist. Oft ist der Port 5060 bereits  durch den Router vergeben.

Nicht selten knackt der SIP-Scanner durch Probieren das schwache Passwort einer typischen Nebenstellen-Nummer. Über diese gekaperte Nebenstellennummer versucht der SIP-Scanner dann eine gebührenpflichtige Nummer anzuwählen. Dabei setzt er oft die Ziffer “0” an den Anfang der Nummer, weil sich mit der Null oft das Amt holen lässt. Das bedeutet, dass auf diese Weise gebührenpflichtige Telefonate in das öffentliche Netz eingeleitet werden. Dadurch kann großer finanzieller Schaden entstehen. Besser als die “0” ist es einen geheimen mehrstelligen Code einzusetzen. Dies gelingt mit dem Pattern Matching für die Wahregeln in der extensions.conf von Asterisk.  Es ist unwahrscheinlich, dass starke Passwörter der Nebenstellenanlagen-Nummern geknackt werden. In einem weiteren Schritt ist es noch unwahrscheinlicher, dass phantasievolle und mehrstellige interne Vorwahlen geknackt werden.

Ein Sip-Scanner lässt sich durch seinen Useragent identifizieren. Jedes Endgerät (Hardware oder Softphone) besitzt einen Useragent. Sip-Scanner täuschen vor Endgeräte zu sein. Den Useragent erfahren wir zum Beispiel mit dem Asterisk-CLI-Befehl “sip show peer 12345” für das Gerät mit der Telefonnummer 12345.

Fail2Ban: Fail2Ban ist auf Asterisk-Servern, die Zugang zum Internet besitzen, aus Sicherheitsgründen zwingend notwendig. Die Installation und nicht ganz triviale Konfiguration von Fail2Ban ist unter

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

beschrieben. Fail2Ban sperrt die IP-Adressen von SIP-Accounts, wenn deren Passwörter mehrfach falsch abgefragt wurden. Wie oft ein Passwort falsch abgefragt werden darf und wie lange die IP-Adressen gesperrt werden sollen, lässt sich konfigurieren. Fail2Ban speichert die gesperrten IP-Adressen in Iptables. Dies ist die Firewall unter Linux. Sie ist meistens schon installiert. Ob Iptables installiert ist, findet man im CLI mit “iptables” heraus und man erfährt dann auch gleich die Version.

Ein Eindringling hat 3 Mal ein falsches Passwort eingegeben (Für Großansicht auf das Bild klicken). Die IP des angegriffenen SIP-Servers wurde aus Sicherheitsgründen unkenntlich gemacht.
Fail2Ban hat den Vorgang erkannt und die IP 135.181.131.73 des Verursachers gesperrt.

Sip.conf sicherer machen: Unter [general] der sip.conf sollten folgende Einträge vorhanden sein:

; https://www.voipmechanic.com/securing-asterisk.htm
; https://www.elastix.org/community/threads/asterisk-sip-conf-in-deep.120075/
; http://www.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-APP-A-SECT-2.html
; https://community.asterisk.org/t/alwaysauthreject/67458sip
; https://www.voip-info.org/asterisk-security/
;
alwaysauthreject=yes ; ganz wichtig
allowguest=no
allowoverlap=no
allowtransfer=no
allowsubscribe=no
defaultexpiry=300

; Selbstverständlich immer lange und sichere Passwörter für die SIP-Accounts verwenden
; https://www.passwort-generator.eu/de/
; Lange Telefonnummern für die Nebenstellen verwenden. Keine leicht merkbaren Nummern verwenden.
; Geheime mehrstellige Vorwahlen erschweren das Telefonieren in die öffentlichen Netze,
; sollte dennoch ein Passwort geknackt worden sein.

Die nachfolgenden zusätzlichen Änderungen im Mai 2022 sorgten dafür, dass SIP-Scanner mindestens zwei Wochen nach diesen Änderungen immer noch nicht auftraten:

; Nur für Asterisk-Betreiber interessant!
; Auszug aus der sip.conf. In dieser ist auch der Account für das SessionTalk konfiguriert.
;
[general]
canreinvite=no          ; hatte in [general] gefehlt
qualify=yes             ; empfehlenswert
nat=force_rport,comedia ; hieß früher nat=yes, hier stand vorher nur nat=comedia
                        ; https://stackoverflow.com/questions/4743298/nat-configuration-for-sipasterisk

Mein SIP-Server ist hinter einem NAT-Router geschaltet. Ob es an den geänderten NAT-Einstellungen lag, kann ich mir nicht erklären. Auf jeden Fall sollte man es mit diesen Einstellungen probieren.

Was tun während einer konkreten DOS-Attacke durch einen SIP-Scanner?  Weiter unten im Text habe ich eine Konfiguration für Iptables vorgestellt, die DOS-Attacken automatisch abbrechen kann. Sollte es dennoch zur einer langanhaltenden DOS-Attacke kommen, ist folgendes zu unternehmen: Im Asterisk-CLI ist der Verbose-Level immer auf mindestens 3 einzustellen, was mit

core set verbose 3

geschieht. Dies erreicht man auch durch das Starten der Asterisk-Konsole mit

asterisk -rvvv“.

Die Anzahl der “v” ergibt den Verbose-Level. Wenn im Asterisk-CLI als “WARNING” Meldungen wie

Timeout on … on non-critical invite transaction.

erscheinen, handelt es sich in der Regel um einen Angriff durch einen SIP-Scanner. Nun gilt es während eines Angriffes die IP des Angreifers herauszufinden. Dazu ist im Asterisk-CLI der Debugging-Modus mit

sip set debug on

einzuschalten.  Mit

sip set debug off

lässt er sich wieder abschalten. Das Verfahren ist allerdings umständlich. Hat man auf diese Weise die IP oder die IPs herausgefunden, kann man mit folgenden Befehlen Iptables veranlassen diese IPs zu sperren:

iptables -A INPUT -s 92.204.184.94 -j DROP
iptables -A INPUT -s 92.204.172.102 -j DROP
iptables -A INPUT -s 193.46.255.40 -j DROP
iptables -A INPUT -s 52.235.42.96 -j DROP
iptables -A INPUT -s 20.36.8.51 -j DROP
iptables -A INPUT -s 141.98.10.31 -j DROP
iptables -A INPUT -s 104.149.132.74 -j DROP
iptables -A INPUT -s 104.149.133.206 -j DROP
iptables -A INPUT -s 104.149.138.66 -j DROP

Die angegebenen IPs sind realistisch. Ich habe sie Anfang des Jahres 2022 entdeckt. Ich habe sie für mindestens 10 Tage gesperrt. Möchte man einen ganzen Bereich sperren, geht man wie folgt vor:

iptables -A INPUT -m iprange --src-range 87.119.220.200-87.119.220.203 -j DROP
iptables -A INPUT -m iprange --src-range 45.134.144.0-45.134.144.255 -j DROP
iptables -A INPUT -m iprange --src-range 216.244.64.0-216.244.95.255 -j DROP

; Warum sich IP-Adressen von MicroSoft für meinen kleinen Asterisk-Server
; interessieren, ist mir ein Rätsel. Ich habe sie gesperrt:
iptables -A INPUT -m iprange --src-range 20.33.0.0-20.128.255.255 -j DROP
iptables -A INPUT -m iprange --src-range 13.64.0.0-13.107.255.255 -j DROP

Auch diese Beispiele sind realistisch. Eine Abfrage mit zum Beispiel https://www.whois.com/whois/ gibt Auskunft, welche Bereiche sinnvollerweise zu sperren sind.

Möchte man zum Beispiel die Sperrung der IP 84.155.166.9 aufheben, kann man wie folgt vorgehen:

; Sperren einer einzigen IP-Adresse
iptables -D INPUT -s 84.155.166.9 -j DROP

; Aufhebung der Sperrung eines Bereichs:
iptables -D INPUT -m iprange --src-range 45.134.144.0-45.134.144.255 -j DROP

Hat Fail2Ban zugeschlagen und eine IP gesperrt, lässt sich die Sperrung mit

fail2ban-client unban 84.155.166.9
; danach ist es der Neustart von Fail2Ban eventuell notwendig
fail2ban-client restart

; zur Kontrolle von fail2ban
fail2ban-client status asterisk

wieder aufheben. Die angegebene IP ist nur ein Beispiel. Meistens ist dies notwendig, wenn ein Asterisk-Teilnehmer mehrfach das Passwort seines SIP-Accounts falsch eingetippt hat.

Welche Einträge in Iptables bzw. durch Fail2Ban existieren, ist mit folgenden CLI-Befehlen festzustellen.

iptables -L -n -v
iptables -L
fail2ban-client status asterisk
Fail2Ban schlägt immer dann zu, wenn Passwörter mehrfach falsch angegeben werden. Die betroffenen IPs sind dann für eine gewisse Zeit oder für immer gesperrt.

SIP-Scanner sperren: Folgende CLI-Befehle veranlassen Iptables die allermeisten SIP-Scanner zu sperren. Dabei geht die Sperrung nach dem angegebenen “User Agent” des SIP-Scanners vor.  Man kann die Liste Zeile für Zeile herauskopieren und in das CLI kopieren und dann ausführen:

iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sundayddr" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipsak" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipvicious" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "iWar" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sip-scan" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipcli" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "ppslip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "eyeBeam" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sip:nm2@nm2" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sip:n@n" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sip:nm@nm" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxSIPUserAgent/3.1" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxSIPUserAgent/3.5" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipcli/v1.8" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipcli/v2.2" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipcli/v" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "CSipSimple" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "SIVuS" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Gulp" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipv" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "smap" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-request" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "siparmyknife" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Test Agent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "TestAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "User-Agent: sipcli" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "User-Agent: Nmap NSE" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "From: sipp <sip:" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "From: sipp <sip:" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "User-Agent: VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PortSip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "ppIsip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "pplsip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sip:carol@chicago.com" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "sipfurious" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "FPBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "MGKsip%20release%201110" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Cisco" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20IP%20Phone%201120E" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Linksys-SPA942" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "ims" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PhonerLite/2.95" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20one-X%20Deskphone" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "erafsadfasfa" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Cisco-SIPGateway/IOS-12.x" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Cisco-SIPGateway" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "FPBX-2.11.0(11.8.1)" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "A2billingPBXooooPoPcisco" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Linksys/SPA942" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "AGFEO%20SIP%20V3.00.15%20b%20%20" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Z%203.14.38765%20rv2.8.3" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "0000000000" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Zed-1.5" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "OpenEndPBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "TEST" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Mm-21.3" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "eyeBeam%20release%203007n%20stamp%2017816" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "-" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20J129%20IP%20Phone" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "cisco" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Linksys-SPA942" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Alcatel-Lucent%205060%20MGC-89.3.0.7.0.4" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "FreeSWITCH" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Z%203.14.38765%20rv2.8.3" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "SylkServer-5.2.0" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "FOXOA2billingPBXooooPoPcisco" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Asterisk%20PBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20Communicator%20for%20iPhone" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "DX800A/41.175.00.000.000" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Ozeki%20VoIP%20SIP%20SDK%20v1.3.6" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Sphairon-SL5501-4.38.2.04.01" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "3CXPhoneSystem%2015.0.59950.0%20(59299)" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Yealink%20SIP-T21P_E2%2052.80.0.130" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PolycomVVX-VVX_300-UA/4.1.6.4835%20v11.0.0" --algo bm

Quellen:
https://www.kwancro.com/honeypotdata/  - Wichtig für Aktualisierungen! Many Thanks to Ivan Kwabena Nyarko
https://github.com/trick77/docksterisk/blob/master/iptables.sh
SIP Attack: Friendly-Scanner
https://docs.fusionpbx.com/en/latest/firewall/iptables.html https://dlrsp.org/en/blog/section/fail2ban/ https://askto.pro/question/how-to-secure-asterisk-server-how-can-i-close-this-vulnerability-without-resorting-to-vpn-and-fail2ban http://blog.ls20.com/securing-your-asterisk-voip-server-with-iptables/

Updates führe ich regelmäßig mit Hilfe der Seite https://www.kwancro.com/honeypotdata/ durch. Auf dieser Seite die Registerkarte “User Agent Used” auswählen.

Wem das zeilenweise Kopieren und Ausführen zu umständlich ist, kann mit Hilfe von Iptables-persistent die entsprechende Konfigurationsdatei editieren. Die Installation von Iptables-persistent ist weiter unten im Text beschrieben.

Seit dem Einsatz dieser Liste erscheinen im Asterisk-CLI fast keine Warnhinweise mehr, bei denen es sich zudem nur um erfolglose Angriffe handelt. Angriffe geschehen nicht selten nachts, wenn die Administratoren sich im Tiefschlaf befinden.

In Iptables gespeicherte Einträge gesperrter SIP-Scanner (für eine Großansicht auf das Bild klicken).

Die Firewall-Regeln von Iptables unter Raspbian permanent speichern:  Die nachfolgende Methode habe ich mit der Raspbian-Version vom Februar 2020 (Raspbian GNU/Linux 10 (buster))  getestet. Dazu installieren wir im Root-Modus (in den wir mit “sudo su” gelangen) mit

apt-get install iptables-persistent

das Programm Iptables-persistent, was es leichter macht die Settings (Firewall-Regeln) von Iptables zu sichern. Die Firewall-Regeln werden in den beiden reinen Text-Dateien

/etc/iptables/rules.v4 
/etc/iptables/rules.v6

abgespeichert. Während der Installation von Iptables-persistent erscheint in einem blauen Kasten die Abfrage, ob wir die derzeitigen Firewall-Regeln abspeichern wollen (siehe auch hier). Dies bejahen wir für rules.v4 und rules.v6.

Die aktuellen Firewall-Regeln können wir jederzeit mit

netfilter-persistent save

sichern. Die gesicherten Firewall-Regeln lassen sich mit

netfilter-persistent reload

wieder auf Iptables zurückspielen.

CLI beim Ausführen von “netfilter-persistent save” und “netfilter-persistent reload”.

Bezüglich der rules.v4 können wir dies anschließend mit

iptables -L 

kontrollieren, um die aktiven Firewall-Regeln zu sehen. Die Firewall-Regeln in der rules.v4 und rules.v6 lassen sich auch mit dem Texteditor von Hand editieren. Allerdings ist dabei Vorsicht geboten. Selbstverständlich kann man noch viel mehr mit Iptables-persistent vornehmen. Nachfolgend ein Skript in Iptables, das vor DOS-Angriffen schützt.

Protecting a vPBX from DOS attacks: Das nachfolgende Script für Iptables von Stansislav Sinyagin auf https://txlab.wordpress.com/2013/06/29/protecting-a-vpbx-from-dos-attacks/ verhindert DOS-Attacken. Ich habe es nur für ipv4 ausprobiert. Es muss iptables-persistent installiert sein. Nach der Sicherung der Iptables-Konfiguration mit “netfilter-persistent save” sind folgende mit “iptables” beginnende Befehle Zeile für Zeile zu kopieren und und im CLI auszuführen:

Folgende Iptables-Befehle für ipv4 eingeben:

iptables -N dos-filter-sip-external
iptables -A INPUT -p udp -m udp --dport 5060 -j dos-filter-sip-external
iptables -A INPUT -p tcp -m tcp --dport 5060 -j dos-filter-sip-external
iptables -A INPUT -p udp -m udp --dport 5080 -j dos-filter-sip-external
iptables -A dos-filter-sip-external -m hashlimit --hashlimit 5/sec --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-name SIPMSG --hashlimit-htable-size 24593 --hashlimit-htable-expire 90000 -j RETURN
iptables -A dos-filter-sip-external -j REJECT --reject-with icmp-admin-prohibited
iptables -N dos-filter-ssh
iptables -I INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j dos-filter-ssh
iptables -A dos-filter-ssh -m hashlimit --hashlimit 3/min --hashlimit-burst 10 --hashlimit-mode srcip,dstip --hashlimit-name ssh_hash --hashlimit-htable-expire 60000 -j ACCEPT
iptables -A dos-filter-ssh -j DROP

Quelle: https://txlab.wordpress.com/2013/06/29/protecting-a-vpbx-from-dos-attacks/
Dort steht auch das vollständige Skript für ipv6.
Great Thanks to Stanislav Sinyagin for his work!

Ich habe nur den Teil für ipv4 verwendet. Es verhindert SIP-Register- und SSH-Angriffe, die den Asterisk-Server überschwemmen können.

Nach Ausführen der obigen iptables-Befehle sind mit iptables -L folgende neue Einträge ganz unten sehen (Großansicht per Mausklick).
Das Skript zeigt Wirkung. Attacken durch SIP-Scanner, die dennoch durchkommen,  weil sie noch nicht in der Blacklist sind, werden von Iptables ausgebremst. Die Anfragen erfolgen nur noch alle 10 bis 20 Sekunden. Kein Problem für die CPU-Auslastung des Rasbberry 3 B+. Der Betrieb des Asterisk-Servers ist nicht beeinträchtigt. (Für Großdarstellung auf das Bild klicken).

Ruby-Script zur Sperrung von SIP-Scannern: Im nächsten Schritt möchte ich ohne Gewähr eventuell das unter https://kb.smartvox.co.uk/asterisk/friendlyscanner-gets-aggressive/ beschriebene Skript einsetzen und ausführen. Die Installation von Ruby auf einem Rasbberry Pi ist unter https://dev.to/codenamev/setting-up-a-raspberry-pi-for-ruby-8j1 beschrieben.

SipBan: Ein weiteres Script zur Sperrung von SIP-Scannern mit Sipban: https://github.com/elpop/sipban mit Installationsanleitung, das ich allerdings auch nicht getestet habe.

APIBAN: Dieser kostenlose Dienst aktualisiert Iptables regelmäßig und löscht ältere Einträge. Es arbeitet mit weltweit verteilten SIP-Servern, die als Honeypots bösartige IP-Adressen sammeln und anderen Telefon-Servern zur Verfügung stellen.

https://www.apiban.org

Getestet habe ich inzwischen APIBAN auf meinem Raspberry Pi. Klappt wunderbar. Ich bin begeistert. Nachfolgend die Beschreibung, wie ich es auf meinem Raspberry Pi zum Laufen gebracht habe:

APIBAN schützt SIP-Server durch automatisiert erstellte Blacklists, die immer auf dem aktuellsten Stand sind. Dafür sorgt für den Anwender ein kleines Skript, das zum Beispiel auf einem Raspberry Pi läuft.
APIBAN schützt SIP-Telefon-Server automatisch vor bösartigen Angriffen aus dem Internet – 2. März 2023: APIBAN ist ein kostenloser Dienst, der nicht nur für Asterisk-SIP-Server laufend aktualisierte Blacklists böswilliger IP-Adressen zur Verfügung stellt, die automatisch in regelmäßigen Abständen in Iptables eingetragen werden. Damit die Blacklist in Iptables nicht zu groß wird, lässt sich die maximale Anzahl der Einträge (Regeln) begrenzen. Ältere Einträge werden automatisch aus Iptables entfernt. Man muss sich um die Pflege der Blacklists im Idealfall nicht mehr kümmern. – weiter

https://www.kwancro.com/honeypotdata/ Hier gibt es die Daten für die Erstellung von Blacklisten zum Schutz von SIP-Servern
Asterisk: SIP-Scanner-Blacklist für Iptables selbst erstellt – 28. Februar 2023: Da mir Tools für die automatische Beschaffung und Verwaltung von SIP-Scanner-Blacklisten  zu unsicher sind und sie das System im schlimmsten Fall beschädigen können, bin ich dazu übergegangen mir die Blacklisten selbst zu erstellen. Mit entsprechenden Python-Skripten beschränkt sich der wöchentliche Aufwand nur auf ein paar Minuten. – weiter

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