Virtuelle Telefonanlage. Teil 2: Lösen Sie Sicherheitsprobleme mit Asterisk und richten Sie Anrufe ein



Im vorherigen Artikel haben wir uns eine einfache Installation eines IP PBX (IP PBX) Asterisk 16 aus einem regulären Repository auf einem virtuellen RuVDS- Server mit Ubuntu 20.04 angesehen . In einer solchen Konfiguration lohnt es sich nicht, den VoIP-Dienst der Öffentlichkeit zugänglich zu machen: Sie müssen zusätzliche Einstellungen vornehmen, die sich unter anderem auf die Informationssicherheit beziehen.



Definieren des Bedrohungsmodells



Lassen Sie uns zunächst herausfinden, welchen Risiken ein Unternehmen ausgesetzt ist, das eine virtuelle Telefonanlage ins Internet gestellt hat. Ihre ganze Vielfalt beruht auf einer kurzen Liste:



  • vertrauliche Datenlecks und Inhaltsbeschädigung (Sitzungsentführung);
  • unbefugter Zugriff auf Unternehmensinformationssysteme aufgrund von Schwachstellen in Asterisk und anderer Software auf dem Server, insbesondere aufgrund falscher Konfiguration;
  • Unterbrechung der virtuellen Telefonanlage aufgrund von Denial-of-Service-Angriffen;
  • Weiterverkauf von Datenverkehr nach dem Hacken einer Telefonanlage (die häufigste Art von Angriff).


Einige der Sicherheitsanfälligkeiten hängen direkt mit der Asterisk-Software zusammen. IP-PBX-Entwickler veröffentlichen regelmäßig Patches, und Systemadministratoren können Updates nur rechtzeitig installieren. Diese Methode garantiert keine vollständige Sicherheit, daher lohnt es sich auch, den Zugriff der Clients auf den IP-Telefonieserver einzuschränken. Mal sehen, was getan werden sollte, um eine sichere Telefonie zu organisieren.



Firewall konfigurieren



Der einfachste Weg, sich zu schützen, besteht darin, Clientverbindungen auf eine Firewall zu beschränken. Da VDS eine echte IP hat, müssen keine Probleme mit dem Datenverkehr durch NAT gelöst werden. Es bleibt, eingehende Verbindungen von Teilnehmern zuzulassen und alle anderen über Netfilter zu blockieren . Auf virtuellen Servern RuVDS mit Ubuntu wird es mit dem vorinstallierten Dienstprogramm UFW (Uncomplicated Firewall) konfiguriert . Wenn Sie das ufw-Paket nicht installiert haben, ist es einfach zu beheben:



sudo apt-get install ufw


Lassen Sie uns zunächst den Status überprüfen:



sudo ufw status verbose


Standardmäßig ist UFW deaktiviert (Status: inaktiv), aber Sie sollten sich nicht beeilen, es zu aktivieren: Wenn Sie die Einstellungen nicht ändern, werden alle eingehenden Pakete im Stammverzeichnis gehackt und Sie verlieren den Zugriff auf den Server über SSH. Sie sollten mindestens eingehende Verbindungen an Port 22 zulassen, während Sie das vorinstallierte OpenSSH-Anwendungsprofil verwenden können (Profile anzeigen: sudo ufw app list):



#    SSH 
#   IP,   
sudo ufw allow OpenSSH
#    IP (  )
sudo ufw allow from XXX.XXX.XXX.XXX to any port 22
#       IP ()    Asterisk
sudo ufw allow from XXX.XXX.XXX.XXX
#   
sudo ufw enable


Verwenden Sie den Befehl, um die Filterrichtlinie anzuzeigen:



sudo ufw status verbose




Um Regeln zu löschen, müssen Sie deren Nummern sehen:



sudo ufw status numbered
sudo ufw delete N




Es gibt andere Tools zum Konfigurieren von Netfiler (dieselben iptables), aber Sie sollten nicht verschiedene Dienstprogramme kombinieren - dies ist mit Problemen behaftet. Ohne Filterung des Datenverkehrs funktioniert dies nicht, da Ihr Sternchen bei geöffnetem Wind nicht eine Stunde lang steht, da solche lustigen Bilder in der Konsole angezeigt werden:





