Mon réseau

Mon réseau d’entreprise

21.1 Mise en place d’Asterisk

Précédent   Suivant

(image) 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.

(image) 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 !

(image)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.

(image)

Fig. 21.4 : Tormenta 2 PCI Card, Rev. A.

À 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 Spencer 
Asterisk 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.

(image)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.

(image) 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

(image)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
...

(image)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

(image)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…

(image) 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.

(image)

Fig. 21.5 : Un téléphone SIP 57i.

Les versions 55i et 56i sont similaires, seul l’afficheur change.

(image)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…).

(image)

Fig. 21.6 : Configuration du téléphone Aastra SIP.

(image)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é.

(image)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.

(image)

Fig. 21.7 : Configuration du compte SIP sur un grandstream.

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.

(image)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).

(image)

Fig. 21.8 : Gestion de la téléphonie.

Puis dans Mon Compte Sip, figure 21.9, activer le service et définir un vrai mot de passe.

(image)

Fig. 21.9 : La configuration SIP.

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.

(image) 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

Précédent   Suivant