(à completer)
En suivant les instructions de l'excellent Asterisk, the future of telephony, vous avez certainement reussi en quelques coups de cuiller a pot à monter un simple PBX sur lequel se connectent directement vos clients SIP, typiquement des softphones tels qu'ekiga ou twinkle.
Tahorg et iMil avaient envie de monter un truc qui nous permette :
1. de pouvoir communiquer entre nous et tous les lutins mais aussi 2. de garder nos PBX maison qui relient les differents soft / hardphones au sein de nos demeures et puissent gérer differents accès téléphoniques.
Je me suis incrusté dans l'histoire une fois le début de setup en place, on était déjà passé de SIP à IAX, mais un truc me chiffonait. IAX est un protocole plutot prévu pour un usage sur des réseaux sécurisés, tout passe en clair dessus, dont les info de login. L'auth plaintext mise en place pour les tests n'était donc pas trop recommandée pour un PBX public. IAX offre un début de réponse à ces problèmes de sécurité (bien que tout le monde recommande encore l'utilisation de vpns pour sécuriser les communications): l'authentification par clé rsa.
Nous allons donc voir comment créer un peering IAX avec auth en rsa.
Voici l'architecture simple que nous avons monté :
Premièrement, pour une authentification par clé, il faut générer une paire de clés privée/publique.
Asterisk vient avec un petit script pour gérer cela: astgenkey
lutin% astgenkey ma-clef
Il vous demandera de rentrer la passphrase pour votre jeu de clés.
vous avez donc ma-clef.pub et ma-clef.key dans le répertoire courant. Il vous faut mover la clé publique dans le répertoire $ASTVARLIB/keys/ sur le PBX public, et la clé privée dans le même répertoire, mais dans votre PBX client. (/var/lib/asterisk/keys par défaut, /usr/local/share/asterisk/keys si installé via le port sous FreeBSD).
Les clés générées et mises en place, nous pouvons nous attaquer à la configuration.
Voici le iax.conf d'un PBX client, celui chez soi donc, ne comportant que les informations nécessaires au dialogue avec le PBX “maitre”.
[general] register => login:[clé-rsa]@host.pbx.public ; on enregistre son serveur IAX comme client sur le serveur PBX public. ;Les [] sont importants, c'est toute la différence entre une clé et un password. ;Les clés sont indiquées sans leur extension .pub|.key disallow=all ; on commence par refuser tous les codecs. allow=gsm ; on accepte uniquement des codecs allow=speex ; consommant peu de bande passante [jardin-iax-out] type=peer ; on définit le PBX publique comme peer et non comme user. auth=rsa ; on précise que l'authentification se fait pas clé. username=user1 outkey=ma-clef host=host.pbx.public context=from-jardin-iax ; contexte a renseigner dans extensions.conf
Voici l'extensions.conf correspondant :
[maison] exten => 100,1,Dial(SIP/user) ; numero local exten => _88299.,1,Dial(IAX2/${EXTEN}@jardin-iax-out,30,r) ; lorsque je compose un numero qui matche 88299 (voir e164.org), on utilise le lien monpbxpublic-out ; extension raccourcie pour appeler directement un user exten => 666,1,Dial(IAX2/jardin-iax-out/user2) [from-jardin-iax] exten => s,1,Dial(SIP/user1) ; par defaut (entrée "s"), lorsqu'on recoit un call depuis le pbx public, on appelle cette ligne.
Et bien entendu, vous avez déjà défini l'utilisateur correspondant dans le sip.conf.
Maintenant, voici le iax.conf du serveur Asterisk public :
[general] disallow=all allow=gsm allow=speex [user1] type=friend ; on peut se connecter ici via un telephone ou via un peer asterisk auth=rsa username=user1 inkeys=ma-clef host=dynamic context=pbxpublic [user2] type=friend username=user2 inkeys=sa-clef host=dynamic context=pbxpublic
Et l'extensions.conf correspondant (les numeros ne sont pas les bons evidemment…) :
[pbxpublic] exten => 8829900349801,1,Dial(IAX2/user1) exten => user1,1,Dial(IAX2/user1) exten => 8829900349802,1,Dial(IAX2/user2) exten => user2,1,Dial(IAX2/user2)
Reste maintenant à démarrer votre asterisk sur le pbx public (préferablement en mode console pour le debug: asterisk -cvvv) et de placer les variables suivantes :
*CLI> set debug 25 *CLI> set verbose 25
Faites de même sur votre PBX maison, avec une petite différence: asterisk -civvv, le -i est là pour initialiser votre clé privée et vous deviez voir apparaitre :
-- Registered IAX2 to 'XX.XX.XX.XX', who sees us as XX.XX.XX.XX:4569 with no messages waiting
…Et c'est maintenant que le cauchemar commence ;)
adapté de peering SIP avec asterisk la partie auth par clé est basée sur l'excellent article de voip-info.org.