Hacker in meinem Asterisk Server

Es gibt die Möglichkeit, Angreifer mit Fail2Ban abzuwehren. Man kann Fail2Ban so konfigurieren, dass angreifende IP-Adressen in eine Blackouts aufgeführt werden.
 
Gibts denn da ne vernünftige Install-Anleitung für fail2ban mit iptables unter Raspbian?

Mit der von dir geposteten Anleitung kommen nur Fehler bei "/etc/init.d/fail2ban start" ...

Code:
$ sudo service fail2ban restart
/etc/init.d/fail2ban: Zeile 13: /etc/init.d/functions: Datei oder Verzeichnis nicht gefunden
Stopping fail2ban: /etc/init.d/fail2ban: Zeile 54: echo_success: Kommando nicht gefunden.

Starting fail2ban: ^CTraceback (most recent call last):
  File "/usr/bin/fail2ban-server", line 38, in <module>
    from server.server import Server
  File "/usr/share/fail2ban/server/server.py", line 33, in <module>
    from asyncserver import AsyncServer
  File "/usr/share/fail2ban/server/asyncserver.py", line 24, in <module>
    __author__ = "Cyril Jaquier"
KeyboardInterrupt
/etc/init.d/fail2ban: Zeile 38: echo_failure: Kommando nicht gefunden.
 
/etc/init.d/fail2ban: Zeile 13: /etc/init.d/functions: Datei oder Verzeichnis nicht gefunden
Stopping fail2ban: /etc/init.d/fail2ban: Zeile 54: echo_success: Kommando nicht gefunden.
Da paßt offenbar das Service-Skript nicht zu Deinem System (das Skript erwartet LSB-kompatibles init, offenbar ist das - auch dem Kommando nach, mit dem Du startest - aber bei Dir nicht vorhanden). Ohne weitere Informationen dazu (also welches System, woher stammt das fail2ban-Paket, usw.) ist Hilfe nicht möglich/sinnvoll.

Hier hilft natürlich ein minimales Verständnis der tatsächlichen Vorgänge beim Start eines Dienstes bei der Fehlersuche weiter (oder "eine Schritt für Schritt"-Erklärung, was Du da eigentlich machst, hilft dem Hilfewilligen zu verstehen, was Du da anstellst) - ich scheitere schon beim Verständnis, worauf Du Dich mit "der von Dir geposteten Anleitung" eigentlich beziehst. Das wird ja sicherlich nicht die Anleitung bei "voip-info.org" sein, oder?
 
Ich habe [...] auch die automatische mit dem Script ausprobiert auf meinem Raspberry Pi mit Raspbian.
Ich darf mal kurz aus der verlinkten Seite zitieren?

This script was written by Cédric Brohée in order to simplify and accelerate the integration of the solution in a basic Asterisk configuration on Red Hat.
Do not hesitate to read the bash script and make changes to match your own configuration.
Linux ist nun mal nicht gleich Linux ... man sollte schon wissen, wie das eigene System den Start von Services handhabt. Damit dürfte die Zeile 42 im erwähnten Skript eher nicht zu Deinem System passen und Du solltest Dir den letzten oben zitierten Satz doch zu Herzen nehmen.

Für die manuelle Installation gilt dann wieder das bereits Geschriebene ... entweder haarkleine Beschreibung, was Du gemacht hast oder Hilfe ist praktisch aussichtslos. Vor allem angesichts der Tatsache, daß in der voip-info.org-Beschreibung die verschiedenen Systeme ja bunt gemischt aufgeführt sind, da kann man ja nur raten, was davon Du Dir am Ende ausgesucht hast als auszuführende Kommandos.
 
Mist, ich hätte doch mal genauer lesen sollen.

Habe nochmal komplett von vorne angefangen, ohne Script und jetzt startet fail2ban zumindest.

