Guide Asterisk 11.x sur Raspbian (ua-netinst) par PierreDavidOriol also available in english

Introduction

Après avoir utilisé Asterisk 1.8 sur OpenWRT (Attitude Adjustment) avec succès pendant plusieurs années (c.f. Asterisk18SurOpenWRT), la maturité de ces deux produits ayant substantiellement augmenté, il était plus que temps de les mettre à jour et par le fait même de penser à une infrastructure permettant de mieux gérer les mises-à-jour, les paquets d'OpenWRT étant souvent désuets. Ce guide se veut donc une procédure de migration à une configuration Asterisk roulant sur Raspberry Pi (Raspbian), en mode autonome.

Matériel

<!> Attention, la durée de vie de la Carte SD utilisée pour contenir votre installation d'Asterisk va être affectée (limite sur les write-cycles) et devrait se situer autour de 2 ans (les cartes SD sont apparemment de moins bonne qualité que les clés USB). Vous devriez donc la remplacer aux 2 ans pour éviter les problèmes.

Installation de Raspbian

Merci à : https://github.com/debian-pi/raspbian-ua-netinst

Formattez votre carte SD en FAT32, copiez-y le contenu du .zip téléchargé ci-haut (suivre leurs instructions). Créer le fichier installer-config.txt avec le contenu suivant :

preset=server
packages=parted,dosfstools,build-essential,rsync,psmisc,bash-completion,sudo,apt-utils,vim,vim-nox,screen,unzip,zip,python-software-properties,aptitude,curl,ntp,ntpdate,git-core,wget,ca-certificates,binutils,raspi-config,preload,exim4,fail2ban,ufw,unattended-upgrades # comma separated list of extra packages
mirror=http://mirrordirector.raspbian.org/raspbian/
release=jessie # Vous pouvez choisir wheezy mais la suite va diverger. Jessie est relativement fiable au moment de l'écriture de ce texte.
hostname=<CHOISIR_VOTRE_HOSTNAME>
domainname=
rootpw=raspbian # Choisir un MDP de qualité.
cdebootstrap_cmdline=
bootsize=+50M # /boot partition size in megabytes, provide it in the form '+<number>M' (without quotes)
rootsize=     # / partition size in megabytes, provide it in the form '+<number>M' (without quotes), leave empty to use all free space
timeserver=1.ca.pool.ntp.org
ip_addr=<CHOISIR VOTRE IP STATIQUE OU METTRE DHCP>
ip_netmask=255.255.255.0
ip_broadcast=<CHOISIR L'IP EN FONCTION DE IP_ADDR>
ip_gateway=<VOTRE GATEWAY>
ip_nameservers=8.8.8.8 # Google.
online_config= # URL to extra config that will be executed after installer-config.txt
usbroot= # set to 1 to install to first USB disk
cmdline="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline"
rootfstype=ext4
rootfs_mkfs_options=
rootfs_install_mount_options='noatime,nodiratime,data=writeback,nobarrier,noinit_itable'
rootfs_mount_options='errors=remount-ro,noatime,nodiratime'

Vous pouvez ensuite insérer la carte dans votre Raspberry Pi et allumer celui-ci afin de démarrer l'installation.

Configuration de Raspbian

Après une 20-30aine de minute, votre environnement sera fonctionnel, et SSH écoutera avec l'IP choisi, sur le port 22.

Identifiez-vous avec le mot de passe choisi ci-haut (compte root), ou changez le à l'aide de la commande :

passwd

Ajustez le fuseau horaire en fonction de celui désiré :

sudo cp /usr/share/zoneinfo/Americas/Montreal /etc/localtime

Sécurité

ssh

Configurez des paramètres SSH de qualité, dans /etc/ssh/sshd_config (valide pour OpenSSH 6.6+) :

Protocol 2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-sha1
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1

(...)

# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
# Supprimez les autres HostKey

(...)

PermitRootLogin no

sudo

Créez-vous un autre compte non-root avec accès sudo :

adduser <CHOISIR_VOTRE_USER>
cut -d: -f1 /etc/group.
usermod -aG adm,audio,sudo,ssh,video <VOTRE_USER>
id <VOTRE_USER>

Ensuite testez qu'il fonctionne avec :

su - <VOTRE_USER>
sudo cat /etc/passwd

Vous pouvez redémarrer (Et croiser les doigts).

updates sécurité

Tenez votre Raspberry Pi à jour :

Vous devriez avoir le paquet unattended-upgrades d'installé.

Dans le répertoire /etc/apt/apt.conf.d crééz un fichier nommé (par exemple) 20auto-upgrades-security.

cd /etc/apt/apt.conf.d/
sudo touch 20-auto-upgrades-security

Puis editez son contenu pour y ajouter :

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Ensuite, éditez le fichier 50unattended-upgrades qui devrait déjà exister dans le même répertoire.

Modifiez la ligne suivante (début du fichier) :

//      "o=Raspbian,n=jessie";

pour

      "o=Raspbian,n=jessie,l=Raspbian-Security";

Vous pouvez ensuite tester que les upgrades fonctionnent bien avec la commande suivante :

sudo unattended-upgrade --dry-run
tail -n 10 /var/log/unattended-upgrades/unattended-upgrades.log 

Optimisations

Quelques petites optimisations pour augmenter la durée de vie de votre carte SD :

Assurez-vous que le swap soit désactivé.

sudo swapoff --all
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove

Mettez votre partition /boot en lecture seulement, en éditant /etc/fstab

