englisch | deutsch

Qualifizierter Fax-Sendebericht im PDF-Format mit HylaFAX

Faxen am VOIP-Anschluss mit Asterisk und HylaFAX unter Debian Wheezy auf einem Dockstar

II. Einrichtung des Asterisk-Servers

Die Einrichtung des Asterisk-Servers (Version 1.8.13) war leicht und lief problemlos. Zu Asterisk gibt es zahlreiche gute und frei verfügbare Anleitungen im Internet, u.a. das Asterisk-Buch von Stefan Wintermeyer oder auch die ausführliche Asterisk-Dokumentation selbst, so daß ich hier nur die wesentlichsten Aspekte der Installation und Einrichtung wiedergebe. Alle erforderlichen Einstellungen für die Einrichtung eines VOIP-Faxgerätes (hier am Beispiel von Sipgate) werden nachfolgend aufgeführt, eine ausführliche Erklärung der Asterisk-Funktionsprinzipien und weiterführender Telefonie-Konfigurationen ist an dieser Stelle jedoch nicht das Ziel.

2.1 Installation und Starten des Servers

Mit Root-Rechten ausgestattet empfiehlt sich zunächst eine Aktualisierung der Paketlisten des Debian-Paketmanagers und ggf. die Aktualisierung des Basissystems

$ apt-get update
$ apt-get dist-upgrade

Anschließend erfolgt die Asterisk-Installation mitsamt der Default-Konfigurationsdateien über die Debian-Paketverwaltung.

$ apt-get install asterisk asterisk-config

Optional können noch Sprachausgabe-Pakete in verschiedenen Sprachen installiert werden. Ich verwende sie hier nicht und gehe daher nicht weiter darauf ein.

$ apt-get install asterisk-prompt-de
$ apt-get install asterisk-prompt-en

Damit ist der Asterisk-Server bereits lauffähig. Es ist ratsam, Asterisk nicht mit Root-Rechten zu betreiben, sondern z.B. den eingeschränkten Benutzer 'asterisk:asterisk' (benutzer:gruppe) zu verwenden.

Bei der Asterisk-Installation über den Paketmanager wird der passende Benutzer üblicherweise automatisch eingerichtet und in der Asterisk-Konfiguration voreingestellt. Die entsprechende Konfigurationsdatei befindet sich unter:

/etc/asterisk/asterisk.conf

Die entscheidenden Angaben sind:

runuser = asterisk
rungroup = asterisk

Möglicherweise sind beide Einstellungen auskommentiert

;runuser = asterisk
;rungroup = asterisk

da es sich hier bereits um die Default-Einstellung von Asterisk handelt. Es schadet jedoch nicht, die Semikolons zu entfernen, um auf Nummer sicher zu gehen. Startet man Asterisk von Hand über die Konsole, so können der ausführende Benutzer (-U) und die Gruppe (-G) auch explizit angegeben werden:

$ asterisk -U asterisk -G asterisk

Asterisk läuft standardmäßig im Hintergrund und wird in der Regel mit dem System gestartet. Dazu wird bei der Installation über den Paketmanager ein passendes Autostart-Skript angelegt:

/etc/init.d/asterisk

Will man auf den Asterisk-Server zugreifen, verbindet man sich üblicherweise mittels Remote-Konsole:

$ asterisk -r

Man kommt so in in das Asterisk-CLI ('command line interface'). Hier lässt sich ein Neueinlesen der Konfigurationsdateien beispielsweise mit einem einfachen

asterisk*CLI> reload

bewerkstelligen. Ein sanftes Beenden oder wahlweise Neustarten des Serves kann mit einem der beiden Befehle

asterisk*CLI> core stop gracefully
asterisk*CLI> core restart gracefully

eingeleitet werden. Auf diese Weise werden laufende Telefonate nicht unterbrochen.

Weiteres zur Kommunikation mit dem Server oder auch verschiedenen Start-Parametern ist u.a. der Asterisk-Dokumentation zu entnehmen.

2.2 Abschalten einzelner Module

Asterisk wird mit zahlreichen Erweiterungsmodulen für verschiedene Funktionen ausgeliefert und ist standardmäßig so eingerichtet, sämtliche Module, die sich in dem Verzeichnis

/usr/lib/asterisk/modules/

befinden, beim Start des Servers zu laden. Es gibt einige Module, die im Normalfall nicht benötigt werden jedoch zu Server-Fehlermeldungen führen, wenn sie nicht passend konfiguriert werden. Diese Fehlermeldungen sind i.d.R. nicht kritisch aber natürlich unschön.

Abhilfe schafft das Entfernen der entsprechenden Module aus dem Modulverzeichnis oder ein passender Eintrag in der zugehörigen Konfigurationsdatei:

/etc/asterisk/modules.conf