Code:
2015-05-20 17:20:20,933 fail2ban.server : INFO   Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2015-05-20 17:20:20,943 fail2ban.jail   : INFO   Creating new jail 'ssh'
2015-05-20 17:20:20,953 fail2ban.jail   : INFO   Jail 'ssh' uses Gamin
2015-05-20 17:20:21,209 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2015-05-20 17:20:21,219 fail2ban.filter : INFO   Set maxRetry = 6
2015-05-20 17:20:21,236 fail2ban.filter : INFO   Set findtime = 600
2015-05-20 17:20:21,245 fail2ban.actions: INFO   Set banTime = 600
2015-05-20 17:20:21,998 fail2ban.jail   : INFO   Creating new jail 'asterisk-iptables'
2015-05-20 17:20:22,000 fail2ban.jail   : INFO   Jail 'asterisk-iptables' uses Gamin
2015-05-20 17:20:22,018 fail2ban.filter : INFO   Added logfile = /var/log/asterisk/messages
2015-05-20 17:20:22,029 fail2ban.filter : INFO   Set maxRetry = 3
2015-05-20 17:20:22,046 fail2ban.filter : INFO   Set findtime = 600
2015-05-20 17:20:22,055 fail2ban.actions: INFO   Set banTime = 259200
2015-05-20 17:20:22,607 fail2ban.jail   : INFO   Jail 'ssh' started
2015-05-20 17:20:22,727 fail2ban.jail   : INFO   Jail 'asterisk-iptables' started

Warten wir mal auf den nächsten "Angriff" und schauen, obs funktioniert. Ein gebannter Angreifer / Treffer taucht in der /var/log/fail2ban.log auf?
 
Zuletzt bearbeitet:
Gut, ein simulierter Angriff (jede Menge falsche Logins) wurde gesperrt. Aber die ganzen "Call from x to x rejected because extension not found in context guest" nicht.

messages:

Code:
[2015-05-20 18:34:54] NOTICE[25557]: chan_sip.c:22753 handle_request_invite: Call from '' (94.23.213.220:5078) to extension '00972592423912' rejected because extension not found in context 'guest'.
[2015-05-20 18:46:43] NOTICE[25557]: chan_sip.c:22753 handle_request_invite: Call from '' (94.23.213.220:5071) to extension '00972592423912' rejected because extension not found in context 'guest'.
[2015-05-20 18:52:46] NOTICE[25557]: chan_sip.c:22753 handle_request_invite: Call from '' (94.23.213.220:5071) to extension '00972592423912' rejected because extension not found in context 'guest'.
[2015-05-20 18:58:43] NOTICE[25557]: chan_sip.c:22753 handle_request_invite: Call from '' (94.23.213.220:5078) to extension '00972592423912' rejected because extension not found in context 'guest'.

trotz folgender failregex:

Code:
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Wrong password
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Username/auth name mismatch
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Peer is not supposed to register
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - ACL error (permit/deny)
            NOTICE.* .*: Registration from '.*' failed for '<HOST>:.*' - Device does not match ACL
            NOTICE.* .*: Call from '.*' (<HOST>:.*) to extension '.*' rejected because extension not found in context 'guest'\.
            NOTICE.* <HOST>:.* failed to authenticate as '.*'$
            NOTICE.* .*: No registration for peer '.*' \(from <HOST>:.*\)
            NOTICE.* .*: Host <HOST>:.* failed MD5 authentication for '.*' (.*)
            NOTICE.* .*: Failed to authenticate user .*@<HOST>
            NOTICE.* .*: Sending fake auth rejection for device .*\<sip:.*\@<HOST>\>;tag=.*
            NOTICE.* .*: Call from .* (<HOST>:.*) to extension '.*' rejected because extension not found in context 'guest'\.
            NOTICE.* .*: Call from .* (<HOST>:.*) to extension '.*' rejected because extension not found in context 'guest'\.
            NOTICE.* .*: Call from .* (<HOST>:.*) to extension '.*' rejected because extension not found in context 'guest.*
.

Hat jemand ne Idee, warum?
Wie lange in die Vergangenheit prüft der, um 3 fehlerhafte Logins zu finden?

