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.
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.
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
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.shSIP Attack: Friendly-Scannerhttps://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.
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.
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.
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.
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-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 – |
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 – |
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 – |