Changez la ligne

/dev/mmcblk0p1 /boot vfat defaults 0 2

Pour y mettre

/dev/mmcblk0p1 /boot vfat ro 0 2

<!> Certaines mises-à-jour auront besoin d'écrire dans la partition /boot, soyez-prêt à devoir la remettre rw.

Il peut aussi être utile d'augmenter la fréquence de vérification du système de fichiers principal (par exemple aux 3 redémarrages) :

sudo tune2fs -c 3 /dev/mmcblk0p2

Et d'activer la réparation automatique d'erreurs, en modifiant la ligne suivante dans le fichier /etc/default/rcS :

FSCKFIX=yes

Autres

Configurez exim4 (envoi de courriel pour voicemail Asterisk) :

sudo dpkg-reconfigure exim4-config

Vous pouvez vous inspirer des valeurs suggérées à http://www.sbprojects.com/projects/raspberrypi/exim4.php

Sinon utilisez votre propre serveur smtp (FAI, ou autre).

Installation d'Asterisk

Vous pouvez maintenant installer Asterisk. Ceci aurait pu être directement effectué lors du netinst avec le fichier installer-config.txt tel qu'indiqué ci-haut.

sudo apt-get install asterisk asterisk-config asterisk-core-sounds-en asterisk-core-sounds-en-g722 asterisk-core-sounds-en-gsm asterisk-core-sounds-en-wav  asterisk-prompt-fr-proformatique asterisk-core-sounds-fr-g722 asterisk-core-sounds-fr-gsm asterisk-core-sounds-fr-wav asterisk-modules  asterisk-mp3 asterisk-voicemail

Configuration d'Asterisk

Une fois l'installation terminée, vous pouvez récupérer vos fichiers de configuration d'une installation antécédente, par exemple par SSH...

sudo scp <COMPTE>@<ADRESSE_ATERISK_OPENWRT>:/mnt/usb/etc/asterisk/*.conf .
sudo scp <COMPTE>@<ADRESSE_ATERISK_OPENWRT>:/mnt/usb/usr/bin/watchdog.sh /usr/bin/

Ajustements configuration

Si vous aviez suivi les guides précédents, quelques fichiers de configuration doivent être ajustés :

Dans /etc/asterisk/asterisk.conf vérifiez les chemin d'accès :

astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /usr/share/asterisk
astagidir => /usr/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk

Dans /etc/asterisk/modules.conf désactivez les modules que vous n'utilisez pas.

noload => chan_motif.so
noload => res_corosync.so
noload => res_xmpp.so
(...)

Dans /etc/asterisk/voicemail.conf ajustez la ligne d'envoi pour qu'elle fonctionne avec exim4 :

mailcmd=/usr/sbin/exim -t -f <ADRESSE_EMAIL>

Faites le tour des configurations que vous auriez modifiées pour voir ce qui a besoin d'être ajusté, beaucoup de configurations sont directement compatibles entre 1.8 et 11.x.

Blacklist

Vous pouvez exporter votre ancienne blacklist (utilisant un Asterisk fonctionnel et activé) sous forme d'un script vous permettant de la réimporter simplement, avec la commande suivante :

asterisk -rx 'database show blacklist' | head -n -1 | sed -e "s/\/blacklist\/\([^ ]\+\).\+/asterisk -rx 'database put blacklist \1 1'/" > /usr/bin/database.sh && sed -i '1s/^/#!\/bin\/bash\n/' /usr/bin/database.sh

Puis copier le fichier résultant /usr/bin/database.sh là où vous le voudriez.

Ceci peut être ajouté dans un crontab pour des backup de blacklist réguliers.

<!> Vous pouvez aussi essayer de prendre directement le fichier de DB mais ceci peut vous causer des ennuis par la suite (100% CPU après quelques minutes d'exécution).

Sécurité

Vous pouvez ajuster le script de watchdog utilisé sous OpenWRT pour qu'il ressemble à celui-ci.

   1 #!/bin/bash
   2 
   3 DEST=
   4 
   5 if [ -z "$(pidof asterisk)" ]; then
   6 
   7         echo "Asterisk not running at $(date)" >> $DEST/var/log/asterisk/watchdog.log
   8         
   9         service asterisk restart
  10 
  11 fi
  12 
  13 exit 0

Ne pas oublier de l'ajouter à un cron.

Vous pouvez aussi maintenant utiliser Fail2Ban, comme Asterisk 11.x conserve les IP tentant de s'authentifier SIP dans les logs :

https://sourceforge.net/p/raspbx/discussion/tutorials/thread/6288a838/

Backup

Un court script de backup sur clé USB existe ici https://github.com/billw2/rpi-clone

Vous pouvez l'installer facilement avec les commandes qui suivent :

git clone https://github.com/billw2/rpi-clone.git 
cd rpi-clone
cp rpi-clone /usr/local/sbin

Pour créer une clé USB (formatée) et lancer le backup utiliser la commande

sudo /usr/local/sbin/rpi-clone sda -f -v

Pour recommencer

Si vous voulez recommencer votre installation à partir du début, utilisez la commande suivante pour réinstancier l'installation netinst.

mv /boot/config-reinstall.txt /boot/config.txt && reboot

Et après ?

Si vous voyez des erreurs/omissions, n'hésitez pas à modifier le wiki, c'est un wiki et donc l'objectif est d'obtenir une documentation collaborative correcte.

Asterisk11xSurRaspbian (last edited 2018-05-19 01:22:54 by gabriel)