A propos | Laboratoire | Voisinage | Meilleurs articles | Nous aider

Panoramisk / Le druide de la VoIP 

Asterisk sécurisé avec relais en DMZ

La mise en place d’un Asterisk en entreprise ou à la maison apporte des opportunités de connectivité avec le monde extérieur hors du commun. De part son support du protocole SIP universel et de l’avancée de l’IAX chez la plupart des opérateurs de téléphonie, il est tout à fait envisageable de s’interconnecter avec le monde et profiter de la téléphonie sur IP, en l’occurrence sur le réseau Internet.
Mais l’ouverture est également synonyme de protection, indispensable pour palier les attaques et protéger son installation de téléphonie, indispensable au bon fonctionnement de l’organisation. Je vous présente ici une solution simple afin de mettre en place un Asterisk dans une zone démilitarisée (une DMZ) et de protéger ainsi l’installation interne.

Principe

Le principe de fonctionnement est très simple, on découpe son système de téléphonie en deux parties, une interne qui est proche des postes téléphoniques et de l’informatique et l’autre située en DMZ qui connecte l’organisation au monde extérieur. Cette séparation permet de limiter les risques d’intrusion en exposant une partie moins critique de son système de téléphonie au monde extérieur.

La connexion retenue dans cet exemple entre les deux entités utilise l’IAX, protocole spécifique à Asterisk et permettant l’interconnexion de systèmes. On aurait pu également utiliser SIP pour ce faire, mais l’IAX propose une authentification plus forte, un support protocolaire plus simple à gérer au niveau des pares-feux car n’utilisant qu’un seul port UDP contre une multitude pour le SIP, ou plutôt pour le RTP.

Afin de simplifier la solution technique, j’ai retenu un routage IAX sans enregistrement, on défini sur chaque Asterisk la façon dont on passe et reçoit les appels. Deux parties sont nécessaires sur chaque entité, le routage dans extensions.conf et la définition de l’acheminement dans iax.conf.

iax.conf

On met en place deux parties, une en mode peer qui permet de gérer les appels sortants et l’autre en mode user pour les appels entrants. Cette différentiation est une bonne habitude même si le mode friend pourrait sembler plus pratique, il lie de façon trop forte les 2 entités notamment au niveau des mots de passe.

Asterisk en DMZ

[TRUNK]
type=user
host=dynamic
context=ast-trunk
username=TRUNK
secret=internal

[Trunk]
type=peer
context=ast-trunk
username=TRUNK
secret=external
host=192.168.16.13

Asterisk en interne

[Trunk]
type=peer
context=ast-trunk
username=TRUNK
secret=internal
host=192.168.1.253

[TRUNK]
type=user
context=ast-trunk
username=TRUNK
secret=external
host=192.168.1.253

Les deux configurations sont symetriques, les mots de passes ont été simpifiés pour l’exemple. Les adresses IP externes sont en 192.168.1 et les internes sont en 192.168.16, ici pas d’équivoque quant à la communication entre les deux serveurs Asterisk.

extensions.conf

Dans le fichier extensions.conf on va, comme d’habitude, spécifier comment recevoir des appels et en envoyer.

Appels entrants depuis Internet

Ces appels arrivent en SIP ou en IAX sur des contextes spécifiques et doivent alors être acheminés vers l’Asterisk interne. On place donc lorsque cela est nécessaire une ligne du type:

exten => _.,1,Dial(IAX2/TRUNK/${EXTEN},30,r}

Ceci permet d’acheminer l’extension appelée sur le lien IAX identifié par l’utilisateur TRUNK (donc un contexte dans iax.conf avec un type=peer). L’appel sera alors à traiter sur l’Asterisk interne. On peut effectuer à ce niveau un premier filtrage afin de renforcer la sécurité.

Appels sortants depuis l’Asterisk interne

Les appels ayant été initiés par l’Asterisk en interne, par exemple par un utilisateur sur son téléphone aboutissent sur le contexte de type user. Il nous faut alors dans extensions.conf les traiter, par exemple comme ceci pour les appels vers la France via l’abonnement FreePhonie.

[ast-trunk]
; France
exten => _0ZXXXXXXXX,1,Macro(callENUM,NA,33${EXTEN:1})
exten => _0ZXXXXXXXX,2,Dial(SIP/3651${EXTEN}@freephonie_outbound,30,rT)

Remarquez le contexte ici correspondant à celui défini dans iax.conf.

Appels sortant depuis l’Asterisk interne

Il faut ici spécifier comment faire sortir nos appels vers la DMZ afin qu’ils puissent être acheminés sur les Centrex IP. Dans extensions.conf on spécifiera simplement une règle de routage dans le bon contexte:

exten => _0.,1,Dial(IAX2/TRUNK/${EXTEN},30,r)

Appels entrants sur l’Asterisk interne

Enfin sur l’Asterisk situé en interne, il faut traiter les appels qui ont été relayés depuis la DMZ vers le bon service, par exemple ici sur un téléphone:

[ast-trunk]
; from IAX
exten => _.,1,Dial(SIP/11,20,t)

Ici, le téléphone SIP/11 sera contacté pour tout appel en provenance de la DMZ, cas volontairement simplifié vous l’aurez compris.

Conclusion

Voici une solution simple permettant de n’exposer qu’une partie de son système Asterisk qui s’applique dans le principe à tout PABX IP supportant des protocoles standards. La faculté de routage apporté aux PABX IP permet également d’envisager des solutions de redondance et d’hébergement de la fonction téléphonique dans un data center disposant d’une bande passante importante.

Posté par: Alexandre Chauvin-Hameau, le 21/03/2007
Trackback | Popularité: 17%
marqué , , , , et
AddThis Social Bookmark Button
UselessNothing newInformativeLearned a lotAmazingly helpful (2 votes, average: 3.5 out of 5)
Loading ... Loading ...

Voir aussi

Et pourquoi pas

Laisser un commentaire

© 2010 Panoramisk | Creative Commons License wordpress logo