Code:
[asterisk-iptables]
enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
           sendmail-whois[name=ASTERISK, dest=root, [email protected]]
logpath  = /var/log/asterisk/messages
maxretry = 3
bantime = 20000
 
@leseratte10, welche Asterisk-Version verwendest du? Mit der Version 11 wurde das Security Framework eingeführt.

Die von fail2ban registrierte Anzahl der Fehlversuche kann durchaus höher sein als in der jail.conf definiert. Das liegt u.A. daran, dass fail2ban ein log-parser ist und zwischen zwei "Auslesezyklen" mehrere Angriffe stattfinden können.

VG R.
 
Moins

:confused:
Aber die ganzen "Call from x to x rejected because extension not found in context guest" nicht.
Das liegt daran, weil der Asterisk zu geschwätzig ist.
Und hübsch mit OPTIONS antwortet...
Code:
SIP/2.0 404 Not Found
Via: SIP/2.0/UDP 192.168.178.1:43347;branch=z9hG4bK.56107dca;alias;received=93.220.38.225;rport=43347
From: sip:[email protected]:43347;tag=414f3f6c
To: sip:**.spdns.**:5070;tag=as73b60885
Call-ID: [email protected]
CSeq: 1 OPTIONS
Server: Asterisk PiBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Accept: application/sdp
Content-Length: 0

Die Fritz!Box schmettert solche frechheiten ab...
Code:
SIP/2.0 406 Not Acceptable
Via: SIP/2.0/UDP 192.168.178.1:37532;branch=z9hG4bK.52d75ab7;rport=37532;alias;received=93.220.38.225
From: <sip:[email protected]:37532>;tag=5350fc70
To: <sip:**.spdns.**:5060>;tag=890BDFF8DBB940A1
Call-ID: [email protected]
CSeq: 1 OPTIONS
User-Agent: FRITZ!OS
Content-Length: 0
 
Nein, es lag an einem Fehler in der fail2ban config - habe vergessen, eine Klammer zu escapen. Ich nutze Asterisk 1.8.

Bei mir landet dann so eine Zeile im Log:

Code:
[2015-05-23 12:37:50] NOTICE[25557] chan_sip.c: Call from '' (217.172.xxx.34:6385) to extension '8800' rejected because extension not found in context 'guest'.

und die kann man mit folgendem Filter perfekt rauswerden:

Code:
NOTICE.* .*: Call from '.*' \(<HOST>:.*\) to extension '.*' rejected because extension not found in context 'guest'\.
 
Zuletzt bearbeitet:
Gut.

Hast du eine Asterisknummer in der Fritz!Box registriert?
Die kann als SIP URI über den TCP/UDP SIP Port 5060 der Fritz!Box aus dem Internet erreicht werden.
Wenn nicht gewünscht, dann eine RUL in der F!B anlegen, auf Telefon oder AB.

PS: Wenn solche Anrufe in einen sicheren Kontext landen, wie bei dir, ist das schon beruhigend, und gut so. ;)
...bei mir landen die im [ani] Kontext, und lasse sie dafür zahlen. :hehe:
extension.conf
Code:
[default]
;
; By default we include the demo.  In a production system, you
; probably don't want to have the demo there.
;
include => ani
exten => _X.,1,Answer
exten => _X.,n,Gosub(ani)
exten => _X.,n,Hangup
 
Zuletzt bearbeitet:
Ich erinnere mich dunkel, dass Asterisk 1.8 anstatt der wahren Quell-IP-Adresse bei so genannten fake auth rejections die Eigene gelogt hat. Verlasse dich daher nicht blind auf fail2ban filter. ;-)

VG R.
 
Der Port 5060 ist auf meinen Asterisk weitergeleitet - die Fritzbox nutzt 5065 als "sip_srcport". Außerdem ist bei allen Nummern in der Fritzbox "only_call_from_registrar = yes" gesetzt.