Über diese Datei kann das Laden einzelner Module unterbunden werden, ohne das automatische Einbinden von Modulen komplett abszuschalten (was mittels 'modules.conf' ebenfalls möglich ist). Ich habe hier u.a. folgende Eintragungen für von mir nicht verwendete Erweiterungen vorgenommen, um diese nicht mehr einzubinden und damit unnötige Fehlermeldungen zu vermeiden:

noload => res_ais.so ; Clusterbetrieb
noload => chan_skinny.so ; Cisco 7900 Telefone
noload => res_config_ldap.so ; LDAP-Anbindung
noload => chan_vpb.so ; Voicetronic-Karten

2.3 Einrichten des SIP-Accounts

Von den verschiedenen Rufnummern im Sipgate-Basic-Account soll eine ausschließlich als Faxnummer verwendet werden. Anrufe an diese und von dieser Nummer sollen als solche erkannt und getrennt behandelt werden. Bei ausgehenden Gesprächen soll die Rufnummer korrekt durch das Endgerät übermittelt werden. Der Einfachheit halber nehmen wir im weiteren Verlauf an, dass lediglich die 2 (erdachten) Rufnummern +49 (1234) 9988771 und +49 (1234) 9988772 in dem Account liegen, wobei die Rufnummer mit der Endziffer 2 als Faxnummer dienen soll.

Für die Einrichtung eines SIP-Anschlusses und die Verteilung der Anrufe per Wahlregeln sind zunächst 2 Asterisk-Konfigurationsdateien von Bedeutung:

/etc/asterisk/sip.conf
/etc/asterisk/extensions.conf

In 'sip.conf' werden die allgemeinen SIP-Einstellungen für den Asterisk-Server vorgenommen, Sip-Geräte und -Accounts eingestellt und Wahlregel-Kontexte benannt, die für die SIP-Geräte und -Accounts gelten sollen. In 'extensions.conf' werden die einzelnen Wahlregeln definiert. Beide Dateien werden mit den nachfolgenden Einstellungen komplett neu aufgesetzt. Die Originaldateien können umbenannt und als Backup behalten werden.

In der SIP-Konfiguration 'sip.conf' wird zunächst ein allgemeiner Abschnitt für den Server eingerichtet:

[general]
 context=unauthenticated
 bindport=5070
 bindaddr=0.0.0.0
 realm=dyndnsadresse.anbieter.foo
 externhost=dyndnsadresse.anbieter.foo:5070
 localnet=192.168.178.0/255.255.255.0
 nat=comedia
 srvlookup=yes
 allowguest=no
 alwaysauthreject=yes

Der Asterisk-Server soll über eine DynDNS-Adresse ('dyndnsadresse.anbieter.foo') angesprochen werden können. Um Konflikte mit der Fritz!Box zu vermeiden, wird der SIP-Port des Asterisk-Servers vom Standardwert '5060' auf '5070' verlegt. Für diesen Port sollte in der Fritz!Box eine UDP-Portfreigabe mit Weiterleitung auf den Asterisk-Server eingerichtet werden.

Die Netzmaske des lokalen Netzwerkes, in dem sich der Asterisk-Server befindet, wird eingestellt und der Server für NAT-Betrieb konfiguriert.

Gastanmeldungen werden untersagt. Bei Bruteforceangriffen auf Konten des Asterisk-Servers wird Angreifern mit falschem Passwort nicht mitgeteilt, ob ein existierender Kontoname erraten wurde. Anmeldungen, die nicht anderweitig einem dedizierten Kontext zugeordnet werden, werden aus Sicherheitsgründen in den Kontext "unauthenticated" verwiesen, der leer bleibt und keine Anrufe ermöglicht. Alle undefinierten Fälle landen somit standardmäßig in einem sicheren Kontext.

Anschließend wird das Sipgate-Konto über folgende Einträge in der 'sip.conf' registriert und eingerichtet:

register => 7654321:passw@sipgate.de/7654321
[7654321]
 type=peer
 qualify=yes
 host=sipgate.de
 fromdomain=sipgate.de
 fromuser=7654321
 defaultuser=7654321
 secret=passw
 insecure=invite
 directmedia=no
 disallow=all
 allow=alaw
 allow=ulaw
 context=sipgate_in

Dabei sind die von Sipgate vergebene SIP-ID (statt '7654321') und das SIP-Passwort (statt 'passw') zu verwenden. Durch die Einstellung 'qualify=yes' kann theoretisch auf die Freigabe von Port '5070' in der Fritz!Box für den Asterisk-Server verzichtet werden, wenn keine direkten Verbindungen von außen auf den Asterisk erfolgen sollen und Telefonie nur über den Sipgate-Account geplant ist.

