Asterisk

01 - Description
1) Architecture du projet 

 Le projet IRS-SI déploie une infrastructure VoIP complète sur un réseau local segmenté en VLAN. Le serveur Asterisk est hébergé sur une machine virtuelle Debian 12 sur le serveur Proxmox, accessible depuis le VLAN 99 (LAN VMs) à l'adresse 192.168.10.69. Les deux téléphones IP sont connectés via le switch PoE du projet et s'enregistrent automatiquement sur le serveur Asterisk au démarrage. Les appels internes transitent entièrement par le réseau local sans passer par l'extérieur. 

 Le schéma de communication est le suivant : lorsqu'un téléphone compose un numéro interne, il envoie une requête PJSIP au serveur Asterisk qui consulte son plan de numérotation (extensions.conf), identifie le poste destinataire et établit la communication. Le flux audio (RTP) circule ensuite directement entre les deux téléphones sans transiter par Asterisk. 

 Les deux postes configurés sont les suivants : 

 

 

 

 

 

 Extension 

 

 

 Téléphone 

 

 

 Protocole 

 

 

 

 

 1000 

 

 

 Yealink T31P 

 

 

 PJSIP 

 

 

 

 

 1001 

 

 

 Yealink T41P 

 

 

 PJSIP 

 

 

 

 

 

 2) Qu'est ce que Asterisk 

 Asterisk est un logiciel open source de téléphonie IP développé par Digium (aujourd'hui Sangoma), disponible sous licence GPL. Il s'agit du serveur IPBX (IP Private Branch Exchange) le plus répandu dans le monde, utilisé aussi bien dans les PME que dans les grandes entreprises. 

 Son rôle est de gérer les appels téléphoniques internes d'une infrastructure : il reçoit les demandes d'appel des téléphones IP, les route vers le bon destinataire et gère la signalisation entre les postes. 

 Asterisk supporte plusieurs protocoles de téléphonie IP, dont PJSIP (le module recommandé depuis Asterisk 13), SIP (l'ancien module chan_sip) et IAX2. Il est compatible avec une très large gamme de téléphones IP physiques et de softphones. Dans le cadre du projet IRS-SI, Asterisk est déployé sur une machine virtuelle Debian 12 hébergée sur le serveur Proxmox. Il gère les communications entre les trois téléphones IP du site et constitue le cœur de l'infrastructure de téléphonie. 

 Matériels utilisés 

 

 

 

 

 

 Équipement 

 

 

 Rôle 

 

 

 

 

 Routeur Cisco ISR 4321 

 

 

 Routage, DHCP, gateway VLAN 20 

 

 

 

 

 Switch managé 

 

 

 Segmentation VLAN 

 

 

 

 

 Proxmox 

 

 

 Hyperviseur hébergeant la VM Asterisk 

 

 

 

 

 Debian 12 (VM) 

 

 

 Système hôte du serveur Asterisk 

 

 

 

 

 Asterisk 18 

 

 

 Serveur de téléphonie IP (PJSIP) 

 

 

 

 

 Yealink T41P (poste 1000) 

 

 

 Téléphone IP SIP 

 

 

 

 

 Yealink T31P (poste 1001) 

 

 

 Téléphone IP SIP 

 

 

 

 

 Cisco CP-7811-3PCC (poste 1002) 

 

 

 Téléphone IP SIP 

 

 

 

 

 Zabbix 

 

 

 Supervision réseau 

 

 

 

 

 

 Réseau 

     • VLAN 20 dédié à la téléphonie : 192.168.10.64/26     • IP Asterisk (VM) : 192.168.99.9     • IP Yealink T41P (1000) : 192.168.10.66     • IP Yealink T31P (1001) : 192.168.10.67     • Port SIP Asterisk : 5160/UDP (PJSIP)     • DHCP assuré par le Cisco ISR avec réservations par adresse MAC

02 - Installation Serveur
01) Installation 

 Tout d'abord, veillez à avoir une distribution à jour :  

 sudo apt update

sudo apt upgrade 

 

 Nous procédons ensuite à l'installation des dépendances : 

 sudo apt-get install gcc make pkg-config build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) uuid-dev libsqlite3-dev libjansson-dev 

 Parmi ces dépendances, nous retrouvons entre autre : 

 

 Build-essential : contient le compilateur gcc, le compilateur g++, make, etc… 

 La librairie SQL Lite 

 La librairie SSL 

 

 Une fois les dépendances installées, nous pouvons télécharger les sources d’Asterisk.                                                                              Commençons par créer un dossier pour les contenir. 

 mkdir /usr/src/asterisk

