Asterisk Konfiguration
Asterisk Konfiguration Drucken E-Mail
Geschrieben von: Administrator   
Dienstag, 25. Dezember 2007 08:45

Aufbau einer Asterisk Telefonanlage mit VoIP.

Voraussetzungen

  • VoIP Zugang (z.B. Sipgate)
  • Kleiner PC, z.B. ausrangierter Notebook
  • SIP kompatible Telefone  (z.B. Allnet ALL7950 oder Siemens Gigaset C450IP)

In dem Beitrag wird der Aufbau einer kleinen SoHo Anlage beschrieben, der jedoch Möglichkeiten zur Abwehr von Telefonspam bietet.

Hardware

Alle Komponenten sind über ein Fast-Ethernet miteinander verbunden, dazu werden verschiedene Workgroup Switches verwendet. Weiterhin befinden sich alle Telefone und der Asterisk Server in einem dedizierten VLAN. Der Zugang aus anderen WLANs ist nur über eine Firewall möglich.

Server

Als Server dient ein alter Toshiba Tecra T8100 Notebook mit einer 700MHz P3 CPU und 256 MByte RAM. Ist das Display zugeklappt, dann sinkt die Leistungsaufnahme auf ca. 10-15W. Im T8100 steckt weiterhin eine PCMCIA Ethernet Karte.

Telefone

Das System läuft seit ca. einem Jahr erfolgreich mit folgenden Telefonen:

  • Siemens Gigaset C450IP, dabei sind jedoch Instabilitäten vorhanden, deren Ursache in der Firmware der Telefone liegen.
  • Allnet ALL7950, hier gab es bisher noch nie Probleme
  • AVM Fritzbox 7950, auch die läuft sehr stabil und dient in dieser Installation als Gateway zwischen alten ISDN Telefonen und VoIP

 

Software

Damit es möglichst wenig Probleme mit Updates gibt und auch die Lösung auch vernünftig wartbar ist, wurden nur fertige Pakete der Debian Distribution benutzt.

Installiert wurde ein Debian Minimalsystem mit folgenden Zusätzen:

  • SSH
  • OpenSwan (für Ankopplung an VPN)
  • asterisk
  • asterisk-config
  • asterisk-prompt-de
  • asterisk-sounds-main


Die Konfiguration der Asterisk erfolgt im Verzeichnis /etc/asterisk

Konfiguration

Wichtig sind zunächst nur die Dateien sip.conf und extensions.conf

sip.conf

Es gibt in diesem Beispiel 2 Sipgate Verbindungen, einer geht zu einer ortsgebundenen Nummer, die zweite Verbindung ist eine 0180 Nummer. Diese wird immer angegeben, wenn man sich irgendwo mit Telefonnummer registrieren muss. 

[general]
language=de
useragent=Asterisk-PBX
port=5060
context=default
tos=lowdelay
disallow=all
allow=alaw
allow=ulaw
allow=gsm
allow=ilbc
bindaddr = 0.0.0.0
qualify = yes

register => 1234567: Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. /1234567
register => 2345678: Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. /2345678

[1234567]
type=friend
insecure=very
username=1234567
secret=geheim
host=sipgate.de
fromuser=1234567
fromdomain=sipgate.de
nat=no
context=outgoing
canreinvite=no
qualify = yes
dtmfmode=info

[2345678]
type=friend
insecure=very
username=2345678
secret=geheim
host=sipgate.de
fromuser=2345678
fromdomain=sipgate.de
nat=no
context=outgoing
canreinvite=no
qualify = yes
dtmfmode=inband

[500]
type=friend
username=500
secret=geheim1
callerid="Telefon1" <500>
host=dynamic
dtmfmode=info
nat=yes
qualify = yes

[501]
type=friend
username=501
secret=geheim2
callerid="Telefon2" <501>
host=dynamic
dtmfmode=info
nat=yes
qualify = yes

[503]
type=friend
username=503
secret=geheim3
callerid="AVM Fritzbox" <503>
host=dynamic
dtmfmode=info
nat=yes
qualify = yes

[504]
type=friend
username=504
secret=geheim4
callerid="Nokia E60" <504>
host=dynamic
dtmfmode=info
nat=yes
disallow=all
allow=alaw
allow=gsm
qualify = yes

extensions.conf

Diese Datei wirkt auf Anfänger oft ein wenig kryptisch, so wie früher die berüchtigte sendmail.cf ;-) An der Asterisk ist folgendes angeschlossen:

  • SIP Telefone mit den Nummern 500 und 501
  • AVM Fritzbox mit der Nummer 503
  • Nokia E60 über WLAN angeschlossen mit der Nummer 504
  • Zwei weitere Asterisk Anlagen

[general]

static=yes
writeprotect=no

[globals]
IAXINFO=guest

[default]
exten => s,1,SetMusicOnHold(custom)
include => calls ; Den Context ''calls'' einbinden
include => outgoing ; Den Context ''outgoing'' einbinden
include => iax ; Den Context ''iax'' einbinden