Als Codecs werden alaw und ulaw zugelassen. Eine Einschränkung auf diese beiden Codecs ist für Telefonate nicht zwingend erforderlich. Für das Faxmodem wird später auschließlich ulaw zugelassen. Ankommende Anrufe über den Sipgate-Account werden in den Kontext 'sipgate_in' verwiesen.

2.4 Portfreigaben

Damit Sip-Verbindungen ausgehend und eingehend zuverlässig zustandekommen, sind neben der bereits angesprochenen UDP-Weiterleitung auf Port '5070' zusätzliche Portfreigaben für RTP-Verbindungen erforderlich. Das von Asterisk genutzte Port-Intervall für RTP-Verbindungen lässt sich in der Datei

/etc/asterisk/rtp.conf

einstellen. Asterisk verwendet bis zu vier RTP-Ports für jedes laufende Gespräch, gibt diese jedoch u.U. nicht sofort nach Gesprächsende wieder frei. Es ist daher nicht ratsam, die Zahl der Portfreigaben exakt auf das Vierfache der maximal gleichzeitig geführten Gespräche zu begrenzen. Mehrere tausend Ports für eine einzelne Verbindung freizugeben, ist allerdings auch nicht nötig. Für eine einzelne Leitung ist ein Intervall von 100 Ports bereits mehr als ausreichend:

rtpstart=30000
rtpend=30100

Die entsprechenden Ports müssen anschließend in der Fritz!Box für UDP-Verbindungen freigegeben und auf den Asterisk-Server geleitet werden.

2.5 Wahlregeln für die Fax-Verbindungen

Nun werden die Wahlregeln in der Datei 'extensions.conf' konfiguriert. Auch hier steht zunächst wieder ein allgemeiner Teil:

[general]

In diesem lassen sich verschiedene Einstellungen vornehmen, die an dieser Stelle aber nicht erforderlich sind. Dieser Abschnitt bleibt daher leer.

Es folgt eine einfache Wahlregel für einkommende Sipgate-Gespräche unter dem Kontext 'sipgate_in', auf den wir zuvor in der Datei 'sip.conf' verwiesen haben, und den wir nun definieren:

[sipgate_in]
 exten => 7654321,1,Goto(siptrunk,${CUT(CUT(SIP_HEADER(To),@,1),:,2)},1)

Diese Wahlregel wertet den SIP-Header 'To' aus, um die angerufene Nummer zu ermitteln, und verweist anschließend per 'Goto()' weiter in den (noch zu erstellenden) Kontext 'siptrunk'. In diesem wird dann die Regel mit der Priorität 1 für die herausgefundene Rufnummer aufgerufen.

Wird beispielsweise die Rufnummer +49 (1234) 9988772, die für Faxe verwendet werden soll, angerufen, so wird diese von Sipgate im 'To'-SIP-Header in folgendem Format übermittelt:

<sip:004912349988772@sipgate.de>

Die zuvor genannte Wahlregel entfernt mittels 'CUT()' zunächst alles hinter und anschließend alles vor der Rufnummer. Hier erhielte man als Ergebnis also die 004912349988772. Alternativ kann man für unseren einfachen Anwendungsfall z.B. auch folgende Wahlregel in 'extensions.conf' eintragen:

[sipgate_in]
 exten => 7654321,1,Goto(siptrunk,${SIP_HEADER(To):-19:7},1)

Diese Wahlregel zählt 19 Stellen von hinten ab und übernimmt dann 7 Ziffern. Sie würde im Beispiel also 9988772 ermitteln. So lassen sich die Wahlregeln leicht und vielfältig an die eigenen Bedürfnisse anpassen. Nehmen wir im weiteren Verlauf an, dass wir diese vereinfachte Wahlregel in 'extensions.conf' eingefügt haben. Nun wird der bereits erwähnte Kontext 'siptrunk' hinzugefügt:

[siptrunk]
 exten => 9988772,1,Dial(IAX2/iaxmodem)
 exten => 9988772,n,Hangup

Wir erinnern uns: über den Kontext 'sipgate_in' wird ein Anruf an die ermittelte Rufnummer 9988772 in den Kontext 'siptrunk' und hier an die zugehörige Wahlregel mit der Priorität 1 geleitet. Das ist die erste der beiden Wahlregeln. Mit dieser wird nun der Anruf über das IAX-Protokoll ('IAX2') an das Gerät 'iaxmodem' weitergereicht. Bei diesem Gerät handelt es sich um das Faxmodem, das zu diesem Zeitpunkt noch nicht eingerichtet ist. Wir holen das am Ende der Asterisk-Konfiguration nach.

Die zweite Wahlregel verhindert, dass das Gespräch weiter in andere (hier nicht vorhandene) Wahlregeln durchfällt.