Da Remote-Benutzer (theoretisch) in der Regel zu Hause sind, haben sie eine echte dedizierte IP, und wir brauchen nichts anderes. Andernfalls sollten Sie sich um die Erstellung eines sicheren virtuellen privaten Netzwerks kümmern. Es ist auch nützlich, um auf andere Unternehmensressourcen zuzugreifen, die nicht der Öffentlichkeit zugänglich gemacht werden sollten. Anspruchsvollere Abwehrmechanismen (fail2ban usw.) stehen nicht in direktem Zusammenhang mit Asterisk. Wir werden sie auch in anderen Beiträgen im allgemeinen Kontext betrachten.



Unnötige Module loswerden



Dieser Teil der Konfiguration steht nicht in direktem Zusammenhang mit der Sicherheit, ist jedoch im Allgemeinen erforderlich. Je weniger Möglichkeiten Ihre Telefonanlage für Kunden bietet, desto schwieriger ist es, sie zu hacken. Das Fehlen unnötiger Funktionen verkompliziert das Leben potenzieller Eindringlinge in gewissem Maße.



Die minimale PBX-Funktionalität sieht folgendermaßen aus:



  • SIP-Unterstützung;
  • Unterstützung für den Codec G711 alaw only (wenn Sie möchten, können Sie alle verfügbaren Codecs hinzufügen);
  • Telefongesprächsaufzeichnung;
  • Unterstützung für das WAV-Format (falls gewünscht, können Sie Unterstützung für alle verfügbaren Formate hinzufügen);
  • Optional : Unterstützung für das Speichern von Anrufdetails auf dem Datenbankserver.


Verwenden Sie die integrierte Textkonsole, um den Asterisk-Dienst interaktiv zu verwalten:



sudo asterisk -rvv


Moduldateien * .so werden im Verzeichnis / usr / lib / asterisk / modules / gespeichert . Das Hoch- und Herunterladen kann in der Konsole erfolgen, ohne dass der Server neu gestartet werden muss ( der Modulname wird ohne Erweiterung angegeben, z. B. chan_sip statt chan_sip.so ): Die Einstellungen des Asterisk-Moduls finden Sie in der Konfigurationsdatei /etc/asterisk/modules.conf . Standardmäßig werden alle verfügbaren Module beim Serverstart automatisch geladen. Dies kann jedoch einfach mit dem Parameter autoload = yes | no geändert werden . Lassen Sie uns die Konfigurationsdatei bearbeiten, nachdem Sie eine Sicherungskopie der Verteilungsdatei erstellt haben:



module load NAME

module unload NAME








sudo mv /etc/asterisk/modules.conf /etc/asterisk/modules.conf.b
sudo nano /etc/asterisk/modules.conf


Es gibt zwei Ansätze zur Konfiguration. Im ersten Fall aktivieren wir das automatische Laden aller vorhandenen Module und deaktivieren unnötige Module über modules.conf (Abschnitt [Module] ): Hinweis: Hier geben wir den Dateinamen mit der Erweiterung an. Die zweite Option besteht darin, das automatische Laden aller zu deaktivieren und nur die erforderlichen Module im Abschnitt [modules] der Datei modules.conf anzugeben , z. B.: Ändern Sie nach dem Bearbeiten die Zugriffsrechte:



[modules]

autoload=yes

noload => module_name.so












[modules]

autoload = no

load => chan_sip.so

load => codec_alaw.so

load => format_wav.so

load => app_dial.so

load => res_musiconhold.so








sudo chown asterisk:asterisk /etc/asterisk/modules.conf
sudo chmod 640 /etc/asterisk/modules.conf




Wir sehen uns die Liste der geladenen Module in der Asterisk-Konsole an:



module show





Wir fügen nach Belieben weitere Module hinzu. So sieht die Datei modules.conf aus, um eine IP-PBX mit einer ausreichend entwickelten Funktionalität zu konfigurieren:



Inhalt der modules.conf
[modules]



autoload=no ; /usr/lib/asterisk/modules/



; VoIP (SIP)

load => chan_sip.so