cd /usr/src/asterisk 

 

 Dans le dossier  /usr/src/asterisk/ télécharger les sources d’Asterisk.                                                                                                                      Veillez à prendre la dernière version d’Asterisk en date (ici la version 18). 

 cd /usr/src/asterisk/ 

sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz 

 Puis décompresser les sources, et entrer dans le dossier nouvellement créé. 

 sudo tar -xvzf asterisk-18-current.tar.gz

cd asterisk-18.X.X 

 

 Avant de compiler Asterisk, il faut s’assurer que le système dispose de toutes les dépendances. 

 Pour cela, entrer la commande suivante dans le dossier contenant les sources : 

 ./configure 

 Si la vérification ne retourne pas de message d’erreur, vous pouvez alors continuer. 

 

 Dans le cas où il vous manque des dépendances, identifiez les, et ajouter les à la main (avec un apt-get install ou en les téléchargent à la main avec un wget ). 

 Il faut ensuite choisir les options de compilation. 

 make menuselect 

 

 Vous pouvez aussi ajouter les sons en français dans les sections Core Sound Package, et Extras Sound Package. 

 

 

 Vous pouvez aussi ajouter les musiques d’attente en format aLAW. 

 

 Lancer la compilation et l’installation. 

 make 

 

 make install 

 Il convient ensuite de créer les fichiers d’exemple de configuration. 

 make samples 

 Créer les scripts de démarrage. 

 make config 

 Enfin, vous pouvez lancer Asterisk. 

 /etc/init.d/asterisk start 

 Il est possible d’entrer dans la console d’Asterisk avec la commande suivante : 

 asterisk –r

03 - Configuration
1) Configuration PJSIP 

 Le fichier de configuration principal à modifier est le /etc/asterisk/pjsip.conf. 

 Transport UDP 

 Points critiques :     • bind=0.0.0.0:5160 — écoute sur toutes les interfaces, port 5160 

 [transport-udp]

type=transport

protocol=udp

bind=0.0.0.0:5160 

 

 Configuration des postes 

 Chaque poste nécessite trois sections : endpoint, auth, aor. 

 Toujours dans le fichier /etc/asterisk/pjsip.conf. 

 

 Poste 1000 (Yealink T41P - Matheo) : 

 [1000]

type=endpoint

context=interne

disallow=all

allow=alaw

allow=ulaw

aors=1000

auth=auth1000

callerid="Matheo" <1000>

direct_media=no ; Empêche le bypass RTP direct entre téléphones

[auth1000]

type=auth

auth_type=userpass

username=1000

password=azerty

[1000]

type=aor

max_contacts=2

qualify_frequency=30 

 Répéter la même structure pour les postes 1001 et 1002 en adaptant les valeurs. 

 CRITIQUE : Sans qualify_frequency, les contacts restent en état 'NonQual' et les appels échouent avec 'provisoirement indisponible'. Asterisk ne sait pas si le téléphone est joignable. 

 

 Paramètres critique expliqués 

 

 

 

 

 

 Paramètre 

 

 

 Pourquoi c'est important 

 

 

 

 

 direct_media=no 

 

 

 Sans ce paramètre, Asterisk tente un bypass RTP direct entre téléphones. Ça échoue sur réseau local segmenté → audio unidirectionnel ou absent. 

 

 

 

 

 

 

 2) Dial Plan (extensions.conf) 

 Le dial plan est le cœur logique d'Asterisk : il définit comment chaque appel entrant est traité, routé et terminé. Il est structuré en contextes, extensions et priorités.  

 

 Structure du dial plan 

 [contexte]

