Asterisk
========
.. |date| date::
.. sidebar:: Info
.. image:: ../images/logo-freebsd.png
In diesem HowTo wird erklärt, wie man Asterisk auf BSD installiert und
eine einfache Telefonanlage mit SIP und IAX Konten erstellt, externe
VoIP Provider einbindet und zwei Asterisk mittels IAX verbindet.
Was kann Asterisk?
------------------
Asterisk kann so gut wie alles, was von einer modernen Telefonanlage im
Business Bereich erwartet wird. Aber auch für kleine private Anlagen ist
Asterisk eine gute Wahl!
- Music on Hold
- Konferenzräume
- Voice Mail
- Anrufweiterleitung mit/ohne Rücksprache
- Warteschleifen
- Agentenlogin (für. z.B HomeOffice Mitarbeiter)
- Blacklists für unerwünschte Anrufer
- Manager Interface für Call-Center
Was kann Asterisk nicht?
------------------------
Asterisk unterstützt SRTP und IAX2 (AES128) jedoch kein ZRTP (Zimmermann
RTP). Wer ZRTP nutzen möchte, sollte einen zusätzlichen Kamailio Server
einrichten.
Die Einrichtung eines Kamailio Server ist einfach, wird in diesem HowTo
jedoch nicht behandelt.
Installation von Asterisk
-------------------------
Vorzugsweise installieren wir Asterisk in einer Jail. Wie man Jails
erstellt, wird hier erklärt `jails `__.
Wir installieren Asterisk aus den Binärpaketen.
seit Version 13.19.2_1 ist SRTP Support aktiviert. Wer
auf eine frühere Version von Asterisk13 zurück greifen muss und SRTP
nutzen will, muss Asterisk aus den Ports bauen. Siehe Notes:
https://www.freshports.org/net/asterisk13/
.. code:: tcsh
export jail=
.. code:: tcsh
pkg -c $jail install -y asterisk13
Konfiguration
-------------
Jail
~~~~
Die Konfiguration unserer Jail sieht wie folgt aus
.. code:: tcsh
$EDITOR /etc/jail.conf
::
exec.clean;
exec.system_user = "root";
exec.jail_user = "root";
exec.start += "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.consolelog = "/var/log/jail_${name}_console.log";
mount.devfs;
allow.set_hostname = 0;
allow.sysvipc = 0;
path = "/${name}";
{
host.hostname = "asterisk.lokal";
ip4.addr = "re0|192.168.xxx.xxx/32";
ip4.addr += "re1|192.168.xxx.xxx/32";
}``
Hier zu sehen sind zwei Netzwerkschnittstellen, in meinem Fall wären das
Realtek-Karten ``re0`` und ``re1``. Diese müssen auf die jeweilige
Hardware und Konfigurationswünsche angepasst werden. Intel wäre ``em0``
und respektive ``em1``.
.. _asterisk-1:
Asterisk
~~~~~~~~
Es gibt eine Menge Files im Ordner ``/usr/local/etc/asterisk/`` und beim
ersten Blick ist man etwas erschrocken. Aber keine Angst, wir werden
hier nur jene Files bearbeiten oder neu erstellen, welche für den
Betrieb von Asterisk relevant sind.
Das sind folgende
- asterisk.conf
- modules.conf
- features.conf
- musiconhold.conf
- rtp.conf
- sip.conf
- iax.conf
- extensions.conf
Die fett markierten Dateien werden wir neu erstellen/ändern, alle
anderen nicht markierten bleiben in der ursprünglichen Version im
Ordner. Den Rest dürft ihr löschen.
.. warning::
Im File modules.conf ist aufgelistet welche Module Asterisk beim
Start lädt. Da standardmässig alle Module geladen werden und wir aber bis auf
unsere oben angeführten Konfig-Files alle anderen gelöscht haben, erscheinen in
der Asterisk CLI beim Start einige Fehlermeldungen, dass keine Konfig gefunden
wurde. Das ist nicht weiter schlimm, wenn Asterisk nach seinen Wünschen
konfiguriert ist, kann mann die nicht benötigten Module auf **noload** setzen
asterisk.conf
^^^^^^^^^^^^^
Kontrolliert, ob diese beiden Zeilen nicht auskommentiert sind. Wir
wollen Asterisk als User Asterisk laufen lassen.
.. code:: tcsh
runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.
rtp.conf
^^^^^^^^
Hier definieren wir nur die RTP-Ports. Bei den meisten SIP-Telefonen
sind diese zwischen 5004-5020 als Standard vordefiniert (im Zweifel also
erstmal ins Menü des Telefons schauen), also sieht unser File so aus.
.. code:: tcsh
[general]
rtpstart=5004
rtpend=5020
.. warning::
Die Port Range begrenzt **auch** die Anzahl der maximalen parallelen
Gespräche! Bei Bedarf muss diese beim Asterisk sowie bei den Clients
angepasst werden. Bsp.: Konferenz, Music-on-hold, Weiterleitung usw.
sip.conf
^^^^^^^^
Hier sind unsere Zugangsdaten für alle SIP Verbindungen hinterlegt. Egal
ob interne Telefone oder externer Provider.
.. code:: tcsh
[general]
alwaysauthreject = yes ;Überaus wichtig!!!! Die wichtigste Einstellung überhaupt!
allowguest = no ; Wir verbieten "Guest" Registrationen
bindport = 5060 ; SIP Standard Port
bindaddr = 0.0.0.0 ; wir lauschen auf allen Adressen
language=de ; deutsche Ansagen (z.B. Konferenzraum)
nat = force_rport,comedia ; für SIP Telefone aus dem WAN
localnet = 192.168.1.0/255.255.255.0 ; Unser lokales Netz, wo sich die Telefone befinden.
localnet = 192.168.2.0/255.255.255.0 ; Es können natürlich auch mehrere definiert werden
register => :@nummer ; -> selbe Zugangsdaten wie ext-sip
[100]; BSD User 100
disallow = all
allow = ulaw ; hier wird der **für die Telefone zum Asterisk hin** verwendete Sprachcodec definiert. Kommagetrennt können hier mehrere und/oder andere verwendet werden.
context = bsdforen ; -> wird in der extensions.conf erläutert!
secret =
callerid = "BSD User XYZ" <100>
type = peer
host = dynamic
qualify = yes
[ext-sip]
type = peer
context = von-ext
username = xxxxx
fromuser = xxxxx
secret = xxxxx
host = xxx.xxx.xxx.xxx
insecure = port,invite
nat = force_rport,comedia
qualify = yes
canreinvite = no
dtmfmode = rfc2833
.. warning::
``alwaysauthreject = yes`` und ``allowguest = no`` sollten immer gesetzt
sein! Es gibt eine Menge VoIP Brute Force Tools, welche sonst eruieren
könnten, welche Nummer auf der Asterisk konfiguriert sind. Mit diesen beiden
Zeilen denkt der Angreifer, dass er einen Treffer erzielt hat, obwohl diese
Nebenstelle nicht existiert. Ein Brute Force Angriff auf ein Benutzer Konto
das nicht existiert, wird keinen Erfolg liefern.
iax.conf
^^^^^^^^
Wie der Name schon sagt, geht es um IAX Konten. IAX ist ein spezielles
Protokoll, welches von Digium, dem Asterisk Erfinder entworfen wurde und
die bekannten Probleme von SIP und NAT nicht aufweist.
IAX2 verwendet im Standard den Port 4569 und wickelt allen Verkehr über
diesen ab, es wird kein zusätzlicher SIP/RTP Port benötigt.
Über das IAX2 Protokoll lassen sich sehr einfach und komfortabel mehrere
Asterisk mit einander verbinden. So ist es möglich ein weit verteiltes
"privates" Telefonnetz aufzubauen und das dazu noch mit AES128
verschlüsselt! Natürlich kann man das ganze noch zusätzlich durch ein
VPN schicken.
Gleich ob 2,3 oder 4 parallele Gespräche, alle werden über den selben
IAX Kanal abgewickelt,es ist also sehr ressourcenschonend.
Wir nehmen an, wir haben zwei Asterisk Server, Server-A und Server-B.
.. code:: tcsh
[general]
bindport=4569
bindaddr=192.168.xxx.xxx
externhost=xxx.xxx.xxx.xxx
bandwidth=high
allow=all
language=de
[Asterisk-Server-A]
type=peer
username=Asterisk-Server-B
secret=
host=
auth=md5,rsa
trunk=yes
qualify=yes
encryption=yes
forceencryption=yes
context=bsdforen ;-> wird in der extensions.conf erläutert!
Und hier die Konfig von Server-B
.. code:: tcsh
[general]
bindport=4569
bindaddr=192.168.xxx.xxx
externhost=xxx.xxx.xxx.xxx
bandwidth=high
allow=all
language=de
[Asterisk-Server-B]
type=peer
username=Asterisk-Server-A
secret=
host=
auth=md5,rsa
trunk=yes
qualify=yes
encryption=yes
forceencryption=yes
context=bsdforen ;-> wird in der extensions.conf erläutert!
Wie man erkennen kann, sind die Passwörter bei beiden gleich und die
Benutzernamen ausgekreuzt. So kann man mit einem Block den eingehenden
sowie ausgehenden Verkehr abwickeln. Wer aus Sicherheitsgründen dies
nicht möchte, kann auch für Ein/Ausgehend jeweils eine eigene Konfig
erstellen und die Anmeldedaten anpassen.
Hat jemand ein IAX Softphone wie Zoiper im Einsatz, dann benötigt man
einen Eintrag in der iax.conf der wie folgt aussieht. Bis heute ist mir
leider kein IAX Client bekannt, der verschlüsselte Anrufe unterstützt.
.. code:: tcsh
[200]
username =
secret =
disallow = all
allow = ulaw
allow = alaw
context = bsdforen ;-> wird in der extesions.conf erläutert!
type = peer
host = dynamic
callerid = "BSD Foren-Mama" <200>
qualify = yes
extensions.conf
^^^^^^^^^^^^^^^
Jetzt geht es los, wir wollen telefonieren und dazu muss Asterisk
wissen, wohin
.. code:: tcsh
[general]
static = yes
writeprotect = no
clearglobalvars = yes
language=de ; Deutsche Sprachprompts
[bsdforen]
exten => _10X,1,Dial(SIP/${EXTEN},600,r)
exten => _10X,n,Hangup()
exten => _20X,1,Dial(IAX2/${EXTEN},600,r)
exten => _20X,n,Hangup()
exten => _30X,1,Dial(IAX2/${EXTEN},60,r)
exten => _30X,n,Dial(SIP/100,60,r)
exten => _30X,n,Hangup()
exten => _7XX,1,Dial(IAX2/Asterisk-Server-B/${EXTEN},120,r)
exten => _7XX,n,Hangup
exten => _00[1-9].,1,Dial(SIP/${EXTEN:1}@ext-sip,120,r) ; **Behandelt KEINE Notrufnummer!!!!!!!!**
exten => _00[1-9].,n,Hangup()
[von-ext]
exten => 0041123456,1,Dial(SIP/100,120,rR)
exten => 0041123456,n,Hangup()
Hier sollte unser Konstrukt an Konfigurationen in der iax.conf /
sip.conf schlüssig werden. Wie zu sehen ist, haben wir die Sektion
[bsdforen] welche bei jedem Account in der IAX/SIP Konfig als context
gesetzt wurde. Asterisk sucht also hier nach einer Wahlregel.
Alle SIP Konten sind im Bereich 100-109 und alle IAX Konten im Bereich
200-209 zu finden. Natürlich kann auch ein IAX User auf einen SIP
Anschluss anrufen und umgekehrt.
Die Zahl 600 ist ein TIMEOUT, nach dieser Zeit wird der Anruf zu Schritt
2 geleitet, also dem Hangup(). Das **r** bedeutet RING, setzt man ein
**m** so wird MOH gestartet. Das MOH Modul muss
natürlich konfiguriert und dementsprechende Sound Files auf der Anlage
abgelegt sein. Bitte denkt daran, dass ihr GEMA-freie Musik dort
verwendet. MOH wird nämlich rechtlich als music-on-demand verstanden.
Im dritten Beispiel ruft ein User eine Nummer im 300er Kreis,
beantwortet nach 60s niemand diesen Anruf, so wird der Anrufer auf die
Nummer 100 geleitet, ist auch dort nach 60s keiner erreichbar, wird er
beendet.
Im vierten Block definieren wir, dass alle Nummern im Bereich von
700-799 per IAX an den Asterisk-Server-B geleitet werden. Asterisk-B
braucht also eine Wahlregel für diese Nummern!
Im fünften Block behandeln wir unsere ausgehenden Gespräche. Zu sehen
ist 00 am Anfang, was bedeutet wir müssen für externe Anliegen eine NULL
vorwählen. Mit **EXTEN:1** teilen wir Asterisk mit, dass er diese Null
abschneiden soll, beim Provider kommt also die richtige Nummer an.
.. warning::
Bitte vergesst nicht für die Notrufnummer einen Block zu definieren! Beim
jeweiligen Anbieter muss dieser dann auf den richtigen Standort des
Anschlusses geroutet werden. Leider gibt es derzeit noch keine Testnummer um
zu prüfen, ob das Routing korrekt funktioniert.
.. code:: tcsh
exten => 133,1,Dial(SIP/${EXTEN}@ext-sip,600,r)
In diesem Beispiel würde man die 133 (Polizei Österreich) über den
externen SIP Anbieter routen. Natürlich ist es auch möglich den Block
für ausgehende Gespräche zu modifizieren, sodass er Notrufe absetzen
kann. Da in vielen Firmen jedoch die Null für extern Standard ist, und
nicht immer gewährleistet werden kann, dass nicht ein "fremder" einen
Notruf absetzten muss, würde ich **immer** die Wahlregel einbauen!
Im Block [von-ext] behandeln wir unsere externe Rufnummer, hier die
0041123456. Ruft jemand diese Nummer an, wird er an die 100
weitergeleitet, ist auch dort nach 60s keiner erreichbar, wird er
beendet.
.. code:: tcsh
[von-ext]
exten => 0041123456,1,Dial(SIP/100,60,r)
exten => 0041123456,n,Hangup()
.. warning::
Ist der SIP User **offline** so wird das TIMEOUT NICHT berücksichtigt und
sofort zum nächsten Schritt weitergeleitet!
Starten der Jail für Asterisk
-----------------------------
Jail starten
.. code:: tcsh
jexec -c asterisk
Im Übrigen könnte die Jail wieder beenden (entfernt) werden.
.. code:: tcsh
jexec -r asterisk
Konfiguration der Jail für Asterisk
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wir setzen folgenden Eintrag in der JAIL /etc/rc.conf!
.. code:: tcsh
asterisk_enable="YES"
oder manuell mit
.. code:: tcsh
jexec asterisk
Asterisk CLI
^^^^^^^^^^^^
Wir verbinden uns mit der Asterisk Command Line.
.. code:: tcsh
jexec asterisk -r
Ist beim Starten von Asterisk kein Fehler aufgetreten sollte die Ausgabe
in etwa so aussehen.
``Asterisk 13.19.0, Copyright (C) 1999 - 2014, Digium, Inc. and others.
Created by Mark Spencer
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Running as user 'asterisk'
Running under group 'asterisk'
Connected to Asterisk 13.19.0 currently running on asterisk (pid = 1299)
asterisk*CLI>``
Das Kommando ``sip show peers`` zeigt uns nun die registrierten Sip User
an.
.. code:: tcsh
asterisk*CLI> sip show peers
Name/username Host Dyn Forcerport Comedia ACL Port Status Description
100/xxx 192.168.xxx.xxx D Yes Yes A 5060 OK (35 ms)
101/xxx xxx.xxx.xxx.xxx D Yes Yes 63464 OK (94 ms)
102/xx xxx.xxx.xxx.xxx D Yes Yes 18556 OK (41 ms)
3 sip peers [Monitored: 3 online, 0 offline Unmonitored: 0 online, 0 offline]
Das selbe Kommando gibt es auch für IAX2, ``iax2 show peers``
.. code:: tcsh
asterisk*CLI> iax2 show peers
Name/Username Host Mask Port Status Description
xxx.xxx.xxx.xxx (S) 255.255.255.255 4569 (T) (E) OK (48 ms)
xxx.xxx.xxx.xxx (S) 255.255.255.255 4569 (T) (E) OK (36 ms)
iax2 peers [3 online, 3 offline, 0 unmonitored]
Das ``(E)`` bei Status bedeutet, encrypted.
.. code:: tcsh
asterisk*CLI> sip show registry
Host dnsmgr Username Refresh State Reg.Time
xxx.xxx.xxx.xxx:5060 N xxxxxxxxxx 105 Registered Sun, 08 Apr 2018 14:07:51
1 SIP registrations.
Das Kommando ``core show channels`` zeigt alle aufgebauten
Gesprächsverbindungen an.
.. code:: tcsh
asterisk*CLI> core show channels
Channel Location State Application(Data)
IAX2/Asterisk-Server-B-30687 (None) Up AppDial((Outgoing Line))
SIP/XXX-00000007 700@privat:1 Up Dial(IAX2/SEC1/650,80,m(spezial)
2 active channels
1 active call
8 calls processed
Hier zu sehen ist ein bestehender IAX2 Kanal welcher über Extension SEC1
aufgebaut wurde. Wohin der Anruf auf der zweiten Asterisk geleitet wird,
ist nicht ersichtlich.
Der Anrufer, hier XXX versucht die Nummer 700 zu erreichen, wir haben in
der extensions.conf definiert, dass alle 7XX Nummer über den IAX2 Peer
(Asterisk-Server-B) geroutet werden. Dieser Versucht nun das Gespräch zu
vemitteln, folglich muss auf dem zweiten Asterisk eine Wahlregel für den
Bereich 700 erstellt sein.
nützliche Infos
---------------
Mit dem Kommando ``core show help`` kann sich Hilfe für die
verschiedenen Asterisk Module ausgegeben werden. Hier ein Auszug.
.. code:: tcsh
sip show channel -- Show detailed SIP channel info
sip show domains -- List our local SIP domains
sip show history -- Show SIP dialog history
sip show inuse [all] -- List all inuse/limits
Nun kann man mit dem Kommando ``core show help sip show channel`` alle
Information zur Benutzung dieses Kommandos ausgegeben lassen.
.. code:: tcsh
asterisk*CLI> core show help sip show channel
Usage: sip show channel
Provides detailed status on a given SIP dialog (identified by SIP call-id).
Ändert man während dem Betrieb Konfigurationsfiles, so können diese mit
.. code:: tcsh
sip reload # sip.conf neu laden
iax2 reload # iax.conf neu laden
core reload # gesamte Konfiguration neu laden
.. warning::
Manche Konfigurationsänderungen erfordern einen kompletten NEUSTART von
Asterisk. Ist man nicht sicher, einfach ein "core stop now" absetzen und
anschliessend mit "jexec asterisk" neustarten. Laufende Gespräche
werden beim Neuladen von Konfigurationen nicht unterbrochen.
Möchte man Asterisk beenden, so wird der Befehl
.. code:: tcsh
core stop now
abgesetzt.
VoIP Anbieter unterscheiden sich oft im Ablauf der SIP Registrierung.
Die meisten stellen Konfigurationsbeispiele für die gebräuchlichsten
Telefonanlagen zur Verfügung, also im Fehlerfall mal die Webseite des
Anbieters besuchen und nach Beispielen suchen.
Auch bei der Signalisation von eingehenden Gesprächen gibt es
Unterschiede. Hier ein Beispiel wie der Schweizer Anbieter e-fon.ch
Gespräche vermittelt. Wir haben eine Registrierung am e-fon Server
jedoch beliebig viele Durchwahlnummern.
.. code:: tcsh
[EXTERN] ; Hier kommen die Anrufe rein
exten => s,1,Set(Durchwahlnummer=${SIP_HEADER(X-Number)})
exten => s,n,Goto(TELEFON,${Durchwahlnummer},1)
exten => s,n,Hangup()
[TELEFON]
exten => XXXXXXX100,1,Dial(SIP/100,20,r)
exten => XXXXXXX100,n,Answer()
exten => XXXXXXX100,n,Verbose(1,Mon-Sam Ansage)
exten => XXXXXXX100,n,Playback(/usr/local/share/asterisk/ansage/Ansage)
exten => XXXXXXX100,n,Hangup
exten => XXXXXXX200,1,Dial(SIP/200,20,r)
exten => XXXXXXX200,n,Answer()
exten => XXXXXXX200,n,Verbose(1,Mon-Sam Ansage)
exten => XXXXXXX200,n,Playback(/usr/local/share/asterisk/ansage/Ansage)
exten => XXXXXXX200,n,Hangup
Der Ablauf ist relativ einfach,
- wir setzen eine Variable
- springen in den Context [TELEFON] mit der entsprechenden
Durchwahlnummer
.. warning::
Es gibt keine Regel die eine nicht existierende Durchwahl behandeln würde.
Der Anruf wird in so einem Fall abgebrochen.
Blacklist
~~~~~~~~~
In der heutigen Zeit wird man immer öfter dazu gezwungen eine Rufnummer
als "böse" zu markieren und natürlich ist auch das kein Problem für
Asterisk. Mit ein paar einfachen Ergänzungen im Wählplan
"extensions.conf" kann man jede Nummer blacklisten.
::
[blacklist]
exten => _*4X[0-9].,1,Answer()
exten => _*4X[0-9].,n,Set(DB(blacklist/${EXTEN:2})=1)
exten => _*4X[0-9].,n,SayPhonetic(OK)
exten => _*4X[0-9].,n,Hangup()
exten => _*5X[0-9].,1,Answer()
exten => _*5X[0-9].,n,DBdeltree(blacklist/${EXTEN:2})
exten => _*5X[0-9].,n,SayPhonetic(OK)
exten => _*5X[0-9].,n,Hangup()
Dieser Block setzt oder löscht eine Nummer aus der Blacklist. Im
nächsten Schritt wird bei eingehenden Anrufen kontrolliert ob sie auf
der Blacklist vermerkt sind.
::
[incoming]
exten => ,1,GotoIf(${DB_EXISTS(blacklist/${CALLERID(num)})}?blacklisted,s,1)
exten => ,n,Dial(SIP/XXX,120,rR)
fällt diese Kontrolle positiv aus, so greift die Zeile "GotoIf" und wir
springen in den Block "blacklisted".
::
[blacklisted]
exten => s,1,NoOp("This number is Blacklisted +++++++++++++++++++++++++++++")
exten => s,n,Hangup
Externe Einwahl
~~~~~~~~~~~~~~~
Möchte man eine **interne** Leitung von aussen, dann kann man folgendes
in der extensions.conf eintragen. Der Anrufer muss eine
Zahlenkombination eingeben, danach erhält er den internen Wählton und
kann je nach Konfiguration jede interne sowie externe Rufnummer wählen.
Wir überprüfen ob es sich beim eingehenden Anruf um unsere Nummer
handelt. Ist dies der Fall verschieben wir ihn in den "AUTH" Block.
Danach fragt Asterisk nach einem Passwort und gibt uns anschliessend
eine interne Leitung.
::
[incoming]
exten => ,1,GotoIf($["${CALLERID(number)}" = ""]?AUTH,s,1)]
exten => ,n,Dial(SIP/XXX,60,r)
[AUTH]
exten => s,1,Authenticate()
exten => s,n,DISA(no-password,privat)
exten => s,n,Hangup
.. warning::
Auch wenn solche externen Zugänge mit Passwörter abgesichert werden, gibt es
gewisse Risiken, deshalb empfiehlt es sich immer die eingehenden Rufnummer zu
überprüfen!
Öffnungszeiten im Dialplan
~~~~~~~~~~~~~~~~~~~~~~~~~~
Möchte man die Geschäftszeiten definieren könnte der Wählplan so
aussehen.
- MO-FR 08:00 - 12:30 & 13:30 - 17:00 geöffnet
- SA 08:00-15:00 geöffnet
Trifft ein Anruf ausserhalb dieser Zeiten ein, wird ein Audiofile
**wir_sind_nicht_da** abgespielt
::
[von-voip-provider]
exten => _AAAAAAXXX,1,GotoIfTime(08:00-12:30|mon-thu|*|*?open,${EXTEN},1)
exten => _AAAAAAXXX,n,GotoIfTime(13:30-16:59|mon-thu|*|*?open,${EXTEN},1)
exten => _AAAAAAXXX,n,GotoIfTime(08:00-14:59|fri|*|*?open,${EXTEN},1)
exten => _AAAAAAXXX,n,Answer()
exten => _AAAAAAXXX,n,Playback(/usr/local/share/asterisk/**wir_sind_nicht_da**)
exten => _AAAAAAXXX,n,Hangup()
[open]
exten => ,1,Dial(SIP/${EXTEN:-3},25,rtT);
exten => ,n,Hangup();
Während den Öffnungszeiten leiten wir Anrufe an [open] und der
entsprechenden Extension [{EXTEN:-3}] weiter. Die -3 bedeutet, wir
verwenden nur die letzten 3 Stellen.
Sicherheit
----------
Angriffe auf VoIP Anlagen sind sehr populär, es gibt daher einige
Vorsichtsmaßnahmen welche zu beachten sind. Wird die Anlage privat
betrieben, stellt sich die Frage ob es ausreicht, einen prepaid
Anschluss zu verwenden. Ist dies der Fall, hat man bereits eine weitere
Sicherheitsbarriere geschaffen.
Der wichtigste Punkt ist natürlich die Wahl der Passwörter. Die meisten
Angriffe die ich beobachten konnte, basieren auf primitive Brute-Force
Attacken, welche durch starke Passwörter abgewehrt werden können.
Astersik bietet auch die Möglichkeit, durch eine ACL (Access Control
List) IP White- und Blacklists zu definieren.
Dazu wird die Datei acl.conf wie folgt erstellt
::
[extern]
permit=8.8.8.0/255.255.255.0
In der sip.conf / iax.conf wird die ACL wie folgt einem SIP Konto
zugewiesen
::
[peer1]
......
......
......
acl=extern
.. warning::
**peer1** kann sich nur registrieren, wenn er sich im richtigen Subnetz
8.8.8.0/24 befindet. Dies bedingt natürlich, dass er eine statische IP
Adresse besitzt.
Debugging
---------
Gibt es Probleme mit SIP oder IAX Konten so kann man das Debugging in
der Asterisk CLI aktivieren.
.. code:: tcsh
sip set debug peer 500
oder für den gesamten SIP Traffic
.. code:: tcsh
sip set debug on
* :ref:`genindex`
Zuletzt geändert: |date|