Es wird ausdrücklich kein Limit für die Dauer des Klingelns gesetzt. Der Asterisk-Server lässt es also bei einem Anruf auf die Faxnummer solange klingeln, bis abgehoben wird, die Gegenseite auflegt, oder z.B. Sipgate die Verbindung nach einer bestimmten Zeit unterbricht. Im Normalfall wird später jedoch das Fax sofort abnehmen.

Weitere Wahlregeln für die zweite Rufnummer +49 (1234) 9988771 definieren wir an dieser Stelle nicht. Anrufe an diese Nummer ignoriert Asterisk damit. Entsprechende Anrufe werden von der parallel bei Sipgate angemeldeten Fritz!Box an die angeschlossenen Endgeräte weitergeleitet. Auch Anrufe an die Faxnummer bekommt die Fritz!Box weiterhin mit und kann sie nach wie vor nicht unterscheiden, allerdings nimmt das Fax so zügig ab, dass kein Risiko besteht, dass jemand an einem der angeschlossenen Telefone dem Fax zuvorkommt. Im Normalfall klingeln die Telefone nicht einmal. Die Fritzbox zeigt Faxanrufe auf diese Weise aber weiterhin in der Anrufliste. Das ist gewünscht, ließe sich aber natürlich auch anders einrichten. Man könnte auch alle Rufnummern im Asterisk einrichten und die Fritz!Box statt bei Sipgate als Client am Asterisk-Server anmelden. Das ist jedoch ein anderes Thema.

Um später auch Faxe versenden zu können, muss noch ein Kontext für ausgehende Verbindungen des Faxmodems in die 'extensions.conf' eingefügt werden:

[fax_out]
 exten => _X.,1,Set(CALLERID(num)=4912349988772)
 exten => _X.,n,Set(CALLERID(name)=${CALLERID(num)})
 exten => _X.,n,SipAddHeader(P-Preferred-Identity:<sip:${CALLERID(num)}>)
 exten => _X.,n,Dial(SIP/${EXTEN}@7654321)

Mit diesen Regeln wird für ausgehende Faxrufe die passende Rufnummer als Caller-ID (sowohl für den Namen als auch für die Rufnummer) festgelegt und in den 'P-Preferred-Identity'-Header geschrieben. Der Anruf wird anschließend über den Sipgate-Account nach außen geleitet. Die Variable '${EXTEN}' enthält die gewählte Rufnummer.

Abschließend wird noch der zuvor in 'sip.conf' eingeführte leere Kontext 'unauthenticated' in die 'extensions.conf' eingetragen:

[unauthenticated]

Damit sind die SIP-Einstellungen und Wahlregeln vollständig. Es fehlt jedoch noch ein entscheidender Teil: das Faxmodem.

2.6 Einbinden von IAXmodem

Das Faxmodem, dessen eigentliche Installation in einem späteren Schritt folgt, wird (wie der Name 'IAXmodem' bereits andeutet) als IAX-Gerät in Asterisk eingebunden. Hierzu benötigen wir eine leere IAX-Konfigurationsdatei unter:

/etc/asterisk/iax.conf

In diese fügen wir zunächst wieder einen allgemeinen Teil ein:

[general]
 bindport=4569
 bindaddr=0.0.0.0
 calltokenoptional=127.0.0.1/255.255.255.0

Der Asterisk-Server achtet an Port '4569' auf IAX-Verbindungen, an allen ihm zur Verfügung stehenden Netzwerkinterfaces. Calltoken werden für Verbindungen vom lokalen Rechner auf optional gesetzt, da es ansonsten zu Fehlern bei der Anmeldung des IAXmodems kommt.

Nun wird das IAXmodem in 'iax.conf' eingetragen:

[iaxmodem]
 port=4570
 type=friend
 host=dynamic
 qualify=yes
 secret=passwmod
 requirecalltoken=no
 disallow=all
 allow=ulaw
 jitterbuffer=no
 trunk=no
 context=fax_out

Da der Port '4569' bereits vom Asterisk-Server verwendet wird, wird dem Modem der Port '4570' zugewiesen. Das Modem erhält außerdem ein frei zu wählendes sicheres Password (anstelle von 'passwmod') für die Anmeldung am Asterisk-Server. Auch hier werden Calltoken noch einmal explizit abgeschaltet, um Fehler bei der Anmeldung des IAXmodems zu vermeiden. Als Codec für das IAXmodem wird ausschließlich ulaw zugelassen. Für ausgehende Gespräche dient der zuvor in 'extensions.conf' eingerichtete Kontext 'fax_out'.

Damit ist die Einrichtung des IAXmodems in Asterisk abgeschlossen. Ein Neustart des Asterisk-Servers bzw. ein neues Einladen der Konfigurationsdateien rundet die Asterisk-Installation ab.

Anfang | zurück | vor | Ende