exten => numéro, priorité, Application(paramètres) 

 

 

 

 

 Élément 

 

 

 Description 

 

 

 Exemple 

 

 

 

 

 Contexte 

 

 

 Groupe logique d'extensions. Un endpoint ne peut accéder qu'à son contexte. 

 

 

 [interne] 

 

 

 

 

 Extension (exten) 

 

 

 Numéro composé ou motif (_, X, Z, N...) 

 

 

 1000, _1XXX, s 

 

 

 

 

 Priorité 

 

 

 Ordre d'exécution. Commence à 1. n = next (priorité suivante). 

 

 

 1, 2, n 

 

 

 

 

 Application 

 

 

 Action à effectuer : Dial, Hangup, Playback, VoiceMail... 

 

 

 Dial(PJSIP/1000,30) 

 

 

 

 

 

 Configuration dans extension.conf 

 Le Dial plan se configure dans ce fichier : /etc/asterisk/extension.conf 

 

 [general]

static=yes

writeprotect=no

clearglobalvars=no

[interne]

#Téléphone 1000

exten => 1000,1,Dial(PJSIP/1000,30)

exten => 1000,2,Hangup()

#Téléphone 1001

exten => 1001,1,Dial(PJSIP/1001,30)

exten => 1001,2,Hangup()

#Téléphone 1002

exten => 1002,1,Dial(PJSIP/1002,30)

exten => 1002,2,Hangup() 

 Le timeout de 30 secondes (paramètre Dial) déclenche le Hangup si personne ne répond. Après modification : sudo asterisk -rx "dialplan reload" 

 

 Rechargement du  dial plan 

 

 sudo asterisk -rx "dialplan reload"

sudo asterisk -rx "dialplan show interne" ; Affiche le contexte interne 

 

 2) Configuration des téléphone IP 

 Yealink T41P et T31P 

 Accès à l'interface web : ouvrir un navigateur et saisir http://<IP_du_téléphone>.  

 Naviguer vers Account → Account 1 et renseigner les champs suivants : 

 

 Identifiants par défaut : admin / admin. 

 

 

 

 

 

 Champ 

 

 

 Valeur pour 1000 

 

 

 Valeur pour 1001 

 

 

 Description 

 

 

 

 

 Label 

 

 

 1000 

 

 

 1001 

 

 

 Nom affiché sur le téléphone 

 

 

 

 

 Display Name 

 

 

 Service Comptabilité 

 

 

 Service Informatique 

 

 

 Identité appelant 

 

 

 

 

 Register Name 

 

 

 1000 

 

 

 1001 

 

 

 Username SIP (doit correspondre à pjsip.conf) 

 

 

 

 

 Username 

 

 

 1000 

 

 

 1001 

 

 

 Identifiant d'authentification 

 

 

 

 

 Password 

 

 

 azerty 

 

 

 azerty 

 

 

 Mot de passe SIP 

 

 

 

 

 Server Host 

 

 

 192.168.10.69 

 

 

 192.168.10.69 

 

 

 IP du serveur Asterisk 

 

 

 

 

 Port 

 

 

 5160 

 

 

 5160 

 

 

 Port SIP d'Asterisk (pas le défaut 5060 !) 

 

 

 

 

 Transport 

 

 

 UDP 

 

 

 UDP 

 

 

 Protocole de transport 

 

 

 

 

 Server Expires 

 

 

 3600 

 

 

 3600 

 

 

 Durée d'enregistrement en secondes 

 

 

 

 

 Le port 5160 est non standard. S'assurer que les téléphones pointent bien sur 5160 et non le port par défaut 5060, sinon l'enregistrement échoue silencieusement. 

 

 Point de vigilance 

 

 

 Toujours vérifier que le mode DND est désactivé (Features → Forward & DND → Etat NPD → "de"). Si activé, les appels entrants sont ignorés sans notification. DND (Ne Pas Déranger) 

 

 

 Au décrochage, l'audio sort par défaut via le combiné. Appuyer sur le bouton haut-parleur pour basculer. Le bouton casque active la sortie jack. Mode audio 

 

 

 Le message "Update Skipped" au redémarrage est normal si aucun serveur de provisioning n'est configuré. Il n'affecte pas le fonctionnement. Mise à jour firmware 

 

 

 Après modification de la configuration, toujours redémarrer le téléphone via Settings → Upgrade → Reboot pour forcer le re-enregistrement SIP. Redémarrage