Und alles ankommende an "*@meine-ip" landet im sicheren Kontext "guest". Da sind nur zwei Extensions drin, die meine Telefone klingeln lassen, wenn eine meiner Nummern ("meine-nummer@meine-ip") gewählt wird (ENUM). Alle anderen bekommen nur den Asterisk-Fehler "Extension not found" und werden von fail2ban "entsorgt".

Was meinst du mit "dafür zahlen lassen"? SIP-Direktanrufe sind doch eh gratis ...
 
Zuletzt bearbeitet:
Naja, hast Recht, ich meine falls es über keine Gratisverbindung kommen sollte.
 
Weiter vorne wird empfohlen, man solle eine leere DEFAULT-Extension in der extensions.conf anlegen, damit Hacker in eine definierte Umgebung kommen.

Nur wo?

Code:
[globals]  
... bla ...

[general]  
... bla ...

[internal]  
... bla ...

[phones]  
... bla ...

[incoming]  
... bla ...

[outgoing]  
... bla ...
 
Zuletzt bearbeitet:
Moins

Die extensions.conf enthält immer eine [default], bei mir ziemlich weit Unten.
Die Frage ist ja auch, ob externe Anrufe durchklingeln dürfen.
Ansonsten bekommst du nie wieder einen Anruf.
Das ist bei mir dadurch gelöst, dass registrierte Asterisknummern bei mir nie im [default] landen.
Da Anrufe/Umleitungen über diese Nummern einen eigenen Kontext benutzen.
 
Ich habe noch einen weiteren Sicherheits-Aspekt, den mir ein Bekannter mitgeteilt hat: man sollte seine IP-Telephone alle mit einer festen IP versehen und diese IP auch in der sip.conf eintragen:

Code:
[32]
callerid=32 <32>
user=32
secret=passwort

host=dynamic
deny=0.0.0.0/0.0.0.0
permit=192.168.3.59/255.255.255.255  ; hier kommt die feste IP rein und wird mit 4x255 "verriegelt"
type=friend
context=buero
 
Ich halte nichts davon zu versuchen Asterisk über Gebühr abzuschirmen. Nicht autorisierte Nutzer sollten es gar nicht erst bis in das Asterisk-System schaffen.

Mein Asterisk-Server läuft auf einem Server in Lausanne. Die Geräte gehen alle aus meinem internen Netz per OpenVPN auf den Server und dann an Asterisk. Erspart zum Einen nervige NAT Proxies und Krücken und zum Anderen wird das Gespräch ordentlich verschlüsselt. Die Basissicherung mit Benutzernamen und Passwörtern findet in Asterisk statt und die Abschirmung von Asterisk wird durch OpenVPN gewährleistet.

Der Zugriff auf Sipgate und die anderen SIP trunks ist in der Firewall fest auf deren IP-Adressen konfiguriert. Eingehender und ausgehender Verkehr auf 5060 und 50000-60000 geht nur von und zu diesen Zieladressen. Alles bekommt einen DROP.

Damit sichere ich mich gegen Speicherlücken, Bruteforce und den ganzen Müll ab. Zudem fressen vermeintliche Bruteforce Angriffe nicht meine Bandbreite. Fail2ban ist ganz Nett, aber eher für SSH und OpenVPN geeignet. Für Asterisk würde ich es nur auf Provider-ebene verwenden, wenn ein öffentlicher uneingeschränkter Zugriff tatsächlich notwendig ist.
 
Mein Asterisk läuft nicht auf dem Stadard bindport 5060, aber in der Nähe davon. Bis vorgestern war damit auch Ruhe, gestern allerdings gab es ein paar Versuche eine britische Nummer in verschiedenen Variationen mittels Nummer@MeineIPAdresse anzurufen. Offensichtlich lassen die Herrschaften ihre Portscans nicht mehr nur auf 5060, sondern auch auf den umgebenden Ports laufen. Hacking-Versuche im Sinne von User/Passwort Bruteforce gab es bislang zum Glück noch nicht, über Kurz oder Lang werde ich aber wohl doch iptables und fail2ban installieren.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.