Mon réseau d’entreprise
21.1 Mise en place d’Asterisk
est un central téléphonique logiciel. Il assure toutes les fonctionnalités d’un central téléphonique commercial et beaucoup d’autres. C’est un logiciel libre (Asterisk) intégré
dans Debian. Il a été principalement développé par l’entreprise Digium, fondée par Mark Spencer. Une bonne documentation de référence est disponible en ligne à l’adresse asteriskdocs, vous pouvez
acheter l’édition papier.
Asterisk est un serveur réseau fonctionnant sur Gnu-Linux. Il peut donc subir des agressions. Comme c’est un serveur téléphonique son utilisation peut être sujette à une facturation par des opérateurs téléphoniques. Un intrus
pourrait donc augmenter significativement la facture téléphonique !
Les pabx commerciaux souffrent du même risque. Par contre, les mises à jour de sécurité sont beaucoup plus aléatoires.
Asterisk peut fonctionner uniquement en mode ip mais peut aussi utiliser les réseaux téléphoniques classiques issues des cartes téléphoniques zapata (Zapata Telephony, figure 21.4) diffusées sous licence libre.
À L’iut, nous avons quelques cartes téléphonique pci :
-
• une carte rnis à quatre ports qui fournit le réseau d’opérateur (simulé) aux centraux commerciaux axs12 ;
-
• une carte rnis primaire, connectée à une banque de caux Rhino ;
-
• une banque de canaux Rhino qui convertit le signal rnis primaire en 24 signaux analogiques qui alimente les téléphones analogiques en Osaka ;
-
• des cartes analogiques fxs ou fxo Sangoma ou Digium.
21.1.1 Installation des paquets
L’installation d’Asterisk est facile, il suffit d’installer le paquet asterisk. Asterisk est modulaire, Il est possible d’utiliser ou non de nombreuses fonctionnalités. Certaines, comme la connexion à un mobile demandent l’installation d’un paquet spécifique. Nous installerons les autres paquets quand, et si, le besoin apparaît.
Sur une Debian stable, aujourd’hui stretch, le paquet asterisk vient d’être installé, nous pouvons vérifier si le serveur tourne.
$ pgrep -l asterisk 7013 asterisk
Asterisk vient avec une interface en ligne de commande (cli : Command Line Interface. Elle particulèrement utile pour l’apprentissage, la mise au point et le débug.
# asterisk -rvvv Asterisk 11.13.1~dfsg-2+deb8u5, Copyright (C) 1999 - 2013 Digium, Inc. and others. Created by Mark SpencerAsterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 11.13.1~dfsg-2+deb8u5 currently running on lgardi (pid = 7013) lgardi*CLI>
Nous pouvons voir que le copyright commence en 1999 et finit en 2013. Les versions stable de Debian n’utilisent pas des versions plus récentes. Il existe de nouvelles versions d’Asterisk, mais elle n’apportent que peu, voire pas, de changements pour le débutant. L’interface devrait être toujours présente lors des manipulations.
Asterisk est installé, il est fonctionnel, mais ne fait rien pour le moment.
En fait, il ne fait rien d’utile. Mais les fichiers de configuration activent quelques fonctionnalités qui peuvent être causes de dysfonctionnment ou sources de vulnérabilité. Avant de mettre Asterisk en production, il faut valider chaque ligne de chaque
fichier et supprimer tout ce qui est inutile.
Les débutants commettent souvent des erreurs (les experts aussi). Après quelques erreurs, c’est parfois plus facile de tout réinstaller. Il est bien sûr possible de réinstaller Debian. C’est souvent plus simple de supprimer (purger) un paquet et de le réinstaller. Mais il
faut parfois aussi purger les dépendances. Les fichiers de configuration d’Asterisk sont dans le paquet asterisk-config.
# apt purge asterisk # apt purge asterisk-config
Une des règles de sécurité consiste à éviter d’utiliser le compte administrateur. Les serveurs fonctionnent avec ce principe. L’utilisateur d’asterisk est asterisk.
$ ps auxww | grep asterisk asterisk 7013 ... 15:58 0:09 /usr/sbin/asterisk -p -U asterisk ...
Les fichiers de configuration d’asterisk peuvent contenir des mots de passe. Leur lecture est protégée.
ls -l /etc/asterisk/sip.conf -rw-r----- 1 asterisk asterisk 91033 Dec 29 2017 /etc/asterisk/sip.conf
Les systèmes se protègent contre les erreurs de débutant. Une erreur classique consiste à modifier le fichier sip.conf avec un éditeur évolué, en utilisant le compte administrateur. Certains éditeurs vont changer le propriétaire du fichier, mais pas les
droits. Le fichier va donc appartenir à root, reste protégé en lecture, asterisk ne pourra pas le lire…
Asterisk dispose de son propre fichier de log : /var/log/asterisk/messages. Certaines erreurs apparaissent facilement dans ce fichier.
Une erreur fréquente consiste à introduire, par mégarde, un caractère au début d’un fichier. Ceci est signalé par asterisk dans son fichier de log.
[Sep 17 16:22:22] WARNING[8362] config.c: parse error:
No category context for line 1 of /etc/asterisk/extensions.conf
En regardant la ligne 1 du fichier nommé, l’erreur est évidente et donc facilement corrigée.
21.1.2 Ajoutons des téléphones
Les téléphones modernes peuvent être de deux types : matériel ou logiciel. En fait, il n’y a presque plus de téléphones matériels, ce qui ressemble à un téléphone matériel est bien souvent un ordinateur équipé d’un logiciel de téléphonie. C’est particulièrement vrai pour les téléphones LineageOS.
À L’iut, nous disposons de plusieurs sortes de téléphones matériels :
-
• analogiques ;
-
• privés (principalement des aastra), utilisable uniquement avec un central de la même marque ;
-
• Sip :
-
– aastra,
-
– mitel,
-
– grandstream.
-
Nous allons configurer un téléphone sip, aastra ou grandstream. Le téléphone aastra est le plus simple, le grandstream permet de faire de la visiophonie.
21.1.2.1 Aastra SIP 5XI
Nous allons donc commencer par un téléphone Aastra (55i ou 57i). Ce téléphone est présenté à la figure 21.5.
Les versions 55i et 56i sont similaires, seul l’afficheur change.
Avant d’utiliser un matériel, il serait bon de pouvoir installer soi-même le système d’exploitation. C’est facile pour les ordinateurs de bureau. Pour certains équipements, il est juste possible de les remettre en configuration usine.
Au delà de la sécurité, installer le système ou réintialiser en configuration usine permet d’avoir l’équipement dans un état connu. Les modifications passées ne perturberont pas la manipulation.
Pour remettre ce téléphone en configuration usine, il est possible de passer par le clavier, d’utiliser la touche qui ressemble à une clef, d’aller dans le menu administrateur puis repasser en configuration usine. Le mot de passe par défaut est 22222.
Il faut ensuite régler ses paramètres ip. Pour cela, il faut identifier les paramètres du réseau local dans lequel le téléphone sera branché. Si un ordinateur est déjà présent dans ce réseau, il est possible d’utiliser ses paramètres en utilisant une adresse inutilisée.
Ensuite, il est possible de se connecter sur l’interface web du téléphone pour régler ses autres paramètres. Le login est admin. C’est plus facile qu’avec le clavier du téléphone. Il faut Configurer les paramètres sip comme dans la figure 21.6. Mettez « mdp » dans le champ Password. Le numéro de téléphone n’est pas forcément composé de chiffres. Il faut configurer l’adresse du serveur (proxy et registrar). Ceci peut être fait pour la configuration globale ou pour chaque ligne (L1, L2…).
La documentation des téléphones matériels est souvent incomplète ou suppose que le lecteur connaisse en détail la philosophie dans laquelle a été développé l’équipement. Il est souvent plus facile de mettre des valeurs aléatoires et de vérifier par la console Asterisk, la
capture réseau ou les fichiers de logs pour déterminer quelles sont les bonnes valeurs.
Dans la figure 21.6, il faut commencer par mettre des valeurs différentes dans les champs de saisie, puis regarder comment le téléphone les interprète.
Il faut aussi ajouter la déclaration du hardphone dans le fichier sip.conf ainsi :
[57i] type=friend secret=MonSecret host=dynamic context=default
Voici l’explication de cette syntaxe :
- [57i ]
-
l’identifiant du téléphone, tout ce qui suit, jusqu’aux prochains crochets, configure ce téléphone ;
- type=friend
-
pour un téléphone sip ;
- secret=MonSecret
-
le secret est en clair, le fichier doit donc être protégé en lecture ;
- context=default
-
la partie du fichier extensions.conf qui autorisera ce télémhone à passer des appels.
-
• Il faut superviser avec la console d’asterisk (asterisk -rvvv) ;
-
• utiliser tshark (tshark -n -f "host IPDUTÉLÉPHONE") et interpréter les informations ;
-
• redémarrer le téléphone pour qu’il prenne sa configuration en compte.
Si tout se passe bien, alors le téléphone envoie un paquet sip vers le serveur. Une communication ip commence toujours chez le client qui envoie un paquet au serveur.
Si tshark ne voie pas de paquet, c’est le téléphone qui est mal configurer. Il faut vérifier les paramètres ip du téléphone et du serveur, faire un ping depuis le serveur pour valider la couche ip. Ensuite, il faut valider les paramètres sip.
Si le paquet passe, alors il doit se passer quelque chose dans la console asterisk. Il faut interpréter le message d’erreur et corriger l’erreur. Puis recommencer. Il peut y avoir plusieurs erreurs successives à corriger (3).
Quand asterisk et le téléphone sont bien configurés, la console affiche un message de connexion réussie.
21.1.2.2 Grandstream GXV3140
Le téléphone Grandstream est plus récent que le 57i, mais beaucoup moins pratique. Son système d’exploitation est un système Linux vérouillé.
Quand on introduit un équipement nouveau sur réseau, il convient de vérifier les connexions sortantes qu’il essaie d’établir. Ce téléphone est une catastrophe du point de vue de la sécurité. Il envoie beaucoup d’informations vers des serveurs prédéfinis et propose de
nombreuses applications réseaux qui vont aller sur internet. C’est un vecteur d’entrée pour de nombreuses sources maléfiques. Il convient de limiter drastiquement ses capacités de communications.
Comme précédement, il faut configurer le téléphone. D’abord la remise en configuration usine : Menu =>Settings =>Maintenance =>factory Reset =>Full Reset.
Ensuite, après le redémarrage, il faut lui affecter les paramètres ip. Menu =>Settings =>Static IP, puis les paramètres.
Quand le téléphone a pris ses paramètres, il va afficher son adresse sur l’écran d’accueil. Il est alors possible d’utiliser un navigateur pour configurer les paramètres sip (figure 21.7). Le login est admin, mot de passe admin.
Il faut aussi indiquer à asterisk la configuration du téléphone.
[gs1] type=friend secret=mdp host=dynamic context=default
Si tout se passe bien, alors le téléphone envoie ses crédences à asterisk qui les accepte :
-- Registered SIP 'gs1' at 192.168.0.164:36278
> Saved useragent "Grandstream GXV3140 1.0.7.76" for peer gs1
lgardi*CLI>
La capture tshark montre le succès.
# tshark -n -i eth0 -f "port sip"
tshark: Lua: Error during loading:
Capturing on 'eth0'
1 0.000000 10.22.1.22 -> 192.168.0.200
SIP 592 Request: REGISTER sip:192.168.0.200 (1 binding) |
2 0.001846 192.168.0.200 -> 10.22.1.22
SIP 571 Status: 401 Unauthorized |
3 0.032132 10.22.1.22 -> 192.168.0.200
SIP 751 Request: REGISTER sip:192.168.0.200 (1 binding) |
4 0.035303 192.168.0.200 -> 10.22.1.22
SIP 585 Status: 200 OK (1 binding) |
Il est possible de détailler le protocole sip pour détailler ces paquets. L’expérience montre que ceci est la séquence classique pour qu’un téléphone se connecte. Il commence par une demande qui échoue apparament, la seconde tentative est la bonne, le paquet 4 montre le succès.
21.1.2.3 Ajoutez un téléphone logiciel
Il existe de nombreux téléphones logiciels. Pour des raisons de sécurité, c’est mieux d’en choisir un libre et de préférence disponible sous Debian stable. Pour cela, vous pouvez essayer tout client SIP, par exemple, ekiga, linphone ou twinkle) et le connecter sur le serveur asterisk.
[softphone] type=friend host=dynamic secret=monsec context=default
21.1.2.4 Quelques éléments de debug
Les premiers éléments pour débuguer un serveur, ce sont ip, tshark et les fichiers de logs. Asterisk fournit en plus une console.
Dans la console, il est possible de valider l’état des canaux de communication. Voici un exemple :
lgardi*CLI> sip show peers
Name/username Host ... Status
57i (Unspecified) ... Unmonitored
alf6 (Unspecified) ... Unmonitored
gs1/gs1 10.22.1.22 ... Unmonitored
3 sip peers [Monitored: 0 online, 0 offline
Unmonitored: 1 online, 2 offline]
Dans cet exemple, trois téléphones sont configurés dans le fichier sip.conf. Il y a donc trois pairs (peers) listés. Dans notre configuration, nous avons laissé l’adresse indéfinie (host=dynamic). Donc, seul celui qui est en ligne possède une adresse. Les deux autres n’ont pas essayé ou pas réussi à se connecter.
21.1.3 Appeler vers un téléphone
Le numéro définit dans la configuration du téléphone ne correspond en rien à la notion que nous avons d’un numéro à composer et qui fait sonner ce téléphone. Pour appeler un téléphone, il faut ajouter une instruction dans le fichier extensions.conf.
Pour commencer, nous allons modifier la section default qui est celle utilisée par la console asterisk.
Il faut donc chercher dans le fichier extensions.conf la ligne :
[default]
Puis ajouter la ligne faisant sonner le téléphone désiré. Pour cela, il faut rajouter la ligne suivante :
exten => 701,1,Dial(SIP/gs1,42)
- exten =>
-
c’est le mot clef qui désigne une extension, c’est le mot anglais qui désigne le numéro de poste ;
- 701
-
le numéro de téléphone, il peut contenir des lettres et d’autres caractères ;
- 1
-
un numéro peut déclencher plusieurs actions, ce numéro est appelé priorité ;
- Dial
-
la commande, ici c’est une demande de numérotation, ses paramètres sont :
-
1. destination
- SIP
-
le protocole,
- gs1
-
le canal,
-
2. la durée pendant laquelle l’appel est présenté,
-
3. des paramètres, ici aucun.
-
La nouvelle version d’Asterisk ne charge pas cette commande. Pour la retrouver, il faut activer le canal oss dans le fichier de configuration des modules :
load => chan_oss.so
Pour passer l’appel, il faut utiliser la commande console dial numéro dans la console :
lgardi*CLI> console dial 701
[Sep 19 17:47:56] WARNING[3015]: chan_oss.c:488 setformat: \
Unable to re-open DSP device /dev/dsp: No such file or directory
[Sep 19 17:47:56] NOTICE[3015]: console_video.c:137 console_video_start: \
voice only, console video support not present
-- Executing [701@default:1] Dial("Console/dsp", "SIP/gs1,42") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/gs1
-- SIP/gs1-00000000 is ringing
...
lgardi*CLI> console hangup
== Spawn extension (default, 701, 1) exited non-zero on 'Console/dsp'
<< Hangup on console >>
21.1.4 Connexion vers un opérateur
Se connecter vers un opérateur impose de prendre un abonnement. L’opérateur décide de la méthode de connexion. Pour une entreprise, actuellement il y a une norme et un standard : rnis ou sip. La connexion rnis est la méthode historique et demande un branchement spécifique. La connexion à un opérateur sip impose une connexion préalable vers un opérateur ip. Cet opérateur peut fournir simultanément les deux accès.
Comme j’ai une Freebox à la maison, je peux faire la démonstration avec une Freebox. L’abonnement, pour un particulier, à Free permet d’utiliser un compte sip restreint. Nous allons mettre celui-ci en œuvre.
Il faut commencer par activer son compte sip. Il faut se connecter sur l’interface de gestion =>téléphonie (figure 21.8).
Puis dans Mon Compte Sip, figure 21.9, activer le service et définir un vrai mot de passe.
Le compte sip est alors activé. Il est possible de le tester avec un téléphone logiciel par exemple. Nous allons utiliser asterisk comme client de l’abonnement sip. Il faut donc qu’asterisk s’enregistre sur ce compte.
Il faut ajouter la déclaration dans le fichier sip.conf.
register => username:secret@freephonie.net
Ensuite, il faut relancer asterisk pour qu’il tente de se connecter. Une capture réseau montre ce qui se passe.
1 0.000000 192.168.0.200 -> 212.27.52.5
SIP 437 Request: REGISTER sip:freephonie.net (1 binding) |
2 0.046968 212.27.52.5 -> 192.168.0.200
SIP 337 Status: 100 Trying |
3 0.047078 212.27.52.5 -> 192.168.0.200
SIP 400 Status: 423 Interval Too Brief |
4 0.167656 192.168.0.200 -> 212.27.52.5
SIP 438 Request: REGISTER sip:freephonie.net (1 binding) |
5 0.215390 212.27.52.5 -> 192.168.0.200
SIP 337 Status: 100 Trying |
6 0.216106 212.27.52.5 -> 192.168.0.200
SIP 549 Status: 401 Unauthorized |
7 0.336305 192.168.0.200 -> 212.27.52.5
SIP 661 Request: REGISTER sip:freephonie.net (1 binding) |
8 0.388268 212.27.52.5 -> 192.168.0.200
SIP 337 Status: 100 Trying |
9 0.416600 212.27.52.5 -> 192.168.0.200
SIP 499 Status: 200 OK (1 binding) |
Freephonie met du temps à répondre, mais ce n’est pas local. En dehors des message de temporisation (Trying ou Interval Too Brief), le comportement est similaire au comportement précédent.
La console montre aussi le succès :
lgardi*CLI> sip show registry Host Username Refresh State ... freephonie.net:5060 09XXXXXXXX 1785 Registered ... 1 SIP registrations.
Nous sommes enregistrés sur le site de free.
Il est maladroit de laisser des identifiants, des mots de passe et des adresses IP dans des documentations...
Nous pouvons passer un appel depuis l’extérieur. Le téléphone portable pourra faire l’affaire. Nous appelons le numéro de la freebox. C’est le téléphone connecté sur la freebox qui sonne. La console asterisk fournit l’explication.
[Sep 19 18:13:05] NOTICE[3273][C-00000000]:
chan_sip.c:25650 handle_request_invite:
Call from '' (212.27.52.5:5060) to extension 's'
rejected because extension not found in context 'public'.
Nous n’avons pas programmé de comportement pour les appels entrants depuis freephonie. Donc, l’appel échoue, Free redirige l’appel vers le téléphone de la Freebox. C’est une bonne idée. Donc, c’est un succès, nous recevons bien les appels. Il faut en faire quelque chose.
Nous allons appeler un téléphone sip déjà configuré. Il faut cependant faire une section spécifique pour les appels qui viennent depuis l’extérieur. Quand il n’y a pas de numéro présenté, asterisk utilise l’extension spéciale “s”. Nous reviendrons sur ces notions dans la partie sur les faisceaux.
Nous ajoutons donc la section public dans le fichier extensions.conf.
[public] exten => s,1,Dial(SIP/gs1,42)
Un appel entrant fera sonner le téléphone gs1. Le téléphone de la Freebox ne sonne plus.
Nous pouvons recevoir un appel, mais nous ne pouvons pas téléphoner. Pour pouvoir appeler, il faut indique à Asterisk comment appeler par freephonie.
s