04 - Maintenance
1) Diagnostic et dépannage 

 Commandes de diagnostic Asterisk 

 

 

 

 

 

 Commande 

 

 

 Usage 

 

 

 

 

 asterisk -rx "pjsip show contacts" 

 

 

 État des enregistrements : Avail/NonQual/Unreachable + RTT 

 

 

 

 

 asterisk -rx "pjsip show endpoints" 

 

 

 État global des endpoints configurés 

 

 

 

 

 asterisk -rx "pjsip show endpoint 1000" 

 

 

 Détail d'un endpoint spécifique 

 

 

 

 

 asterisk -rx "core show channels" 

 

 

 Appels actifs en cours 

 

 

 

 

 asterisk -rx "dialplan show interne" 

 

 

 Afficher le contexte du dial plan 

 

 

 

 

 asterisk -rx "module reload res_pjsip.so" 

 

 

 Recharger PJSIP à chaud 

 

 

 

 

 asterisk -rx "dialplan reload" 

 

 

 Recharger extensions.conf 

 

 

 

 

 asterisk -rvvvv 

 

 

 Console interactive avec niveau de verbosité 4 

 

 

 

 

 

 Activation des logs SIP et RTP  

 Depuis la console Asterisk (asterisk -rvvvv) : 

 pjsip set logger on ; Active les logs SIP complets (INVITE, OPTIONS, 200 OK...)

rtp set debug on ; Active les logs RTP (flux audio)

pjsip set logger off ; Désactive (important en prod, très verbeux)

rtp set debug off 

 

 Vérification réseau 

 # Vérifier qu'Asterisk écoute sur le bon port

sudo ss -ulnp | grep 5160

# Tester la connectivité vers les téléphones

ping -c 4 192.168.10.67 # Yealink T41P

ping -c 4 192.168.10.66 # Yealink T31P

# Vérifier les logs Asterisk

sudo tail -f /var/log/asterisk/full

