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é: 33% marqué DMZ, extensions.conf, IAX, RTP, sécurité et SIP |
|





(1 votes, average: 4 out of 5)