load => res_sorcery_config.so

load => res_pjproject.so ; res_rtp_asterisk.so

load => res_rtp_asterisk.so

load => app_dial.so ; res_musiconhold.so

load => app_echo.so

load => bridge_simple.so ;

load => app_bridgewait.so

load => app_transfer.so ;

load => app_verbose.so ;

load => app_voicemail.so ; res_adsi.so

load => app_playback.so ;

load => app_stack.so

load => app_confbridge.so ;

load => app_directory.so

load => res_adsi.so

load => app_system.so ;

load => app_queue.so ;



;

load => func_devstate.so

load => app_chanisavail.so ; ChanIsAvail

load => func_cut.so ; cut



;

load => res_musiconhold.so

load => pbx_config.so



;

load => codec_a_mu.so

load => codec_adpcm.so

load => codec_alaw.so

load => codec_ulaw.so

load => codec_gsm.so

load => codec_lpc10.so

load => codec_g726.so

load => codec_g722.so



;

load => format_gsm.so ; Raw GSM data

load => format_h263.so ; Raw h263 data

load => format_pcm.so ; Raw uLaw 8khz Audio support (PCM)

load => format_wav_gsm.so ; Microsoft WAV format (Proprietary GSM)

load => format_wav.so ; Microsoft WAV format (8000hz Signed Linear)

load => format_mp3.so ; mp3-format



; Dahdi ( VDS )

;load => chan_dahdi.so



;

load => res_parking.so



; res_monitor.so,

load => func_periodic_hook.so

load => func_strings.so ; STRFTIME

; CALLERID, res_monitor.so

load => func_callerid.so

load => func_volume.so

;

load => res_monitor.so

load => app_mixmonitor.so ; app_mixmonitor.so app_dial.so

load => func_channel.so



; MySQL ( )

;load => cdr_mysql.so

;load => res_config_mysql.so ; MySQL RealTime Configuration Driver



; MySQL ODBC ( )

;load => res_odbc.so

;load => res_config_odbc.so

;load => cdr_odbc.so ;



; SNMP ( )

;load => res_snmp.so



; /var/spool/asterisk/outgoing/ ( )

;load => pbx_spool.so



; ( )

;load => app_exec.so ; exec execif

;load => app_while.so ; dialplan

;load => res_sorcery_astdb.so

;load => res_sorcery_realtime.so

;load => app_read.so

;load => app_stack.so

;load => cdr_csv.so ; /var/log/asterisk/cdr-csv/Master.csv

;load => func_cdr.so

;load => func_logic.so

;load => func_timeout.so

;load => func_shell.so

;load => pbx_ael.so

;load => res_ael_share.so

;load => res_agi.so

;load => res_speech.so ; res_agi.so





Hinweis: Sie können eine Zeile mit einem Semikolon auskommentieren.



Nach dem Ändern der Datei modules.conf müssen Sie Module von der Asterisk-Konsole neu laden:



module reload



Wenn Sie Asterisk neu starten müssen, verwenden Sie anstelle der integrierten Konsole den folgenden Befehl:



sudo systemctl restart asterisk


Alle aufgerufenen Module müssen installiert sein, andernfalls schlägt Asterisk beim Laden fehl. Um beispielsweise das MP3-Format zu unterstützen, müssen Sie das Paket asterisk-mp3 installieren. Um jedoch direkt mit dem MySQL-Server arbeiten zu können, benötigen Sie asterisk-mysql :



sudo apt-get install asterisk-mp3
sudo apt-get install asterisk-mysql


Das Auffinden von im Repository verfügbaren Paketen ist mit dem folgenden Befehl einfach:



apt-cache search asterisk


Tatsächlich gibt es viel mehr Module für Asterisk, wir haben nicht alle aufgelistet. Wenn Sie beispielsweise eine TK-Anlage auf einem physischen Server installieren und analoge Leitungen über eine Telefonie-Schnittstellenkarte mit dieser verbinden möchten, benötigen Sie das Paket asterisk-dahdi .



VoIP konfigurieren



Ändern wir nun die Datei sip.conf, damit wir mit Asterisk arbeiten können:



sudo nano /etc/asterisk/sip.conf


Fügen Sie dem Abschnitt [allgemein] die folgenden Zeilen hinzu, falls Sie dies noch nicht getan haben: Der erste Parameter schützt Asterisk vor Brute-Force-Angriffen. Wenn Sie es nicht aktivieren, informiert der Server Angreifer, wenn der Abonnent nicht vorhanden ist. Nachdem ein Hacker eine gültige Nummer gefunden hat, kann er Brute-Force-Passwörter aufrufen. Wenn alwaysauthreject = yes ist , sehen Authentifizierungsfehler für vorhandene und nicht vorhandene Abonnenten gleich aus und es ist schwieriger, das Kennwort zu erraten . Der Parameter allowguest = no verbietet das sogenannte. Gastanrufe an PBX-Benutzer. Sie können den Port, den Asterisk abhört, auch mithilfe der bindport- Direktive in einen nicht standardmäßigen Port ändern (ähnlich wird die Adresse, die den VoIP-Dienst abhört, mit bindaddr konfiguriert ).



alwaysauthreject=yes

allowguest=no








In der Datei sip.conf haben wir Abonnenten (Peers - von englischen Peers) PBX registriert. Wenn der Benutzer mit einer festen IP-Adresse arbeitet, lohnt es sich, seine Konnektivität einzuschränken. Es ist auch notwendig , starke Passwörter zu erstellen, führen eine Obergrenze für die Anzahl der Anrufe und natürlich, registrieren Sie Verbindungen zu externen VoIP - Anbieter (die sogenannten Stämme - aus dem englischen Stamm):



deny=0.0.0.0/0.0.0.0 ;verbieten Verbindungen von allen Knoten

permit=xxx.xxx.xxx.xxx/24 ;ermöglichen Verbindungen von einem bestimmten Subnetz

secret=_ ;Teilnehmer Passwörter müssen beständig sein Brute Force zur

call-limit=2 ; Begrenzung der Anzahl gleichzeitiger Aufrufe



Infolgedessen sieht die Datei sip.conf folgendermaßen aus :



Sip.conf Inhalt
[general]

context=default

allowoverlap=no

udpbindaddr=0.0.0.0

tcpenable=no

tcpbindaddr=0.0.0.0

transport=udp

srvlookup=yes

alwaysauthreject=yes

allowguest=no



; SIPNET c chan_sip

; register

[sipnet]

remotesecret=

defaultuser=

host=sipnet.ru

type=peer

context=sipnet-trunk; dialplan ( extensions.conf)

insecure=invite

callbackextension=s

fromuser=

fromdomain=sipnet.ru

disallow=all

allow=alaw,ulaw

nat=no

directmedia=no

dtmfmode=rfc2833



[office](!)

; , .

; .

type=friend

host=dynamic ; , IP

nat=no ; NAT

deny=0.0.0.0/0.0.0.0 ;

call-limit=2

qualify=yes ; 2

dtmfmode=rfc2833 ; dtmf , rfc2833

; ,

disallow=all

allow=ulaw

allow=alaw

allow=g729

allow=g723

allow=g726

allow=h261

allow=h263

allow=h264

allow=h263p



; () office

[1001](office)

permit=XXX.XXX.XXX.XXX/Netmask

secret=_

callerid= <1001>

context=homeoffice ; dialplan ( extensions.conf)



[1002](office)

permit=YYY.YYY.YYY.YYY

secret=_

callerid= <1002>

context=homeoffice





In diesem Fall kann der Teilnehmer 1001 eine Verbindung von einer beliebigen Adresse eines bestimmten Subnetzes und 1002 herstellen - nur von einer festen IP. Wir haben den Teilnehmern auch eine Nummer, ein Passwort, einen Namen und einen Kontext gegeben, die im Anrufweiterleitungsplan (Dialplan) verwendet werden. Anweisungen zum Konfigurieren von Amtsleitungen finden Sie am besten auf den Websites von Dienstanbietern: In unserem Fall ist dies SIPNET . Die Parameter ähneln denen anderer Peers - Erweiterungen. Beachten Sie auch, dass der in der Konfigurationsdatei angegebene Kontext (wir werden weiter unten auf diese Entität eingehen) in dialplan vorhanden sein muss.