sudo tail -f /var/log/asterisk/messages 

 

 Problème fréquent 

 

 

 

 

 

 Symptôme 

 

 

 Cause probable 

 

 

 Solution 

 

 

 

 

 "Provisoirement indisponible" 

 

 

 Contact en état NonQual — téléphone non qualifié 

 

 

 Ajouter qualify_frequency=30 dans la section AOR. Vérifier DHCP/IP du téléphone. 

 

 

 

 

 Pas de son (audio absent) 

 

 

 external_signaling_address manquant → Asterisk annonce 127.0.0.1 

 

 

 Ajouter external_signaling_address et external_media_address dans le transport. Redémarrer Asterisk. 

 

 

 

 

 Audio unidirectionnel 

 

 

 direct_media=yes → bypass RTP échoue 

 

 

 Ajouter direct_media=no dans chaque endpoint. 

 

 

 

 

 Appel en absence sans sonnerie 

 

 

 DND activé sur le téléphone destinataire 

 

 

 Désactiver DND dans Features → Forward & DND → Etat NPD → "de". 

 

 

 

 

 Téléphone non enregistré (croix rouge) 

 

 

 Port SIP incorrect, mauvaise IP serveur, ou mot de passe erroné 

 

 

 Vérifier la config du téléphone : IP Asterisk, port 5160, username/password. 

 

 

 

 

 Contact Unavail après redémarrage VM 

 

 

 Téléphone garde l'ancienne IP du serveur en cache 

 

 

 Redémarrer le téléphone. Vérifier que la réservation DHCP d'Asterisk est correcte. 

 

 

 

 

 Module reload sans effet sur le transport 

 

 

 Le transport PJSIP ne se recharge pas à chaud 

 

 

 sudo systemctl restart asterisk 

 

 

 

 

 Appels impossibles, pas de connectivité VM 

 

 

 VM attachée au mauvais bridge Proxmox 

 

 

 Changer vmbr0 → vmbr1 dans les paramètres réseau de la VM Proxmox. 

 

 

 

 

 

 2) Sécurité de l'infrastructure VoIP 

 Menaces courantes 

 

 

 

 

 

 Menace 

 

 

 Description 

 

 

 Impact 

 

 

 

 

 Scan SIP (SIPVicious) 

 

 

 Robots qui scannent le port 5060 à la recherche de serveurs Asterisk 

 

 

 Tentatives d'enregistrement non autorisé 

 

 

 

 

 Brute force 

 

 

 Attaque par dictionnaire sur les credentials SIP 

 

 

 Accès non autorisé, frais téléphoniques 

 

 

 

 

 Toll fraud 

 

 

 Utilisation du serveur pour passer des appels internationaux payants 

 

 

 Factures exorbitantes 

 

 

 

 

 Écoute RTP 

 

 

 Capture des flux audio RTP sur le réseau 

 

 

 Violation de la confidentialité 

 

 

 

 

 Déni de service (DoS) 

 

 

 Flood de paquets SIP pour saturer le serveur 

 

 

 Interruption de service 

 

 

 

 

 

 Mesures de sécurité recommandées 

     •  (5060 → 5160 ou autre) pour réduire les scans automatisés.Changer le port SIP par défaut     •  Minimum 16 caractères, mélange de lettres, chiffres et symboles.Mots de passe complexes     •  Bloquer automatiquement les IPs effectuant trop de tentatives d'authentification.Fail2ban     •  Utiliser les listes de contrôle d'accès du Cisco ISR pour n'autoriser le trafic SIP qu'en provenance du VLAN 20.ACL réseau     •  Isoler les téléphones du reste du réseau — déjà en place dans ce projet.VLAN dédié     •  Chiffrer le flux audio RTP avec SRTP pour les environnements sensibles.SRTP     •  Modules Asterisk non utilisés (DAHDI, chan_skinny...) doivent être désactivés.Désactiver les services inutiles 

 

 Installation de Fail2ban pour Asterisk 

 Fail2ban est un outil qui surveille les fichiers de logs d'Asterisk et bloque automatiquement les adresses IP qui font trop de tentatives d'authentification SIP échouées (brute force sur les mots de passe des postes). 

 sudo apt install -y fail2ban

# Créer /etc/fail2ban/jail.local

[asterisk]

enabled = true

port = 5160

filter = asterisk

logpath = /var/log/asterisk/full

maxretry = 5

bantime = 3600

sudo systemctl restart fail2ban

sudo fail2ban-client status asterisk 

 

 

 3) Supervision avec Zabbix 

 Éléments à superviser 

 

 

 

 

 

 Élément 

 

 

 Méthode 

 

 

 Seuil d'alerte 

 

 

 

 

 Service Asterisk 

 

 

 Check process "asterisk" 

 

 

 Alerte si arrêté > 1 min 

 

 

 

 

 Nombre d'appels actifs 

 

 

 AMI ou script 

 

 

 Alerte si > seuil configuré 

 

 

 

 

 Enregistrements SIP 

 

 

 Script pjsip show contacts 

 

 

 Alerte si endpoint Unreachable 

 

 

 

 

 Connectivité téléphones 

 

 

 ICMP ping 

 

 

 Alerte si téléphone injoignable 

 

 

 

 

 Logs d'erreurs 

 

 

 Log monitoring 

 

 

 Alerte sur ERROR/WARNING répétés