; Eintrag der immer enthalten sein sollte, denn er ist praktisch zum testen

exten => 663,1,Playback(demo-echotest)
exten => 663,2,Echo
exten => 663,3,Playback(demo-echodone)

exten => _7.,1,Pickup(${EXTEN:1})

; used to record prompts
exten => 205,1,Answer
exten => 205,2,Wait(2)
exten => 205,3,Record(/var/lib/asterisk/asterisk-recording%d:ulaw)
exten => 205,4,Wait(2)
exten => 205,5,Playback(${RECORDED_FILE})
exten => 205,6,Wait(2)
exten => 205,7,Hangup

; Hier wird ein Anrufer aufgefordert, die "1" zu wählen
; wofür das gut ist, kommt später
exten => 206,1,Answer
exten => 206,2,Wait(2)
exten => 206,3,Background(press1tospeaktome)
exten => 206,4,Wait(3)
exten => 205,5,Hangup

; Hier gibt es noch zwei Asterisk Anlagen, die über ein
; IPsec VPN gekoppelt sind. Damit sind alle Gespräche
; über dieses Netz natürlich auch verschlüsselt.
; Die Passwörter werden daherauch verschlüsselt übertragen
[iax]
exten => _55512.,1,Dial(IAX2/cf: Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. /${EXTEN:5}@demo)
exten => _55512.,2,Hangup
exten => _55513.,1,Dial(IAX2/cfvpn: Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können. .0.9/${EXTEN:5}@demo)
exten => _55513.,2,Hangup

; Die lokale Nummer 500 ist darf dieses Netz
; benutzen
exten => 500,1,Dial(SIP/500,30,Ttr)
exten => 500,2,Hangup

; ebenso die Nummer 505
exten => 504,1,Dial(SIP/504,60,Ttr)
exten => 504,2,Hangup

; Unser context ''calls'' der über den Include=> calls im context ''default'' eingebunden wird.

[calls]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SIP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 500
exten => 500,1,Dial(SIP/500,30,Ttr)
exten => 500,2,VoiceMail(u6500)
exten => 500,3,Hangup

; 501
exten => 501,1,Dial(SIP/501,60,Ttr)
exten => 501,2,Hangup

; AVM
exten => 503,1,Dial(SIP/503,60,Ttr)
exten => 503,2,Hangup

; Handy
exten => 504,1,Dial(SIP/504,60,Ttr)
exten => 504,2,Hangup

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Voicemail
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

exten => 6500,1,VoicemailMain(s6500)
exten => 6500,2,Hangup

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

exten => 6000,1,Answer
exten => 6000,2,MusicOnHold()

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error Handler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Invalid
exten => i,1,Hangup

; Timeout
exten => t,1,Hangup

; Absolutes Timeout
exten => T,1,Hangup

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PSTN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[outgoing]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Amtsvorwahl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Für ausgehende Gespräche muss die 0 vorgewählt werden
; und es wird Sipgate 1234567 verwendet.
exten => _0.,1,Dial(SIP/${EXTEN:1}@1234567)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Ankommende Gespraeche
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Sipgate

exten => 1234567,1,NoOp(${CALLERID})
exten => 1234567,2,GotoIf($["${CALLERIDNUM}" = ""]?1234567|1000)
exten => 1234567,3,GotoIf($["${CALLERIDNUM}" = "0"]?1234567|1000)
exten => 1234567,4,GotoIf($["${CALLERIDNUM}" = "Unknown"]?1234567|1000)
exten => 1234567,5,Dial(SIP/500&SIP/501&SIP/503&SIP/505,90,Ttr)
exten => 1234567,101,Hangup
exten => 1234567,1000,Set(TIMEOUT(response)=30)
exten => 1234567,1001,Background(press1tospeaktome)
exten => 1234567,1999,Hangup
exten => 1234567,2000,Busy
exten => 1234567,2001,Hangup

exten => 1,1,Dial(SIP/500&SIP/501&SIP/503&SIP/504,90,Ttr)
exten => 1,n,Hangup

exten => 2345678,1,Dial(SIP/500&SIP/501&SIP/503&SIP/504,60,Ttr)
exten => 2345678,2,VoiceMail(u6500)
exten => 2345678,3,Hangup

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error Handler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Invalid
exten => i,1,Hangup

; Timeout
exten => t,1,Hangup

; Absolutes Timeout
exten => T,1,Hangup

Damit steht dann eine komplette Infrastruktur zur Verfügung. Falls ein Anrufer keine Caller-ID schickt, sich also nicht identifiziert, dann muss er zunächst die Ziffer "1" wählen, damit er durchgestellt werden. Tut er das nicht, klingelt kein Telefon. Für Anrufautomaten und Callcenter bedeutet das: "Wir müssen leider draussen bleiben !"

 

 

Aktualisiert ( Dienstag, 25. Dezember 2007 17:26 )