Nachdem Sie Änderungen an der Konfigurationsdatei sip.conf vorgenommen haben , müssen Sie das SIP-Modul über die Asterisk-Konsole neu starten:



sip reload



Andere integrierte Konsolenbefehle für die Arbeit mit dem SIP-Modul:



sip show peers- Anzeigen des Status aller Amtsleitungen / Peers;

sip show registry- Anzeige aller Registrierungen;

sip show channels- Anzeige aktiver Kanäle;

sip show settings- Anzeigen der globalen Einstellungen des SIP-Moduls.





Wählplan und alles in allem



Anrufweiterleitungsplan oder Wählplan wird häufig als das Herzstück von Asterisk bezeichnet. Es wird in der Datei /etc/asterisk/extensions.conf gespeichert und ist im Wesentlichen ein Skript, mit dem die TK-Anlage auf externe Ereignisse reagiert. Aufrufplan-Skripte können in verschiedenen Sprachen geschrieben werden, wir werden jedoch die integrierte berücksichtigen, die in den ersten Versionen der beliebten IP-PBX enthalten war. Nach dem Konfigurieren und Starten von Asterisk enthält die Datei extensions.conf einige Inhalte. Ersetzen wir es durch unsere eigene: Die Skriptsyntax ist ziemlich einfach, wir werden im nächsten Artikel näher darauf eingehen. Beachten Sie nur, dass der Anrufplan von Asterisk auf vier zentralen Konzepten basiert:



[general]

static=yes

writeprotect=no

priorityjumping=no

autofallthrough=yes

clearglobalvars=no



;

[default]

exten => _X.,1,NoOp()

same => n,Busy()

same => n,HangUp()



; homeoffice

[homeoffice]

;

exten => _1XXX,1,Dial(SIP/${EXTEN})

; SIPNET

exten => _.7XXXXXXXXXX,1,Dial(SIP/${EXTEN}@sipnet)



; sipnet-trunk, SIPNET

[sipnet-trunk]

;








  • Kontexte - Kommunikation benannter (Namen sind in eckigen Klammern eingeschlossen) Teile des Codes: Anweisungssätze;
  • (extensions) — , exten;
  • — , ( ) ( n — next). exten same;
  • (applications) — . , Dial — , .


Durch Erweiterungen werden Aufrufe anhand einer Reihe von Mustern nach einer Maske sortiert, beginnend mit einem Unterstrich. Dadurch wird unserer Telefonanlage klar, dass es sich um ein Muster handelt:



exten => _1XXX,1,Dial(SIP/${EXTEN})



Als Nächstes wird die Priorität angegeben und der Aufruf der Anwendung mit Übergabe von Argumenten ist recht einfach.



Starten Sie den Wählplan über die Asterisk-Konsole neu:



dialplan reload



Verwenden Sie den folgenden Befehl, um den aktuellen Wählplan anzuzeigen:



dialplan show







Beachten Sie, dass beispielsweise von Ihnen geladene Module Änderungen am Wählplan vornehmen können.



Jetzt ermöglicht die TK-Anlage internen Teilnehmern, miteinander zu kommunizieren und externe Anrufe innerhalb Russlands über SIPNET zu tätigen. Das ist nicht viel, aber genug für die zweite Lektion. In der aktuellen Konfiguration wurde das veraltete Modul chan_sip verwendet , das im Laufe der Zeit in Asterisk eingestellt wird. Im nächsten Artikel werden wir uns mit der Migration in die PjSIP- Bibliothek befassenum mit dem VoIP-Protokollstapel zu arbeiten und den Wählplan für den Empfang eingehender Anrufe, die Organisation von Konferenzen und die Lösung anderer Anrufweiterleitungsaufgaben zu erweitern. Aufmerksame Leser haben möglicherweise bemerkt, dass einige der geladenen Module in den Beispielen nicht verwendet wurden: Sie müssen lernen, wie Anrufe aufgezeichnet, Warteschlangen erstellt und andere interessante Tricks ausgeführt werden.





Lesen Sie unseren Blog)










All Articles