05 - Script
1) Script d'administration Bash 

 Ce script centralise les opérations courantes d'administration de l'infrastructure VoIP. 

 ##############################################################

# Auteur : mkermorvant #

# Date de modification : 20260511 #

# #

# Description : Management Asterisk #

# #

##############################################################

#! /bin/bash #

# #

##############################################################

# Variables :

echo ""

ASTERISK="192.168.99.9"

TEL_1000="192.168.10.67"

TEL_1001="192.168.10.66"

#Code couleur ANSI pour l'affichage terminal

VERT='\033[0;32m'

ROUGE='\033[0;31m'

JAUNE='\033[0;33m'

NEUTRE='\033[0m'

BLEU='\033[0;36m'

PS3="Qu'elle action souhaiter vous exécuter : "

OPTIONS=( "Statut Serveur Asterisk" "Ping" "Contacts" "Appels en cours" "Redémarrage Serveur Assterisk" "Rechargement Config" "Quitter" )

##############################################################

#Boucle principale : réaffiche le menu après chaque action

while true; do

	clear

	echo -e "${BLEU}###############################################################"

	echo "# #"

	echo "# Admin Asterisk #"

	echo "# #"

	echo "###############################################################"

	echo "# #"

	echo "#		Liste Options : #"

	echo "# #"

	echo "#		1) Statut Serveur #"

	echo "#		2) Ping Téléphones #"

	echo "#		3) Liste Contacts #"

	echo "#		4) Liste Appel #"

	echo "#		5) Redémarage Asterisk #"

	echo "#		6) Rechargement Config #"

	echo "#		7) Quitter #"

	echo "# #"

	echo -e "###############################################################${NEUTRE}"

##############################################################

	#Lecture du choix

	echo -ne " Votre choix : "

	read REPLY

	#Traitement du choix via case

	case $REPLY in

		1)

			echo -e "${VERT}=== Statut du Serveur Asterisk ===${NEUTRE}"

			sudo systemctl status asterisk.service	#Affiche l'état du service systemd

			echo ""

			;;

		2)

			echo -e "${VERT}=== Ping Asterisk vers Téléphones ===${NEUTRE}"

			# 3 paquets ICMP envoyés, résultat coloré selon le succès ou l'échec

			ping -c 3 $TEL_1000 && echo -e "${VERT}1000 OK${NEUTRE}" || echo -e "${VERT}1000 KO${NEUTRE}"

			echo ""

			ping -c 3 $TEL_1001 && echo -e "${VERT}1001 OK${NEUTRE}" || echo -e "${ROUGE}1001 KO${NEUTRE}"

			echo ""

			;;

		3)

			echo -e "${VERT}=== Liste contacts Asterisk ===${NEUTRE}"

			sudo asterisk -rx "pjsip show contacts"	#Commande exécuté dans la CLI asterisk

			echo""

			;;

		4)

			echo -e "${VERT}=== Liste d'appel en cours ===${NEUTRE}"

			sudo asterisk -rx "core show channels"	#Liste les canaux actifs

			echo ""

			;;

		5)

			echo -e "${VERT}=== Redémarage du Serveur Asterisk ===${NEUTRE}"

			sudo systemctl restart asterisk.service	#Redemmarre le service

			echo ""

			;;

		6)

			echo -e "${VERT}=== Rechargement de la Configuration ===${NEUTRE}"

			sudo asterisk -rx "module reload res_pjsip.so"	#Recharge le module PJSIP

			sudo asterisk -rx "dialplan reload"		#Recharge le plan de numérotation

			echo ""

			;;

		7)

			echo -e "${JAUNE}=== Quitter ===${NEUTRE}"

			break	#Sort de la boucle While

			echo ""

			;;

		*)

			#Toute saisie non reconnue

			echo -e "${ROUGE}=== Option invalide, veuillez réessayer ===${NEUTRE}"

			echo ""

			;;

	esac

	#Pause avant de réafficher le menu

	echo -ne "Appuie sur Entrée..."

	read

done