Installer et Configurer un serveur Asterisk sur Debian 12 I - Etape 1 Installation des dépendances et Asterisk # 1. Mise à jour du système sudo apt update && sudo apt upgrade -y # 2. Installation des dépendances nécessaires sudo apt install -y build-essential libssl-dev libsrtp2-dev libspeexdsp-dev # Télécharger et compiler PJProject cd /usr/src sudo wget https://github.com/pjsip/pjproject/archive/refs/tags/2.15.1.tar.gz sudo tar -xvf 2.15.1.tar.gz cd pjproject-2.15.1 # Configurer et compiler sudo ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr sudo make dep sudo make sudo make install sudo ldconfig # Vérifier l'installation ls /usr/lib | grep pj # 3. Téléchargement d'Asterisk # Se positionner dans le dossier src cd /usr/src/ # Lancer le téléchargement sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22.5.2.tar.gz # Décomprésser le fichier sudo tar -xvzf asterisk-22.5.2.tar.gz # Se positionner dans le dossier dézippé cd asterisk-22.5.2 # 5. Configuration et compilation d'Asterisk #sudo contrib/scripts/get_mp3_source.sh sudo contrib/scripts/install_prereq install sudo ./configure sudo make menuselect "Dans l'interface menuselect, assurez-vous que les modules chan_sip et chan_pjsip sont activés (appuyez sur x pour les sélectionner), puis sauvegardez et quittez." sudo contrib/scripts/get_mp3_source.sh sudo make -j$(nproc) && sudo make install sudo make config sudo make samples # 6. Création d'un utilisateur dédié pour Asterisk (Pour des raisons de sécurité, créez un utilisateur et un groupe dédiés :) sudo groupadd asterisk sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk sudo usermod -aG audio,dialout asterisk sudo chown -R asterisk:asterisk /etc/asterisk sudo chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk sudo chown -R asterisk:asterisk /usr/lib/asterisk # 7. Configuration du service Asterisk sudo nano /etc/systemd/system/asterisk.service --- [Unit] Description=Asterisk PBX After=network.target [Service] Type=simple User=asterisk Group=asterisk WorkingDirectory=/var/lib/asterisk ExecStart=/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target --- # Recréer le var/run avec les permissions: sudo mkdir -p /var/run/asterisk sudo chown asterisk:asterisk /var/run/asterisk sudo chmod 750 /var/run/asterisk # Configurer systemd pour créer automatiquement le répertoire sudo systemctl edit --full asterisk #Ajouter ou vérifier la présence des lignes suivantes --- [Service] RuntimeDirectory=asterisk RuntimeDirectoryMode=0750 User=asterisk Group=asterisk --- # Activez et démarrez le service : sudo systemctl daemon-reload sudo systemctl enable asterisk sudo systemctl restart asterisk # Forcer le socket en cas de problème pour se connecter à la console sudo systemctl stop asterisk sudo rm -f /var/run/asterisk/asterisk.ctl sudo asterisk -vvvgc # 8. Vérification du statut d'Asterisk sudo systemctl status asterisk # Connectez-vous à la console Asterisk pour vérifier son fonctionnement : sudo asterisk -rvvv " Pour quitter la console, tapez exit." # 9. Configuration de base d'Asterisk # Éditez le fichier de configuration principal : sudo nano /etc/asterisk/sip.conf --- [general] context=default allowoverlap=no bindport=5060 bindaddr=0.0.0.0 srvlookup=no [1001] type=friend context=default host=dynamic secret=Asterisk@2025 --- # Éditez le fichier d'extensions : sudo nano /etc/asterisk/extensions.conf --- [default] exten => 1001,1,Dial(SIP/1001,20) exten => 1002,1,Dial(SIP/1002,20) --- # Redémarrez Asterisk pour appliquer les changements : sudo systemctl restart asterisk # 10. Configuration du pare-feu # Autorisez les ports nécessaires (SIP, RTP) : sudo ufw allow 5060/udp sudo ufw allow 10000:20000/udp sudo ufw enable # 11. Test de la configuration. Installer l'une des applcations VoIP open source sur les postes clients # Utilisez un client SIP (comme Linphone, Zoiper, ou un téléphone IP) pour vous connecter au serveur Asterisk avec les identifiants configurés dans sip.conf. https://www.zoiper.com/en/voip-softphone/download/current # 12. Journalisation et dépannage sudo tail -f /var/log/asterisk/messages.log sudo tail -f /var/log/asterisk/queue_log ## Commandes: # Redémarrer Asterisk sudo systemctl restart asterisk # Accéder à la console Asterisk sudo asterisk -rvvv # Lister les utilisateurs SIP connectés sip show peers # Voir les appels en cours core show channels II - Etape 2 : Configurer des trunks SIP pour connecter Asterisk à un fournisseur VoIP: # 1. Configuration d’un Trunk SIP avec un Fournisseur VoIP # a. Identifier les informations du fournisseur # Avant de configurer le trunk, vous aurez besoin des informations suivantes (fournies par votre opérateur VoIP) : Nom d’utilisateur ou numéro de compte Mot de passe ou clé secrète Serveur SIP (ex: sip.provider.fr) Port SIP (généralement 5060) Codecs supportés (ex: ulaw, alaw, g729) Numéros de téléphone (DID) à associer # b. Configuration du trunk dans Asterisk Éditez le fichier /etc/asterisk/sip.conf (ou /etc/asterisk/pjsip.conf si vous utilisez PJSIP) : sudo nano /etc/asterisk/sip.conf --- [trunk_provider] type=peer host=sip.provider.fr ; Adresse du serveur SIP du fournisseur defaultuser=12345678 ; Votre identifiant chez le fournisseur secret=votremotdepasse ; Mot de passe fourni par le fournisseur context=from-trunk ; Contexte pour les appels entrants insecure=port,invite ; Autorise les connexions non sécurisées (à adapter) dtmfmode=rfc2833 ; Mode DTMF disallow=all ; Désactive tous les codecs allow=ulaw ; Active le codec ulaw (ajoutez d'autres codecs si nécessaire) fromuser=12345678 ; Identifiant pour l'authentification fromdomain=sip.provider.fr ; Domaine du fournisseur --- # c. Configuration des appels sortants Éditez /etc/asterisk/extensions.conf pour ajouter une règle d’appel sortant via le trunk : sudo nano /etc/asterisk/extensions.conf #Ajoutez dans le contexte [default] (ou un contexte dédié) : --- exten => _0XXXXXXXX,1,Dial(SIP/trunk_provider/${EXTEN}) --- "Remplacez _0XXXXXXXX par le préfixe de numérotation souhaité (ex: _0. pour tous les numéros commençant par 0)." # d. Configuration des appels entrants Dans /etc/asterisk/extensions.conf, ajoutez un contexte pour les appels entrants depuis le trunk : sudo nano /etc/asterisk/extensions.conf --- [from-trunk] exten => s,1,Answer() exten => s,n,Playback(welcome) ; Message de bienvenue exten => s,n,Dial(SIP/1001,20) ; Transfère l'appel vers l'extension 1001 exten => s,n,Hangup() --- # e. Recharger la configuration (#ou sip reload (si on utilise sip)) sudo asterisk -rvvv pjsip reload dialplan reload Parfait ! Voici comment avancer pour configurer un trunk SIP avec un fournisseur VoIP, puis pour mettre en place des files d’attente (queues) et un IVR (Interactive Voice Response) sur votre serveur Asterisk. # 1. Configuration d’un Trunk SIP avec un Fournisseur VoIP # a. Identifier les informations du fournisseur Avant de configurer le trunk, vous aurez besoin des informations suivantes (fournies par votre opérateur VoIP) : Nom d’utilisateur ou numéro de compte Mot de passe ou clé secrète Serveur SIP (ex: sip.provider.fr) Port SIP (généralement 5060) Codecs supportés (ex: ulaw, alaw, g729) Numéros de téléphone (DID) à associer # b. Configuration du trunk dans Asterisk Éditez le fichier /etc/asterisk/sip.conf (ou /etc/asterisk/pjsip.conf si vous utilisez PJSIP) : sudo nano /etc/asterisk/pjsip.conf #ou sudo nano /etc/asterisk/sip.conf "Ajoutez la section suivante (exemple pour un trunk SIP) :" --- [trunk_provider] type=peer host=sip.provider.fr ; Adresse du serveur SIP du fournisseur defaultuser=12345678 ; Votre identifiant chez le fournisseur secret=Asterisk*2025 ; Mot de passe fourni par le fournisseur context=from-trunk ; Contexte pour les appels entrants insecure=port,invite ; Autorise les connexions non sécurisées (à adapter) dtmfmode=rfc2833 ; Mode DTMF disallow=all ; Désactive tous les codecs allow=ulaw ; Active le codec ulaw (ajoutez d'autres codecs si nécessaire) fromuser=12345678 ; Identifiant pour l'authentification fromdomain=sip.provider.fr ; Domaine du fournisseur --- # c. Configuration des appels sortants #Éditez /etc/asterisk/extensions.conf pour ajouter une règle d’appel sortant via le trunk : sudo nano /etc/asterisk/extensions.conf # Ajoutez dans le contexte [default] (ou un contexte dédié) : --- exten => _0XXXXXXXX,1,Dial(SIP/trunk_provider/${EXTEN}) --- #Remplacez _0XXXXXXXX par le préfixe de numérotation souhaité (ex: _0. pour tous les numéros commençant par 0). # d. Configuration des appels entrants # Dans /etc/asterisk/extensions.conf, ajoutez un contexte pour les appels entrants depuis le trunk : sudo nano /etc/asterisk/extensions.conf --- [from-trunk] exten => s,1,Answer() exten => s,n,Playback(welcome) ; Message de bienvenue exten => s,n,Dial(SIP/1001,20) ; Transfère l'appel vers l'extension 1001 exten => s,n,Hangup() --- # e. Recharger la configuration # Appliquez les changements : sudo asterisk -rvvv pjsip reload #ou sip reload dialplan reload # 2. Configuration d’une File d’Attente (Queue) # a. Définir une file d’attente # Éditez /etc/asterisk/queues.conf : sudo nano /etc/asterisk/queues.conf --- [support] musicclass=default ; Musique d'attente strategy=ringall ; Stratégie de distribution (ringall, roundrobin, etc.) timeout=15 ; Temps d'attente avant abandon retry=5 ; Nombre de tentatives maxlen=10 ; Nombre maximal d'appels en attente member => SIP/1001 ; Agent 1 member => SIP/1002 ; Agent 2 --- # b. Intégrer la file d’attente dans le dialplan Dans /etc/asterisk/extensions.conf, ajoutez une extension pour diriger les appels vers la file : sudo nano /etc/asterisk/extensions.conf --- exten => 800,1,Answer() exten => 800,n,Queue(support) exten => 800,n,Hangup() --- # III - Parie 3 . Configuration d’un IVR (Interactive Voice Response) # a. Enregistrer des messages vocaux # Placez vos fichiers audio (format .gsm ou .wav) dans /var/lib/asterisk/sounds/. Exemple : welcome.gsm, option1.gsm, etc. b. Configurer l’IVR dans le dialplan Dans : sudo nano /etc/asterisk/extensions.conf --- exten => 900,1,Answer() exten => 900,n,Background(welcome) ; Message de bienvenue exten => 900,n,WaitExten(5) ; Attend une entrée utilisateur ; Options de l'IVR exten => 1,1,Dial(SIP/1001,20) ; Option 1 : transfère vers 1001 exten => 2,1,Queue(support) ; Option 2 : transfère vers la file d'attente exten => 3,1,Playback(goodbye) ; Option 3 : message d'au revoir exten => 3,n,Hangup() --- # c. Recharger le dialplan sudo asterisk -rvvv dialplan reload # 4. Tester et Déboguer #Vérifier la connexion au trunk : sip show registry #Vérifier les appels en cours core show channels #Voir les files d’attente queue show #Consulter les logs tail -f /var/log/asterisk/messages.log tail -f /var/log/asterisk/queue_log # 5. Exemples de Fonctionnalités Avancées # a. Enregistrement des appels # Ajoutez dans /etc/asterisk/extensions.conf : sudo nano /etc/asterisk/extensions.conf -- exten => 1001,1,MixMonitor(/var/spool/asterisk/monitor/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}.wav) exten => 1001,n,Dial(SIP/1001,20) --- # b. Horaires d’ouverture # Utilisez GotoIfTime pour gérer les horaires : # Ajoutez dans /etc/asterisk/extensions.conf --- exten => s,1,GotoIfTime(9:00-17:00,mon-fri,*,*?open) exten => s,n,Playback(closed) exten => s,n,Hangup() --- # Fichiers Clés : #/etc/asterisk/sip.conf -> Configuration des trunks et utilisateurs SIP #/etc/asterisk/extensions.conf -> Dialplan (logique d’appel) #/etc/asterisk/queues.conf -> Configuration des files d’attente #/var/lib/asterisk/sounds/ -> Fichiers audio pour l’IVR # VI - Etape 4 1. Sécuriser Asterisk # a. Limiter les accès SIP # Restreindre par IP dans sip.conf # Éditez /etc/asterisk/sip.conf ou pjsip.conf, et ajoutez : sudo nano /etc/asterisk/sip.conf # ou sudo nano /etc/asterisk/pjsip.conf #a. Limiter les accès SIP #Restreindre par IP dans sip.conf sudo nano /etc/asterisk/sip.conf et ajoutez : [general] allow=192.168.1.0/24 ; Autorise uniquement votre réseau local deny=0.0.0.0/0 ; Interdit tout le reste #Remplacez 192.168.1.0/24 par votre plage d’IP locale ou celle de votre fournisseur VoIP. #Désactiver l’enregistrement anonyme [general] : allowguest=no alwaysauthreject=yes ; Rejette les tentatives d'authentification invalides # b. Utiliser des mots de passe robustes #Générez des mots de passe complexes pour chaque utilisateur et trunk : openssl rand -base64 16 #Exemple pour un utilisateur SIP : --- [1001] type=friend secret=Asterisk*2025 context=default host=dynamic --- # c. Activer le chiffrement (TLS/SRTP) # Installer les certificats TLS sudo apt install openssl sudo mkdir /etc/asterisk/keys sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/asterisk/keys/asterisk.key -out /etc/asterisk/keys/asterisk.crt -days 365 -nodes sudo chown asterisk:asterisk /etc/asterisk/keys/* # Configurer TLS dans sip.conf --- [general] tlsenable=yes tlsbindaddr=0.0.0.0:5061 tlscertfile=/etc/asterisk/keys/asterisk.crt tlsprivatekey=/etc/asterisk/keys/asterisk.key #Configurer un utilisateur pour TLS [1001] type=friend transport=tls encryption=yes avpf=yes icesupport=yes --- # Configurer SRTP Dans sip.conf ou pjsip.conf : --- [1001] media_encryption=sdes --- # Ouvrir le port TLS dans le pare-feu sudo ufw allow 5061/tcp #Désactiver les services inutiles : sudo systemctl disable asterisk.socket #Mettre à jour régulièrement Asterisk et le système : sudo apt update && sudo apt upgrade -y #Utiliser fail2ban pour bloquer les attaques par force brute : sudo apt install fail2ban sudo systemctl enable fail2ban #Créez un filtre pour Asterisk dans /etc/fail2ban/jail.local : sudo nano /etc/fail2ban/jail.local --- [asterisk] enabled = true filter = asterisk action = iptables-allports[name=asterisk] logpath = /var/log/asterisk/security maxretry = 3 bantime = 1h # V - Etape 5. Superviser Asterisk # a. Utiliser Asterisk Stats # Activer le module AMI (Asterisk Manager Interface) : sudo nano /etc/asterisk/manager.conf --- [admin] secret = Asterisk*2025 read = system,call,log,verbose,command,agent,user,config write = system,call,log,verbose,command,agent,user,config --- # Redémarrer Asterisk sudo systemctl restart asterisk # Utiliser des outils de supervision : Asternic Call Center Stats : Téléchargement Asterisk CLI: asterisk -rvvv core show channels sip show peers # b. Installer FreePBX (interface graphique) #FreePBX est une surcouche graphique pour Asterisk. # Installation : sudo apt install -y apache2 mariadb-server php php-mysql php-curl php-gd php-intl php-pear php-imap php-memcache php-pspell php-tidy php-xmlrpc php-mbstring sudo mysql_secure_installation cd /usr/src sudo wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz sudo tar xfz freepbx-16.0-latest.tgz sudo mv freepbx /var/www/html/ sudo chown -R www-data:www-data /var/www/html/freepbx "Suivez l’assistant d’installation via votre navigateur : http://votre_ip/freepbx" # Si cela ne fonctionne pas lancer l'installation en ligne de commande : cd /var/www/html/freepbx/ sudo ./install # Laisser tout par défaut, sauf pour le mot de passe pour la BDD ## Ou installer la version 17 qui fonctionne avec la version d'Asterisk 22.5 sudo apt-get -y install net-tools htop screen tshark vim sngrep cd /tmp sudo wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh sudo bash /tmp/sng_freepbx_debian_install.sh # VI - Etape 6. Sauvegarder /etc/asterisk/ # a. Sauvegarde manuelle : sudo tar -czvf /backup/asterisk-$(date +%Y%m%d).tar.gz /etc/asterisk/ # b. Sauvegarde automatique avec cron # Éditez la crontab pour sauvegarder /etc/asterisk/ tous les jours à 3h du matin. sudo crontab -e --- 0 3 * * * tar -czvf /backup/asterisk-$(date +\%Y\%m\%d).tar.gz /etc/asterisk/ --- # c. Sauvegarder la base de données (si vous utilisez FreePBX) sudo mysqldump -u root -p asterisk > /backup/asterisk-db-$(date +%Y%m%d).sql sudo mysqldump -u root -p asteriskcdrdb > /backup/asterisk-cdr-$(date +%Y%m%d).sql # VII - Etape 7. Restaurer une sauvegarde # Restaurer les fichiers de configuration : sudo tar -xzvf /backup/asterisk-20250915.tar.gz -C / # Restaurer la base de données : sudo mysql -u root -p asterisk < /backup/asterisk-db-20250915.sql # VIII - Etape 8. Vérifier la sécurité # Tester les ports ouverts : sudo netstat -tulnp | grep asterisk # Vérifier les logs : sudo tail -f /var/log/asterisk/full sudo tail -f /var/log/asterisk/security # Commandes Utiles : #Lister les utilisateurs SIP connectés sip show peers #Activer le débogage SIP sip set debug on #Vérifier les connexions TLS tls list #Voir les IP bannies fail2ban-client status asterisk # Installer Zoiper sur les machines client pour faire les appels https://www.zoiper.com/en/voip-softphone/download/current ## Prochaines Étapes # Tester la configuration TLS avec un client SIP compatible (comme Linphone ou Jitsi). # Configurer des alertes pour les échecs de connexion ou les appels suspects. # Automatiser les sauvegardes vers un stockage externe (ex: AWS S3, FTP). https://github.com/pjsip/pjproject/archive/refs/tags/2.15.1.tar.gz ## Informations récap : Les fichiers de configuration principaux : sip.conf et extensions.conf - sip.conf : contient les numéros des postes téléphoniques qui se connecteront au serveur Asterisk, ainsi que les autres serveurs Asterisk à qui envoyer les appels, au travers d’un lien Trunk SIP (qui est une connexion entre 2 serveurs de téléphonie IP leur permettant d’acheminer les appels entre eux). - extensions.conf : permet de définir les règles d’acheminement des appels, c’est-à-dire où envoyer l’appel selon le poste qui émet l’appel et le numéro qu’il a composé. Il permet notamment d’indiquer au serveur de rediriger les appels vers des numéros externes à l’opérateur. La configuration de ces deux fichiers peuvent permettre aux appels passés d’un poste interne à un autre, soient redirigés vers le mauvais poste, et que les appels faits au prestataire, soient redirigés vers l’attaquant. L'accès à ces deux fichiers pour les modifier est l’objectif du pentesteur lorsqu’il prend sa casquette de cyberattaquant. # Fichiers Clés : #/etc/asterisk/sip.conf -> Configuration des trunks et utilisateurs SIP #/etc/asterisk/extensions.conf -> Dialplan (logique d’appel) #/etc/asterisk/queues.conf -> Configuration des files d’attente #/var/lib/asterisk/sounds/ -> Fichiers audio pour l’IVR