|
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.
HardwareAlle 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. ServerAls 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. TelefoneDas 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
SoftwareDamit 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
KonfigurationWichtig sind zunächst nur die Dateien sip.conf und extensions.conf sip.confEs 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.confDiese 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 !"
|