Votre navigateur est obsolète !

Pour une expériencenet et une sécurité optimale, mettez à jour votre navigateur. Mettre à jour maintenant

×

Mathias WOLFF

Chef de projet & consultant - télécoms - VoIP

Chef de Projet
Expert
Formateur
VoIP
50 ans
Permis de conduire
NANTES (44000) France
Situation professionnelle
En poste
Indisponible
Présentation
Chef de Projet et expert télécom, j'accompagne les entreprises dans leurs projets télécoms et informatique.

J'interviens notamment sur les technologies VoIP et TDM et en développement d'applications spécifiques (PHP, Python, Django, MySQL, PostreSQL, MongoDB ...).
Je suis par ailleurs le créateur / mainteneur du projet PyFreeBilling, softswitch opérateur class 4 VoIP (technologie : Kamailio/voip, python/django, postgresql, LUA).
Blog des télécoms www.blog-des-telecoms.com
Regex match E.164 international phone number
15 avr. 2024

Les regex sont des outils très puissants pour valider des formats et extraire des parties de chaines de caractères. Voici une regex très utile dans le domaine de la téléphonie permettant de valider si le numéro appelé ou présenté respecte le format internationnal E.164 :

^\+[1-9][0-9]{5,14}$

Voici un exemple d'utilisation en langage Rust :

// include the latest version of the regex crate in your Cargo.toml
extern crate regex;

use regex::Regex;

fn main() {
  let regex = Regex::new(r"(?m)^\+[1-9][0-9]{5,14}$").unwrap();
  let string = "+3390123456789";
  
  // result will be an iterator over tuples containing the start and end indices for each match in the string
  let result = regex.captures_iter(string);
  
  for mat in result {
    println!("{:?}", mat);
  }
}

et en golang :

package main

import (
    "regexp"
    "fmt"
)

func main() {
    var re = regexp.MustCompile(`(?m)^\+[1-9][0-9]{5,14}$`)
    var str = `+3390123456789`
    
    for i, match := range re.FindAllString(str, -1) {
        fmt.Println(match, "found at index", i)
    }
}
Coturn : installation avec docker et Let's Encrypt
05 janv. 2024

Un serveur STUN est utile dans le processus de découverte de l'adresse IP publique à la fois pour les terminaux SIP mais surtout les applications WebRTC.

Le WebRTC nécessite une connexion directe entre les pairs, mais souvent une connexion directe ne peut pas être établie notamment à cause du NAT et un serveur TURN est donc nécessaire.

Dans cet article, nous allons expliquer comment vous pouvez exécuter votre propre serveur STUN/TURN en utilisant l’implémentation du serveur STUN/TURN open source, c’est-à-dire Coturn.

Enregistrement DNS de type CAA
11 mai 2021

Défini en 2013 par la RFC6844, le CAA est un type d'enregistrement DNS qui permet aux propriétaires de sites de préciser quelles autorités de certification (CA) sont autorisées à émettre des certificats contenant leurs noms de domaine.

Navigateurs sécurisés et respectueux de la confidentialité
12 janv. 2021

Un navigateur sécurisé et respectueux de la vie privée est essentielle. Il est notre point d'entrée sur la toile, et il se doit de protéger notre navigation. Mais un navigateur sécurisé est important car ils présentent une importante surface d'attaque et peuvent être compromis par différentes techniques. Les navigateurs disposent aussi de nombreuses informations privées (historique de navigation, identifiant / mot de passe, informations auto complétées ...). Ils peuvent aussi transmettre vos informations de localisation géographique, vos paramètres (logiciels, matériels ...). Le choix et la mise à jour régulière d'un navigateur est essentiel. Je vous partage une liste non exhaustive de navigateur répondant aux critères de sécurité et de respect de la vie privée. Vous pouvez proposer d'autres (avec quelques informations) en commentaire.

Tor Browser

Le navigateur Tor est une version renforcée de Firefox qui utilise également le réseau Tor par défaut (mais cela peut être désactivé). https://www.torproject.org/

Firefox (modifié)

Firefox est un excellent navigateur pour la confidentialité et la sécurité après avoir effectué quelques modifications. Sa personnalisation (paramètres et extensions) peut vous donner le niveau de sécurité et de confidentialité appréciable. https://www.mozilla.org/fr/firefox

Iridium

Iridium est un navigateur basé sur Chromium configuré pour la confidentialité et la rapidité. Je vous encourage à lire le wiki qui détaille les différences en terme de sécurité et de confidentialité avec Chromium : https://github.com/iridium-browser/tracker/wiki https://iridiumbrowser.de/

Brave

Brave est un navigateur basé sur chrome qui est très axé sur la confidentialité. Par défaut, il bloquera les publicités et les trackers. Il est également personnalisable, rapide et doté d'une protection intégrée contre le fingerprinting. https://brave.com/

Gnu IceCat

GNU IceCat est un autre fork de Firefox, créé par les personnes du projet de logiciel libre GNU. IceCat répond à la définition de «logiciel libre» et inclut également certains modules complémentaires (notamment GNU LibreJS. Plus d'infos https://www.gnu.org/philosophy/javascript-trap.html ) et des paramètres par défaut afin de renforcer la vie privée (Https-Everywhere et SpyBlock). https://www.gnu.org/software/gnuzilla/ Cette liste n'est pas exhaustive. Par exemple, j'aime bien le navigateur Vivaldi, mais sans extensions et réglages appropriés, il ne peut répondre aux critères et son code n'est pas disponible.

Comment envoyer des SMS à partir d'un Raspberry ?
11 juin 2020

Une carte Raspberry peut-être utilisée pour de nombreux cas d'usage et nous allons l'utiliser pour envoyer des SMS.

SIP - PFSense : Comment résoudre une perte d'enregistrement
20 mars 2020

Les postes sont localisés sur un site et passe par internet pour accéder au serveur de téléphonie VoIP SIP qui est situé derrière un PFSense.

Vous constatez un défaut d’enregistrement de vos téléphones SIP pendant plusieurs minutes, ceux-ci affichant un message « No service » ou « prov. server failed ».

Vous devez surement faire face à un timeout d'état de la table NAT du firewall PFSense. En effet, ce timeout doit-être inférieur à la fréquence de ré-enregistrement des postes SIP ! Les délais d'expiration UDP par défaut dans PFSense sont trop faibles pour certains services VoIP. Si les téléphones fonctionnent principalement, mais se déconnectent de manière aléatoire, il faut modifier les options d'optimisation du pare-feu sur les mettant sur "Conservateur" sous Système> Avancé, onglet Pare-feu / NAT.

Un système de keep-alive (ou autrement un ping SIP avec un message OPTION) ou une réinscription sur le poste téléphonique pendant une durée plus faible, environ 20 à 30 secondes, peut également aider, et est souvent une meilleure solution.

Sparrow : Wazo PBX sur Raspberry Pi
29 févr. 2020

Le jeune projet Sparrow propose un build non officiel de l'architecture armhf de plateforme Wazo. Il vous permet d'héberger un système téléphonique VoIP Open Source complet et programmable sur un Raspberry Pi. Un autre projet qui semble maintenant peu maintenu permettait d'installer un système Xivo ou Wazo (mais en 18.03) sur Raspberry, Raspvivo.

J'apprécie particulièrement cette architecture, car elle permet de manière efficace et avec une faible consommation de faire fonctionner des services performants. Dans la même veine, mais j'en parlerai dans un autre article, j'ai fait fonctionner la plateforme de class 4 de Wazo sur un cluster Kubernetes à base de cartes Raspberry.

J'aime bien la définition de Wazo :

Wazo Platform is an Open Source project writen in python who gets the best from Asterisk and Kamailio to build a telecom platform.

Sparrow peut fonctionner sur n'importe quel système avec une architecture armhf. Il est néanmoins recommandé 2 Go de RAM et une carte SD rapide industrielle d'une taille d'au moins 16 Go. Attention au volume des messages de logs, des backups et surtout des messages vocaux, le chiffre annoncé étant un minimum ! La dernière version est basée sur Wazo 20.01. C'est la seconde version de Sparrow, la première release datant du 3 janvier 2020.

L'ensemble des fonctionnalités de Wazo Platform sont disponibles sous Sparrow sauf le codec OPUS qui n'est pas fonctionnel. Mais cela n'impactera que les applications WebRTC. De plus, du fait des faibles ressources d'une carte raspberry PI, les capacités de transcodage sont fortement limitées.

Veillez bien à correctement configurer vos paramètres SIP. Le process d'installation est assez simple. Après avoir installé la distribution Raspbian en version minimale (basée sur debian Buster, les dernières releases de Wazo ne supportant plus Jessie mais uniquement Buster), l'installation se déroule en quelques simples lignes de commandes. Le process prend du temps, profitez en pour prendre un bon café et marcher un peu !

Je n'ai pas eu le temps de faire des tests de performances, mais on peut facilement estimer que pour une petite entreprise équipée de 1 ou 2 T0 (2 à 4 appels simultannés) ou une utilisation en homelab, le Raspberry sera suffisament performant. La documentation est accessible ici : https://sparrow.b5.pm/docs et le repo github : https://github.com/benasse/sparrow

Merci Benoit Stahl pour ce superbe travail qui met en valeur la force d'une communauté Open Source.

Critical FreePBX Security Vulnerability v12 & v13
20 nov. 2019

Une vulnérabilité de sécurité critique découverte dans FreePBX permet l'exécution de code à distance sans authentification. Les serveurs FreePBX en version 14 ou 15 sont automatiquement mises à jour. Par contre, les serveurs fonctionnant en version 12 ou 13 doivent-être mises à jour manuellement. Assurez-vous que votre serveur FreePBX est mis à jour avec les dernières versions !

Routage SIP asynchrone : performance et montée en charge chez Wazo
12 nov. 2019

Je vous partage un article écrit par Fabio de la team Wazo. L'objectif de Wazo Platform est de proposer une solution télécom flexible, facile à configurer et performante pour les opérateurs. Le composant clé de la solution est le routeur SIP basé sur le projet Kamailio, le serveur SIP open-source de premier plan. L'objectif est, tout en offrant une grande flexibilité et une grande facilité de configuration, d'éviter tout compromis sur les performances.

Bonne lecture : Kamailio routing with rtjson and http_async_client

Comment sécuriser Django, framework python
27 févr. 2019

Tout le monde est maintenant conscient de l'importance de délivrer ou utiliser un service web fortement sécurisé. Il est indispensable de protéger les données stockées dans les bases de données, valeurs inestimables, et assurer la confidentialité des échanges. L'utilisation d'un framework comme Django permet de partir sur des bonnes bases. Mais nous allons voir qu'il est nécessaire de paramétrer finalement celui-ci.

Comment sécuriser Django ?

Je vais me servir d'un exemple concret, l'application PyFreeBilling dont je suis le créateur. PyFreeBilling est une application complète de VoIP (fonctionnalités de class 4 pour les connaisseurs) permettant à un opérateur télécom ou à une entreprise de services de connecter des clients et des fournisseurs, de router les appels, d'appliquer un tarif selon le type d'appel ainsi que l'ensemble des tâches nécessaires à cette activité. L'exemple est intéressant du point de vue de la criticité de l'application. Une solution de communications de VoIP doit-être fortement sécurisée. Les risques de fraudes, de divulgation d'informations ou de perte de services sont importants. Un serveur à peine déployée subit ses premières attaques au bout de quelques minutes ceci étant aidé par des frameworks permettant d'automatiser les attaques. L'interface de gestion de PyFreeBilling est développée avec le framework Django.

Pourquoi sécuriser Django ?

La sécurisation de l'interface d'administration est essentielle. Elle permet de gérer a création et la suppression de comptes SIP, la modification de mots de passe, l'augmentation des limites comme le nombre d'appels simultanés ou le volume d'appels journaliers. Un système d'anti-fraude peut ainsi être facilement détourné, un compte utilisateur pirate créé et des routes créées. Un assaillant peut aussi récupérer les données des accès opérateurs ou la base clients.

Les risques

Je vais maintenant présenter les types d'attaque les plus courantes et puis montrer comment avec Django mettre en oeuvre des solutions afin de limiter le risque.

L'OWASP est une communauté spécialisée dans la sécurité des applications web. Ils proposent notamment des outils afin de tester la sécurité des applications web. Un projet va particulièrement nous intéresser : OWASP Application Security Verification Standard (ASVS) . Je vous engage notamment à lire les cheatsheets mises à disposition.

Voici le top ten des risques définis par l'OWASP (les liens conduisent à la page détaillant chaque item) :

Mise en oeuvre des contre-mesures

Maintenant que nous avons identifié les risques et nous avons une base documentaire solide sur laquelle nous appuyer, nous allons voir les contre-mesures pour sécuriser Django.

Les injections

Tout d'abord, nous allons voir les injections SQL. Django fournit un ORM qui permet de se protéger de ce risque en échappant les variables avant de soumettre la requête à la base de données. A la condition, de ne pas utiliser la fonction RawSQL permettant d'utiliser du code SQL natif. Dans ce cas, c'est au développeur de valider les variables utilisées dans la requête !

Attention : l'ORM ne dispense pas de valider les variables, c'est une bonne pratique !

L'authentification

Nous allons retrouver plusieurs sous parties.

Tout d'abord, nous allons voir comment se protéger des attaques par brute force.

Pour se protéger des attaques que subissent constamment les pages de login, les attaques par brute force, j'utilise le package django-axes . Il permet de bloquer une adresse IP après un nombre prédéfini de tentatives infructueuses. La configuration par défaut est très satisfaisante, mais je vous invite à lire la documentation de django-axes afin de tuner votre configuration selon vos souhaits, notamment si vous avez besoin de whitelister quelques adresses IP.

Toutes les tentatives sont accessibles via l'interface d'administration incluant les adresses IP, les navigateurs, les noms d'utilisateurs utilisés ...

En complément, un honeypot est intégré afin de détecter les robots malveillants testant la page /admin, page identique à la vraie page de connexion ! Toute tentative est ainsi bloquée en amont. Pour cela, j'utilise le package django-admin-honeypot.

Le second point, concerne la robustesse des mots de passe. Très souvent les utilisateurs utilisent des mots de passe trop simples. Afin, de renforcer la complexité des mots de passe, Django intègre des validateurs de mots de passe, dont voici un exemple de configuration :

AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': { 'min_length': 9, } }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ]

Nous allons tout d'abord vérifier que le mot de passe n'est pas trop similaire avec un attribut de l'utilisateur, puis que la longueur minimum est de 9 (je suggère d'augmenter cette valeur), ensuite nous allons vérifier s'il ne fait pas partie d'une liste de mots de passe couramment utilisés et que le mot de passe n'est pas entièrement composé de chiffres. Par ailleurs, il est aussi possible d'intégrer son propre validateur en plus de ceux prédéfinis par Django.

Le stockage du mot de passe en base de données doit aussi être particulièrement surveillé.

Django ne stocke heureusement pas les mots de passe en clair dans la base de données, mais un hash de celui-ci. Nous avons la flexibilité d'utiliser les méthodes de hachage de notre choix, mais dans une liste réputée sécurisée. Par défaut, c'est l'algorithme PBKDF2 avec un hash SHA265.

PyFreeBilling utilise l'algorithme Argon2 étant réputé plus sécurisé.

(https://docs.djangoproject.com/en/2.1/topics/auth/passwords/#auth-password-storage)

Il est possible et souhaitable d'activer une double authentification (two-factor authentication). Dans PyFreeBilling, cette fonctionnalité est optionnelle, car selon le type de déploiement, la mise en oeuvre sera plus ou moins complexe. Mais je recommande très fortement la prise en considération de cette fonctionnalité qui va renforcer sensiblement l'application. Pour cela, l'application django que je recommande est django-two-factor-auth qui intègre de nombreux services. Je ne vais pas détailler ici la mise en oeuvre, un article entier serait nécessaire. Je vous encourage à lire la documentation qui est bien faite.

Exposition de données sensibles

Il est essentiel de s'assurer qu'aucune donnée sensible ne puisse être interceptée.

Tout d'abord la mise en oeuvre du protocole HTTPS afin de garder confidentielles les données échangées est indispensable.

Par défaut, Django autorise les échanges via le protocole HTTP, mais pour des raisons évidentes, l'accès à l'interface d'administration de PyFreeBilling est forcée en HTTPS.

Pour cela nous allons forcer le navigateur l'utilisation du protocole HTTPS en activant l'entête HTTP Strict Transport Security ou HSTS.

Django définit cet en-tête pour vous sur toutes les réponses HTTPS si vous définissez le réglage SECURE_HSTS_SECONDS à une valeur entière différente de zéro.

Voici les paramètres correctement configurés :

  • SECURE_HSTS_SECONDS = 15768000 # 6 mois
  • SECURE_HSTS_INCLUDE_SUBDOMAINS = True
  • SECURE_HSTS_PRELOAD = True

(https://docs.djangoproject.com/en/2.1/ref/middleware/#http-strict-transport-security)

Définissez aussi le paramètre SECURE_SSL_REDIRECT sur True, ainsi toutes les demandes non SSL seront redirigées de manière permanente vers SSL.

Ensuite, nous allons intégrer des entêtes HTTP afin d'activer des paramètres de sécurité embarqués dans les navigateurs modernes (et oui, il faudrait bloquer les vieux navigateurs troués comme de vieux torchons).

Anti-click jacking :

Le principe est d'interdire l'affichage d'une page de notre interface d'administration dans une frame. Django possède nativement les protections, mais qu'il faut activer correctement via les variables suivantes :

Tout d'abord il faut activer le middleware "django.middleware.clickjacking.XFrameOptionsMiddleware" afin d'ajouter l'entête X-FRAME-OPTIONS à toutes les réponses.

Par défaut, la valeur de l'entête X-Frame-Options est à SAMEORIGIN, mais il est possible de forcer à DENY ce qui est fait pour l'administration de PyFreeBilling. Ainsi, on interdit au navigateur d'intégrer nos pages dans une iFrame.

(https://docs.djangoproject.com/en/2.1/ref/clickjacking/)

Entête CSP :

Les entêtes Content Security Policy ou CSP permet de contrôler la manière dont les ressources sont inclues dans la page.

Afin de gérer ces entêtes, le package django-csp est utilisé (https://github.com/mozilla/django-csp). Il permet de paramétrer très finement nos ressources.

Tout d'abord nos devons activer le middleware "csp.middleware.CSPMiddleware" et ensuite définir les valeurs souhaitées pour les paramètres.

Le choix fait pour PyFreeBilling est de n'utiliser aucune ressources externes pour des raisons de sécurité, mais aussi afin de pouvoir fonctionner sans accès internet (c'est le cas de certains clients). Le paramétrage des entêtes CSP est ainsi simplifié. Pour comprendre en détail les différentes valeurs, je vous engage à lire les spécifications CSP puis la documentation de django-csp.

Protection XSS :

Définissez le paramètre SECURE_BROWSER_XSS_FILTER sur True afin d'activer les protections de filtrage XSS du navigateur.

Entête X-Content-Type-Options :

Enfin, il est avisé d'empêcher le navigateur de déterminer le type de fichier en ajoutant un entête X-Content-Type-Options. Pour cela Django dispose d'une variable (à False par défaut) qu'il faut passer à True : SECURE_CONTENT_TYPE_NOSNIFF (https://docs.djangoproject.com/en/2.1/ref/settings/#secure-content-type-nosniff)

XML entités externes

Je ne vais pas traiter de cette partie, n'utilisant pas ce type de fonctions dans PyFreeBilling. Si vous souhaitez l'utiliser, vous devez soit écrire le code ou utiliser une librairie. Je vous invite à lire la documentation associée et utiliser les éléments de filtrage proposés nativement par Django.

Vous pouvez apporter des éléments en commentaire du présent article pour les futurs lecteurs (je compléterais à l'occasion cette partie)

Broken accès control

Django propose de base une gestion des utilisateurs et des groupes d'utilisateurs. Des décorateurs permettent de définir l'accès à une ressource donnée avec des droits différents : lecture, modification, création ... .

Il est aussi possible de définir plus finement l'accès. Un package très utilisé est django-braces.

D'autres plugins permettent de gérer plus finement par objet ou par certains attributs. Dans tous les cas, c'est de la responsabilité du développeur d'utiliser correctement ces outils et de tester les accès suivant les différents typologies d'utilisateurs.

Mauvaises configuration de sécurité

C'est l'objet de l'article de pointer sur les points d'attention lors du paramétrage d'un projet Django. Il existe des outils afin de valider que rien n'a été oublié.

Je vous en propose 2 :

FreesScan de Qualys qui va permettre de tester en profondeur votre site avec un rapport précis. Il va tester les certificats et la configuration du serveur web. Voici la note obtenue par un déploiement de PyFreeBilling de base sous docker :

Tous les éléments ne sont pas testés, mais ça permet de valider rapidement notre déploiement.

Et l'Observatory, outil de Mozilla permettant de vérifier de nombreux points de sécurité : il valide la sécurité des en-têtes OWASP, les meilleures pratiques TLS et effectue des tests tiers à partir de SSL Labs, High-Tech Bridge, des en-têtes de sécurité, du préchargement HSTS, etc. Il est particulièrement complet et aussi très instructif.

Cross-Site Scripting (XSS)

C'est une des failles visant le navigateur des utilisateurs. Nous allons voir comment des paramètres Django vont pouvoir nous prémunir contre elles, sachant que les outils automatisées savent les détecter et les exploiter !

Nous avons déjà vu dans la section "exposition de données sensibles" en ajoutant des entêtes HTTP en ajoutant des paramètres nous protégeant de failles XSS. Nous allons voir comment nous protéger du vol de sessions.

Il s'agit de bloquer l'accès à un code javascript exécuté dans le navigateur par un assaillant au cookie de session . Pour cela, nous allons forcer l'envoi de l'entête httpOnly transmise avec le cookie.

Les sessions sont gérées par le middleware : 'django.contrib.sessions.middleware.SessionMiddleware', et l'activation de l'entête est faite par la variable SESSION_COOKIE_HTTPONLY (https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-SESSION_COOKIE_HTTPONLY).

Explication de la team django : 'It’s recommended to leave the SESSION_COOKIE_HTTPONLY setting on True to prevent access to the stored data from JavaScript.'

Afin de renforcer la sécurité des cookies, nous allons modifier 2 paramètres :

Enfin, nous allons forcer l'échange de cookies uniquement via une connexion HTTPS : la configuration par défaut est à False. Pour forcer l'échange via HTTPS, il faut mettre SESSION_COOKIE_SECURE à True.

(https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-SESSION_COOKIE_SECURE)

La doc de référence de Django pour les sessions : https://docs.djangoproject.com/en/2.1/topics/http/sessions/

Insecure Deserialization

Je vais faire la même remarque que pour le traitement de document XML.

Utiliser des composants incluant des vulnérabilités connues

Django étant un framework python, vous avez plusieurs outils vous permettant d'être notifié quand une dépendance est mise à jour. Mais surtout, certains outils peuvent envoyer une notification quand une dépendance utilisée contient une faille de sécurité. J'utilise PyUp pour cela. Ils annoncent surveiller 173 000 dépendances python ! Si votre projet utilise aussi du code qui n'est pas écrit en python, ce qui est souvent le cas comme du javascript, d'autres outils existent. Pour ce javascript, npmjs ou Retire.js pourront vous être très utiles. Retire.js propose même des extensions pour Chrome et Firefox ! OWASP dispose aussi d'un outil pouvant être intégré dans votre Jenkins préféré appelé OWASP Dependency Check. Il supporte actuellement les langages Java, .NET, Ruby, Node.js, Python et partiellement C++.

Insufficient Logging&Monitoring

Il est en effet essentiel de logger les erreurs mais surtout de les traiter. Django propose des outils de génération de logs poussés. Une section dédiée à la génération de logs liés à la sécurité : https://docs.djangoproject.com/en/2.1/topics/logging/#django-security. Pour un gros projet, un outil comme Sentry qui s'intègre parfaitement avec Django est un très intéressant. Et pour surveiller votre application Django, les packages de monitoring sont listés dans https://djangopackages.org/grids/g/monitoring/

Conclusion

Nous avons vu au cours de cette article que la sécurisation d'une application web est une tâche complexe nécessitant de bien connaître les risques. Un framework puissant comme Django, à condition de bien le maîtriser, nous facilite la tâche. Et pour finir, je vais vous partager un dernier truc afin d'améliorer la sécurité de notre projet Django : restreindre l'accès à toutes ou certaines URL à une ou plusieurs adresses IP. Pour cela, le package django-iprestrict est l'outil adéquate. Afin de bloquer/autoriser l'accès à partir de région ou pays, geoip2 sera utilisé. Tout d'abord, il faut activer le middleware "iprestrict.middleware.IPRestrictMiddleware". Le paramétrage se fait ensuite dans l'interface d'administration. Et surtout pour sortir sécuriser Django correctement, sinon tous vos efforts auront été vains, assurez-vous d’utiliser un SECRET_KEY long, aléatoire et unique !

Si vous avez des remarques ou des packages intéressants à partager afin d'améliorer la sécurité d'un projet Django, les commentaires sont à votre disposition.

RTPBleed et Asterisk : les appels d'Asterisk sous écoute
08 sept. 2017

Asterisk souffre d'un problème assez grave permettant à un attaquant d'écouter simplement vos conversations. Une attaque de l'homme du milieu (man-in-the-middle), sans être vraiment au milieu d'ailleurs, permet de rediriger les flux RTP assez facilement. L'annonce a été faite il y a quelques jours (31/08/2017). Il s'agit en fait d'un vieux bug datant de 2011 qui a été réintroduit au premier trimestre 2013. Le premier report annonçant la régression date de mai dernier ainsi que le patch (fournit pour test). L'annonce officielle a été faite le 31 août dernier. Quelles sont les versions vulnérables ? Toutes les versions d'Asterisk entre la 11.4.0 à la 14.6.1 sont malheureusement touchées. Dans quel cas le serveur Asterisk est vulnérable ? Quand le serveur Asterisk fonctionne avec des postes derrière un routeur NAT, il est nécessaire de mettre en oeuvre des actions afin de router correctement les paquets voix. Le protocole SIP s'appuie sur le protocole RTP afin de transporter la voix et le protocole SDP afin que les user-agents (UA) puissent négocier entre eux des éléments comme les codecs, adresses et ports. Ces éléments sont échangés en clair sur le réseau. Pour permettre ces négociations, le serveur Asterisk est configuré (fichier sip.conf) avec les options nat=yes et strictrtp=yes. De plus, ces options sont configurées ainsi par défaut ! Comment exploiter la faille ? Un attaquant doit envoyer des paquets RTP au serveur Asterisk sur un port alloué pour recevoir un flux RTP. Si le serveur est vulnérable, alors le serveur Asterisk répond à l'assaillant en relayant les paquets RTP du destinataire véritable. Il est ensuite aisé avec des outils comme Wireshark de décoder le flux audio. Quelles sont les actions de mitigation envisageable ?

  • La première recommandation est de ne pas transporter les flux SIP et RTP sur internet en clair, mais d'utiliser un tunnel VPN. Si cela n'est pas possible pour diverses raisons bonnes ou mauvaises, voici d'autres solutions :
  • application du patch fournit par Asterisk (https://raw.githubusercontent.com/kapejod/rtpnatscan/master/patches/asterisk/too-short-rtcp-bugfix.diff) qui actuellement limite la fenêtre temps de l'attaque aux toutes premières millisecondes.
  • éviter l'option nat=yes si possible
  • chiffrer les flux RTP avec SRTP (je vous invite aussi à chiffrer les flux SIP et à utiliser le protocole de transport TCP uniquement pour ce dernier afin de fiabiliser les échanges au lieu de l'UDP)
  • ajouter une option de configuration à vos peers SIP afin de prioriser les paquets RTP venant de l'adresse IP apprises au travers de l'échange initial effectué via le protocole SIP.

Par ailleurs, si vos postes IP et vos fournisseurs de trunk SIP utilisent des adresses IP fixes et connues, la mise en oeuvre d'une règle sur votre firewall bloquant l'accès aux ports UDP 10000 à 20000 (ports RTP utilisés par défaut par un serveur Aterisk) uniquement à partir de ces adresses apporte une protection suffisante. Comment vérifier si mon serveur Asterisk est vulnérable ? L'outil rtpnatscan permet de tester votre serveur Asterisk. Références :

freeswicth ansible role 2.0 just released
11 avr. 2017

Je viens de publier la nouvelle version du role ansible permettant une installation / mise à jour automatisée de FreeSwitch avec plusieurs bonus optionnels comme fail2ban, sngrep ...

Le role est fait pour fonctionner exclusivement avec Debian Jessie. J'intégrerai Stretch le moment venu.

Contrairement à la version précédente, l'installation se fait à partir des paquets fournis par la team FreeSwitch (je suis leurs recommandations).

L'utilisation est présentée dans le README.

Vous le trouverez dans la galaxy ansible : https://galaxy.ansible.com/mwolff44/freeswitch-mw/

N'hésitez pas à me faire des retours. Note : le repo officiel est hébergé par framagit : https://framagit.org/mwolff44/freeswitch-mw/ même si une copie existe sur github pour ansible-galaxy. Modifications :

  • 12/04/2017 : v2.1 : mise à jour du kernel via les backports (performance) / installation de locales spécifiques / installation de paquets complémentaires - Ces 3 fonctions sont désactivées par défaut.
Installer FreeSwitch sur Ubuntu à partir des paquets
01 sept. 2016

L'équipe de FreeSwitch vient de publier les paquets pour Ubuntu 14.04 LTS et 16.04 LTS. Une excellente nouvelle pour les utilisateurs d'Ubuntu. L'installation est maintenant simplifiée. Pour Ubuntu 16.04 LTS, voici les commandes à taper pour installer la dernière version stable de FreeSwitch :

wget -O - https://files.freeswitch.org/repo/ubuntu-1604/freeswitch-unstable/freeswitch_archive_g0.pub | apt-key add -

echo "deb http://files.freeswitch.org/repo/ubuntu-1604/freeswitch-unstable/ xenial main" > /etc/apt/sources.list.d/freeswitch.list

# you may want to populate /etc/freeswitch at this point.
# if /etc/freeswitch does not exist, the standard vanilla configuration is deployed
apt-get update && apt-get install -y freeswitch-all

Pour Ubuntu 14.04 LTS :

wget -O - https://files.freeswitch.org/repo/ubuntu/freeswitch-unstable/freeswitch_archive_g0.pub | apt-key add -

echo "deb http://files.freeswitch.org/repo/ubuntu/freeswitch-unstable/ trusty main" > /etc/apt/sources.list.d/freeswitch.list

# you may want to populate /etc/freeswitch at this point.
# if /etc/freeswitch does not exist, the standard vanilla configuration is deployed
apt-get update && apt-get install -y freeswitch-all

Attention : les paquets permettant de gérer les flux vidéos ne sont pas installés. Des étapes complémentaires sont à prévoir. Toutefois, l'équipe de FreeSwitch ne recommande d'utiliser cette méthode pour un usage en production pour le moment. Sur Ubuntu, seule la méthode en téléchargeant et compilant les sources est recommandée. La documentation de la team FreeSwitch pour installer FreeSwitch sur Ubuntu.

Règles iptables afin de bloquer les scanners SIP
03 août 2016

Les serveurs SIP (Asterisk, FreeSwitch ... mais aussi les serveurs propriétaires) sont constamment scannés par des automates ou des humains avec pour seule idée, découvrir une faille à exploiter. En effet, les enjeux financiers sont importants. Je partage avec vous ce jour, un script iptables pour bloquer les scanners SIP (à adapter notamment les ports si vous utilisez des différents de 5060).

iptables -N SIPDOS

iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “sundayddr” –algo bm –to 65535 -m comment –comment “deny sundayddr” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “sipsak” –algo bm –to 65535 -m comment –comment “deny sipsak” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “sipvicious” –algo bm –to 65535 -m comment –comment “deny sipvicious” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “friendly-scanner” –algo bm –to 65535 -m comment –comment “deny friendly-scanner” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “iWar” –algo bm –to 65535 -m comment –comment “deny iWar” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “sip-scan” –algo bm –to 65535 -m comment –comment “deny sip-scan” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “User-Agent: sipcli” –algo bm –to 65535 -m comment –comment “deny sipcli” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “User-Agent: Nmap NSE” –algo bm –to 65535 -m comment –comment “deny Nmap NSE” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “User-Agent: VaxSIPUserAgent” –algo bm –to 65535 -m comment –comment “deny VaxSIPUserAgent” -j SIPDOS
iptables -A INPUT -i eth0 -p udp -m udp –dport 5060 -m string –string “From: sipp 

Si vous avez des idées pour l'améliorer, toutes les suggestions sont les bienvenues, l'idée étant de faciliter la sécurisation des serveurs SIP au plus grand nombre. Mises à jour :

  • 4 août 2016 : ajoût de règles + correction typo suite au commentaire de Ztur
Dolibarr : email de relance des factures impayées
21 juil. 2016

Dolibarr est un logiciel de gestion open source réputé pour les TPE/PME et associations permettant la gestion de la facturation. Il est aisé grâce à une fonction intégrée facilement appelable via un bouton, d'envoyer une facture à un contact par email.

Dans une ancienne version, un bouton équivalent permettait de relancer les factures en retard de paiement par email, facture par facture. Ce bouton a maintenant disparu !

Nous allons voir comment, sans toucher au code (sauf pour l'ajout d'éléments complémentaires), intégrer simplement une fonction de relance de facture en retard de paiement par email.

Django : mise à jour de yawd-admin compatible avec django 1.9
28 juin 2016

Dans cet article du 27 mai 2016, je vous annonçais la reprise en main Yawd-admin, car il n'a plus été mis à jour par les mainteneurs officiels depuis mai 2014. Yawd-admin est un package django permettant d'adapter l'interface d'administration en ajoutant des fonctionnalités indispensables.

Ansible : installation automatisée de Freeswitch Ubuntu Debian - v1.3
02 févr. 2016

Je viens de publier la mise à jour du role FreeSwitch pour Ansible, le célèbre moteur d'orchestration, la version 1.3. Ce role permet d'installer FreeSwitch de manière automatique à partir des sources sur les systèmes linux basés sur Debian et Ubuntu. Un bug de dépendances touchant Debian Jessie a été corrigé, plus quelques modifications mineures. L'utilisation est simple.

Découvrez l'évènement Voip2day 2015 à Madrid
10 nov. 2015

Je suis dans les starting blocks pour le Voip2day qui se déroule à Madrid ce 11 et 12 novembre 2015.

FreeSwitch : mettre à jour une ancienne installation
21 juil. 2015

Vous devez mettre à jour une ancienne installation de FreeSwitch. La procédure est assez simple.

Xivo et Raspberry PI 2 : l'IPBX idéal pour les petites sociétés ?
17 juil. 2015

Pouvoir utiliser une carte Raspberry PI pour faire un petit IPBX est un projet intéressant : compacité et faible consommation.

Plusieurs manières existent afin d'atteindre cet objectif.

Naturellement, installer un Asterisk ou un FreeSwitch tout frais sur une distribution adaptée à la carte, la Raspbian, est la première idée qui a germée dans mon esprit. L'exercice fut concluant, mais les performances assez limitées, entre 3 et 5 appels simultanés selon la configuration et le système. Un peu juste, et difficilement utilisable en production sans une interface graphique digne de ce nom (sauf pour des projets de niche).

Depuis, la carte Raspberry PI 2 a vu le jour avec des spécifications en hausse ouvrant ainsi d'intéressantes perspectives. Les limitations techniques de la carte étant repoussée, une utilisation en IPBX pour les petites entreprises devient envisageable. Cette carte embarque assez de puissance afin de pouvoir faire tourner Asterisk ou FreeSwitch et un petit serveur web pour la configuration et l'interface utilisateur. N'ayant pas eu beaucoup de temps disponible, ni de carte Raspberry PI 2 sous la main, je n'ai pas encore monté de lab. Mais un intégrateur Nantais, Geoffroy RABOUIN a remonté ses manches et a passé quelques nuits blanches afin d'intégrer Xivo, un célèbre IPBX Open Source basé sur Asterisk offrant une interface web agréable, à une carte Raspberry PI 2.

Au passage, un grand merci à la community manager de Xivo, Valérie DAGRAIN, de m'avoir fait découvrir ce projet. Le nom de ce sympathique projet : simplement Raspivo, Xivo sur Raspberry PI 2.

A l'heure de la rédaction de cet article, Raspivo intègre la dernière version de Xivo, la 15.12. La documentation d'installation est disponible en ligne : installation de Raspivo depuis les dépôts de Iris Networks (société de Geoffroy RABOUIN). Le process est vraiment simple.

Selon le créateur, les performances sont très intéressantes. Il a en effet atteint 12 appels simultanés sans déformation de la voix. Reste à voir les limitations, je pense notamment à certaines fonctionnalités gourmandes en CPU et en I/O. Ce projet mérite une attention toute particulière, de part la qualité de la distribution Xivo (une de mes 2 solutions de téléphonie libre préférées), et d'autre part par les caractéristiques de la carte Raspberry PI 2 : faible consommation, pas de pièces mobiles et taille réduite. Dès que j'ai un peu de temps et une carte sous la main, je testerai Raspivo et je vous ferai un retour détaillé.

Raspivo présente une réelle alternative permettant aux petites sociétés de disposer d'une solution de téléphonie libre low cost, un IBPX asterisk simple et fiable.

Liste des IPBX libres
13 juil. 2015

Le choix d'un IPBX est parfois compliqué : l'offre est importante et complexe. Sur le papier toutes les solutions se valent, proposent toutes les fonctionnalités utiles, sont sécurisées, facilement administrables ... Quand on doit choisir une solution IPBX libre, le choix est plus difficile. La première difficulté est de lister les différentes solutions. Je vais lister pour vous les différentes solutions qui s'offrent à vous, la contrainte étant que la solution doit-être libre et à même de mettre en place un IPBX en entreprise. Pas d'autre contrainte ! Les voici classées par ordre alphabétique :

  • Astlinux
  • Blue.box
  • Elastix
  • FreePBX Distro
  • FusionPBX
  • Incredible PBX
  • PIAF : PBX in a flash
  • Wazo
  • Xivo
  • Yate (avec le module pbxassist)

Il existe d'autres solutions, je n'ai indiqué que les plus utilisées. Le choix n'est pas simple. Vous pouvez commencer par choisir un moteur VoIP (Asterisk, FreeSwitch ou Yate) et regarder l'interface graphique. Des critères peuvent-être éliminatoires comme le support de certains protocoles (comme IAX2 ou H323 par exemple), de montée en charge ... Un IPBX doit être facile à administrer. N'oubliez pas non plus de regarder les évolutions des différents projets.

Malheureusement certains projets prometteurs sont devenus propriétaires comme TrixBox CE qui est devenu Fonality et AskoziaPBX qui a changé de licence. Le mieux est de les tester au sein d'une VM afin de se faire une bonne idée après avoir rédigé un cahier des charges précis.

Je me dois de répondre à la question qui brûle vos lèvres : quelles solutions d'IPBX libres je préfère ? Selon l'usage, je vais préférer soit Astlinux soit Xivo. FusionPBX est intéressant mais est un peu lourd d'usage. L'interface d'administration mériterait un lifting.

Lesquelles avez-vous testé et quel est votre retour d'informations ?

AstLinux 1.2.3 : corrections de sécurité
08 juil. 2015

Quelques jours après la version 1.2.2, l'équipe d'AstLinux sort une nouvelle version corrigeant plusieurs failles de sécurité (35 !) touchant de nombreux paquets. Voici la liste :

  • CVE-2015-3331 : patch linux
    
  • CVE-2014-8964, CVE-2015-2325, CVE-2015-2326 : pcre
    
  • CVE-2014-9680 : sudo
    
  • CVE-2015-1572 : e2fsprogs
    
  • CVE-2014-8128 : tiff
    
  • CVE-2015-0286, CVE-2015-0287, CVE-2015-0289, CVE-2015-0292, CVE-2015-0293, CVE-2015-0209, CVE-2015-0288, CVE-2015-4000, CVE-2015-1788, CVE-2015-1789, CVE-2015-1790, CVE-2015-1792, CVE-2015-1791 : OpenSSL (version 1.0.1o)
    
  • CVE-2015-2059 : prosody
    
  • CVE-2014-9297, CVE-2014-9298, CVE-2015-1798, CVE-2015-1799 : ntpd/sntp
    
  • CVE-2014-2285 : netsnmp
    
  • CVE-2015-1419 : vsftpd
    
  • CVE-2015-3294 : dnsmasq
    
  • CVE-2015-3144, CVE-2015-3145, CVE-2015-3148, CVE-2015-3143, CVE-2015-3153, CVE-2015-3236, CVE-2015-3237 : libcurl
    

Un renforcement de la sécurité a été opéré par la création d'un certificat auto-généré unique. Les versions d'Asterisk ont aussi été mis à jour :

  • Asterisk 1.8.32.3
  • Asterisk 11.18.0
  • Asterisk 13.4.0

Autre nouveauté importante, l'interface graphique d'Asterisk, Digium Asterisk GUI n'est plus inclue dans la solution quelque soit la version d'Asterisk. Je n'ai jamais bien compris l'intérêt de cette interface graphique et de la valeur ajoutée par rapport à l'interface d'AstLinux. Pour rappel, Digium Asterisk GUI est abandonné par l'équipe Asterisk depuis longtemps ! Etant donné l'importance de cette mise à jour, je vous invite à l'appliquer au plus vite sur vos systèmes.

Créer votre serveur Asterisk : dans Linux Pratique été 2015
26 juin 2015

Le nouveau Linux Pratique vient de sortir avec un article intitulé "Créez votre serveur Asterisk".

Hiawatha, serveur web sécurisé, utilise mbed TLS
03 avr. 2015

Lors de la Release 9.12, Hiawatha, un serveur web sécurisé open source, a annoncé utiliser maintenant mbed TLS au lieu de PolarSSL.

En effet, ARM a acquis PolarSSL qui a été renommé mbed TLS. Juste un changement de nom ? (malheureux, car comment perdre de la renommée, mais ce n'est que mon humble avis). En fait non, car des changements sont intervenus au niveau du code ce qui a pour conséquence une perte de compatibilité avec les anciennes versions de PolarSSL. Hiawatha ne supporte plus que les versions de mbeb TLS à partir de la version 1.3.10.

Attention lors de vos mises à jour, même si l'impact doit être nul d'après le mainteneur.

Par ailleurs, les nouvelles versions des paquets debian sont disponibles comme d'habitude grâce à Chris sur le site files.tuxhelp.org. Enfin, si vous recherchez un package pour votre Raspberry PI préférée, c'est par ici : https://files.intermezzo.net/hiawatha_raspi/

Par ailleurs, je suis curieux de connaître le retour d'expérience d'utilisateurs de Hiawatha ainsi que les raisons de leur choix. Postez un message en commentaire !

Installation FreeSwitch sur Ubuntu automatisée
11 mars 2015

L'installation de FreeSwitch à partir des sources n'est pas une tâche bien compliquée. Il suffit de suivre le guide expliquant le processus sur le site de FreeSwitch. Mais cette tâche est longue et si vous installez de manière régulière de serveurs FreeSwitch, cela devient vite répétitif et source d'erreur.

Je vais vous présenter une manière simple et automatique pour installer FreeSwitch sur votre serveur tout neuf Ubuntu 14.04 64 bits LTS. (Cela marche aussi pour Debian 7).

Django : comment changer le mot de passe d'un utilisateur en ligne de commande
26 févr. 2015

Comment changer le mot de passe d'un utilisateur dans un framework Django en ligne de commande ?

FritzBox : fonctionnalités avancées de VoIP / SIP
25 févr. 2015

Certaines FritzBox fournissent un service de standard téléphonique (IPBX). Vous pouvez raccorder une ligne analogique, numérique ou SIP à votre équipement ainsi que des postes SIP, analogique, numérique ou DECT.

Les services fournis permet de répondre aux attentes des TPE sans aucun problème.

Il peut parfois être utile d'accéder aux paramètres avancées non accessibles via l'interface web.

Nous allons voir comment.

FritzBox telnet: comment accéder à la ligne de commande
24 févr. 2015

Même si l'interface web développée par les équipes d'AVM permet de réaliser les tâches d'administration, il est parfois utile d'avoir recours à la ligne de commande.

D'abord, parce que c'est bien ! Surtout, pour ajouter des fonctionnalités complémentaires ou accéder à des paramètres cachés de l'interface web.

Pour cela il faut activer l'accès au serveur telnet. Pour cela, vous devez disposer d'un téléphone connecté à votre FritzBox, et composer le code suivant : #96*7* . Vous aurez un message sur votre téléphone "telnet on" Après avoir réalisé vos modifications, vous pouvez désactiver le telnet avec le code #96*8*.

Vous allez pouvoir découvrir de nouvelles possibilités à votre routeur FriztBox : ajouter un serveur OpenVPN, manager plus finement le Firewall, installer un serveur Asterisk ...

FritzBox : installer les applications AVM sans utiliser le Google Play Store
20 févr. 2015

Les routeurs FritzBox proposent des fonctionnalités incroyables, loin devant les box opérateurs. Les équipements haut de gamme peuvent convenir aux petites entreprises en leur fournissant des services indispensables :

  • sécurité
  • routage
  • téléphonie (PABX)
  • mobilité WiFi et DECT
  • stockage

AVM, le constructeur des FritzBox proposent aussi des applications pour les terminaux fonctionnant sous IOS et Android.

Mais si vous ne souhaitez pas utiliser le play store d'Android, vous pouvez les télécharger directement sur leur ftp :

Hiawatha : le serveur web léger et sécurisé à découvrir
14 févr. 2015

J'étais à la recherche d'un serveur web léger et sécurisé afin de succéder à Cherokee. En effet, ce dernier ne semble plus maintenu. Après de nombreux tests, j'ai retenu Hiawatha.

Edito du 4 février 2015
04 févr. 2015

Ce mercredi serait la journée la plus froide de l'année. Je l'espère de tout coeur, moi qui aime tant la chaleur. Même si la neige nous a épargné pour le moment, le vent glacial nous rappelle froidement que nous sommes bien en hiver.

Je finis mes cours bien avant le printemps, d'ici la fin du mois. Encore 8 heures, et quelques copies à corriger, et je range ma tenue de professeur jusqu'à septembre prochain.

De cette première année à l'EPSI, de bonnes choses à retenir, notamment la qualité des élèves, des sujets intéressants (Cloud, qualité de service et réseau triple play), mais aussi des points à améliorer. Je dois penser à préparer des VM toutes faites afin d'éviter de perdre du temps lors des TP afin de pouvoir aller un peu plus loin.

Et pourquoi pas l'année prochaine ajouter des cours sur la VoIP, et enfin faire bosser des étudiants sur FreeSwitch en plus d'Asterisk.

Je viens de passer de longues heures à optimiser ce blog, mais aussi d'autres sites afin de leur faire gagner de précieux points en rapidité, non seulement pour apporter un confort aux visiteurs, mais aussi pour répondre aux nouvelles obligations du dieu google afin d'améliorer le référencement. J'hésite pour le moment à passer le blog en https car il n'y a pas que des avantages, et la sécurité apportée aux utilisateurs dans notre cas n'est pas flagrante. Je l'ai bien sûr fait sur un autre site où l'échange avec l'internaute impose un niveau de sécurité élevée. Cela fonctionne bien, mais avec une pénalité notamment en charge complémentaire sur le serveur. A voir pour le blog. Il n'y a pas d'urgence.

Mes autres tâches de ce mois-ci vont tourner essentiellement autour de 3 axes : Django (TMA, migration 1.7, python 3), PyFreeBilling (version 1.5) et Ansible (PyFreeBilling, sécurité, supervision).

De quoi m'occuper sainement d'autant plus que je dois aussi mener de front 2 missions de conseils. J'espère trouver assez de temps pour rédiger, voire finir, les articles prévus.

Bonne lecture Mathias

Fibre optique : explications
26 janv. 2015

Dans cet article, je vais vous expliquer les différents types de liaison de fibre optique, les avantages et inconvénients de chacune.

django-simple-invoice : application des gestion de facture pour django
23 janv. 2015

Je souhaite vous faire découvrir une application pour le framework Python Django afin de gérer les factures. Il permet de créer, modifier et envoyer des factures en utilisant une table de contacts/entreprises que vous avez définie.

Ansible : Freeswitch role : nouvelle version - v1.1
23 janv. 2015

Je viens de publier la mise à jour du role FreeSwitch pour Ansible, le célèbre moteur d'orchestration. Ce role permet d'installer FreeSwitch à partir des sources sur les systèmes linux basés sur Debian/Ubuntu. J'ai ajouté la gestion des variables, vous permettant d'utiliser une configuration collant au mieux de vos besoins.

Howto : comment configurer monit pour surveiller FreeSwitch
16 janv. 2015

Il est essentiel de surveiller les services que nous déployons au sein de nos entreprises ou pour nos clients.

Je vais vous présenter aujourd'hui comment superviser FreeSwitch avec Monit. Monit est un outil léger open source (licence AGPL) permettant de superviser et de gérer les systèmes Unix. Il est capable d'exécuter des actions en cas de détection de défaillance. Monit est disponible sous forme de paquet dans la plupart des distributions. L'installation sur un système basé sur Debian est très simple :

Hérédité de la licence GPL
16 janv. 2015

Elle crée un pot commun auquel chacun peut ajouter quelque chose mais duquel personne ne peut rien retirer.

Eben Moglen A lire absolument :

L'anarchisme triomphant: Le logiciel libre et la mort du copyright

Ansible : freeswitch role - installation et compilation automatique
15 janv. 2015

Je viens de publier mon nouveau role pour Ansible, le célèbre moteur d'orchestration. Ce role permet d'installer FreeSwitch à partir des sources sur les systèmes linux basés sur Debian/Ubuntu.

Il fait pour vous les tâches longues : installation des dépendances, téléchargement des sources, configuration et compilation, installation de FreeSwitch, sécurisation de l'installation (user et droits) et paramétrage du script de démarrage.

Technologie propriétaire = gaspillage
14 janv. 2015

Une technologie propriétaire est un gaspillage financier Beaucoup d’institutions se sont retrouvées enfermées des dizaines d’années dans des technologies propriétaires par inattention. Dépassé un certain stade, ce choix originel devient tellement enraciné que les alternatives sont systématiquement ignorées, quels que soient leurs bénéfices potentiels. C’est un gaspillage de l’argent public que beaucoup d’organismes publics ne peuvent plus se permettre.

Neelie Kroes, commissaire européenne chargée de la société numérique, discours à l'Openforum Europe, 10 juin 2010

Edito du premier janvier 2015
01 janv. 2015

Voici le traditionnel moment où l'on doit prendre quelques minutes afin de regarder l'année qui vient de passer, faire un point sur les bonnes et moins bonnes choses.

L'année fut très chargée en différents projets, motivants mais parfois épuisants. Je passe sous silence la remise en état de mon bureau (épuisant, énervant, surtout quand on fait appel à une entreprise gérée par des bras cassés et qui visiblement, est composée exclusivement par des personnes au QI de mollusque).

J'ai participé en tant que conseil et chef de projet à la migration de plusieurs infrastructures télécoms de grandes entreprises, réalisé des missions d'expertises techniques et participé au lancement d'un opérateur télécom. Des missions enrichissantes à la fois techniquement, mais surtout par les différents contacts, les rencontres avec des personnes de différents pays et culture.

PyFreeBilling, une application de softswitch VoIP réalisant routage, mediation et facturation basée sur FreeSwitch, a occupé de nombreuses journées et nuits de cette année. Mais quelle satisfaction de le voir utiliser en production avec succès ! et quel bonheur d'évoluer dans un milieu international loin de nos petites frontières hexagonales !

Le gros fail de cette année vient de mon humble avis d'Apple. Où est passé cette culture de la qualité, d'un matériel irréprochable parfaitement intégré avec le logiciel ? où est passé la robustesse d'OSX, sa fiabilité et sécurité ? pourquoi avoir oublié son histoire BSD ? Yosemite est-il une réussite ? perte de stabilité, réactivité plus faible, sécurité de moins en moins assurée et un comble autonomie en baisse ! Un point qui force des aficionados à migrer sous une autre plateforme, Microsoft Surface 3 pour certains, ou linux pour les autres. Quand on voit la qualité des dernières moutures de Fedora, Linux Mint, ElementaryOS ou même Ubuntu (j'en oublie de nombreuses autres), la tentation de quitter définitivement l'environnement d'Apple se fait de plus en plus forte (surtout quand on travaille quotidiennement sur Linux ou BSD !).

Le succès de cette fin d'année serait pour moi la campagne de Crowdfunding de la tablette de Jolla, ces anciens de Nokia ne voulant pas voir enterrer définitivement le système d'exploitation MeeGo !. Une tablette respectueuse des utilisateurs, acceptant des applications natives mais aussi Android qui j'espère aura un beau succès. Peut-être qu'un jour, Nokia et Jolla fusionneront pour redevenir le leader de la téléphonie mobile !

Après cette belle année, marquée par une grave blessure au genou signifiant la fin de ma carrière de joueur de Hand, mais ouvrant un début de carrière d'entraineur (accompagnateur, je débute) pour les jeunes, j'espère avoir plus de temps pour pouvoir pratiquer mes sports passions, le surf, le paddle et le kitesurf.

Je vous souhaite une excellente année à tous qui sera je l'espère une année d'amour et de paix !

SIP : comment débugger ?
21 déc. 2014

Introduction

Votre nouveau serveur VoIP est en place. Mais pour une raison que vous ignorez vos appels ne fonctionnent pas comme prévus. Pas de panique, je vais vous présenter quelques outils en ligne de commande qui vont vous aider à déterminer la source du problème. En effet, le protocole SIP n'est pas toujours aussi simple à l'usage que dans la théorie. Les informations fournies par les systèmes de téléphonie Open Source (Asterisk, Freeswitch, Yate ...) ou propriétaires ne sont pas toujours d'une grande aide (manque de lisibilité, de souplesse ...). Pourquoi des outils en ligne de commande : l'installation est simple et très rapide, fonctionnent sur toutes les distributions linux, et l'information souhaitée est facilement et rapidement accessible. Il est tout à fait possible d'utiliser ces outils afin de sauvegarder les informations collectées dans un fichier afin de réaliser des analyses plus fines avec des logiciels intégrant une interface graphique, comme le renommé Wireshark.

Pré requis

Vous vous êtes assuré de la bonne configuration de vos comptes SIP (du moins sur le papier), que le routage (diaplan) est correctement fait et que les appels sont possibles (droits d'accès à la route bien affectés, balance financière positive ...). Si pour vous, vous ne voyez pas de loup à cette étape, nous allons entrer dans le dur.

Procédure

Je vais maintenant vous expliquer comment trouver de manière efficace la source du problème. Nous allons du plus général vers le plus détaillé. Tout d'abord, vérifier que les échanges de messages SIP se passent comme prévus (je ne vais pas les rappeler ici, je vous laisse ressortir vos cours. J'écrirais peut-être un de ces jours un article les détaillants) : enregistrement, établissement d'un appel, raccroché de l'appel. Si une des étapes est manquantes, il va falloir trouver des informations détaillées. Nous allons voir ces étapes dans le paragraphe suivant.

Comment tracer les messages SIP

Nous allons dans un premier temps vérifier que les messages SIP échanger sont conforment. Nous n'avons pas besoin de tout le détail, juste du type de message SIP (100, 180, 407, 404 ...). On va ainsi pouvoir voir très simplement à quelle étape le problème se pose. Le serveur distant souhaite que le compte soit enregistrer avant d'autoriser un appel (merde, on m'avait dit que c'était une authentification par IP ?), le serveur distant vous répond par un bon 404 ? ... Pour cela, je vais utiliser tshark, outil renommé de tout bon administrateur linux. Il utilise la librairie pcap pour capturer le traffic de l'interface déclarée (avec l'option -i) et affiche (ou enregistre dans un fichier avec l'option -w) les informations décodées de paquets capturés. Les fichiers de capture créés peuvent être lus par Wireshark. Nous allons utiliser toute la puissance de filtrage de tshark afin de trouver l'information souhaitée. Par exemple, il faut vérifier que l'invite correspond bien au format attendu.

tshark -i eth0 -R "ip.addr==78.x.y.10 and sip.CSeq.method eq INVITE" (-V)

Si vous souhaitez capturer l'ensemble du traffic SIP d'une adresse ip spécifique et d'un port spécifique :

tshark -i eth0 -R "ip.addr==78.x.y.10 and port==5060" -z sip,stat

Un autre outil fort utile peut être utilisé, j'ai nommé tcpdump. tcpdump est un analyseur de paquet. Il utilise libpcap, une librairie C/C++ afin de capturer les paquets. Vous devez avoir les droits de super utilisateur afin de pouvoir l'utiliser. Nous allons voir le détail de la commande à utiliser : -i eth0 -- le nom de l'interface à écouter -n -- afin de ne pas résoudre les hostnames host 1.2.3.4 -- filtre le traffic sur cette adresse IP (peut être remplacé par net pour capturer un réseau ex : net 1.2.3.0/24) proto udp -- en général on utilise de l'udp -w /tmp/file.pcap -- pour enregistrer la capture dans un fichier. Mais comme on souhaite avoir le retour en console, on ne vas pas ajouter cette option. Vous trouverez le détail des options de la commande de tcpdump sur cette page.

Conclusion

Nous venons de voir de manière simple comment débugger un chance SIP entre 2 machines. Vous pouvez utiliser la capture afin de l'importer dans un GUI comme Wireshark afin de réaliser des recherches plus poussées, afficher une vue graphique des échanges ou générer des statistiques. Il est aussi possible d'utiliser d'autres outils comme ngrep. Je vous présenterai dans un prochain article l'outil HOMER.

Text to speech : comment utiliser festival, eSpeak et GoogleTTS avec asterisk, solution de téléphonie open source
02 déc. 2014

Introduction

Il est souvent indispensable de diffuser des messages spécifiques aux appelants, des messages pouvant changer selon le contexte de l'appel (numéro appelé, numéro de compte saisi ...). Il est difficile de prévoir tous les cas et d'enregistrer en studio à l'avance toutes les éventualités sans même parler du coût. Je vous propose d'utiliser un service de google permettant de générer un signal audio à partir d'un texte. Nous allons voir dans cet article 3 moyens différents de réaliser de la synthèse vocale pour notre serveur asterisk. Note : toutes les commandes sont pour une machine fonctionnant sous debian/ubuntu, mais vous pouvez simplement les transposer pour un autre système d'exploitation linux.

Qu'est-ce que le text to speech ?

Text to speech ou TTS pour les intimes, est une technique informatique permettant de transformer un texte écrit en parole artificielle, autrement dit, c'est de la synthèse vocale. Je vous renvoie sur wikipedia afin de découvrir l'histoire et les techniques de la synthèse vocale. Il existe plusieurs solutions libres de synthèse vocale : Festival et eSpeak sont les 2 les plus connues fonctionnant sous linux. Nous allons voir l'installation et l'usage sous asterisk. Une autre solution non libre, mais gratuite et qui à l'avantage de la simplicité : GoogleTTS. GoogleTTS est un service en ligne de Google (ah bon ?) réalisant de la synthèse vocale et qui est de plus, de bonne qualité.

Solution de synthèse vocale Festival

Installation

L'installation est très simple, le paquet étant disponible dans les repos de Debian et Ubuntu mais aussi de Centos.

apt-get install festival speech-tools

Ensuite, vous devez modifier le fichier festival.scm afin de permettre à asterisk de se connecter au serveur festival. Le fichier est situé dans le répertoire /usr/share/festival/

(define (tts_textasterisk string mode)
"(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for
use in server mode so a single function call may synthesize the string.
This function name may be added to the server safe functions."
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))

Ensuite, il faut démarrer le serveur festival avec la commande suivante :

festival --server 2>&1 > /dev/null &

Bine entendu, il est souhaitable de l'ajouter au fichier /etc/rc.local afin que le serveur festival soit lancé au démarrage de la machine. Maintenant, nous devons paramétrer asterisk afin de lui indiquer où joindre notre serveur festival. Pour cela il faut modifier le fichier /etc/asterisk/festival.conf comme ci-dessous :

[general]
host=localhost
port=1314
;usecache=yes
;cachedir=/var/lib/asterisk/festivalcache/
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n

Maintenant, nous allons vérifier que le module est bien chargé par asterisk en entrant cette commande en cli :

CLI> core show application festival

  -= Info about application 'Festival' =-

[Synopsis]
Say text to the user.

[Description]
Connect to Festival, send the argument, get back the waveform, play it to
the user, allowing any given interrupt keys to immediately terminate and return
the value, or 'any' to allow any number back (useful in dialplan).

[Syntax]
Festival(text[,intkeys])

[Arguments]
Not available

[See Also]
Not available

Si vous obtenez une sortie comme celle-ci , c'est parfait, sinon chargez le module manuellement :

CLI> module load app_festival.so

Utilisation

Nous allons maintenant le tester en modifiant le fichier /etc/asterisk/extensions.conf :

;Festival demo
exten => s, 1, Answer()
exten => s, n, Festival('Welcome! Your phone number is ${CALLERID(num)}.')
exten => s, n, Hangup()

Le résultat est acceptable sans être exceptionnel. Je ne vous ai pas présenté l'installation de la langue française, car la qualité n'est pas suffisante en regard des autres solutions que je vais présenter dans la suite de ce post. Mais comme festival est une solution open source nativement intégrée avec asterisk, il me semblait important de vous en parler.

Solution de synthèse vocale eSpeak

Installation

Tout d'abord, il faut installer les fichiers de développement d'asterisk. Ensuite, il est d'installer eSpeak. Pour nous simplifier la vie, nous allons utiliser les paquets, mais pour un serveur de production je vous encourage à installer eSpeak via les sources.

apt-get install espeak
apt-get install asterisk-espeak

L'installation via les paquets est maintenant terminée.

Utilisation

Nous allons voir l'utilisation de eSpeak au sein du dialplan asterisk. La commande à utiliser est Espeak et est assez simple à utiliser. Voici la syntaxe :

Espeak(text[,intkeys,language])

Le texte est entre guillemets, intkey peut prendre 2 valeurs, soit any, soit une des touches du téléphones et language la langue souhaitée. Voici un exemple :

;eSpeak Demo

exten => 1234,1,Answer()

;;Play mesage using default language as set in espeak.conf

exten => 1234,n,Espeak("This is a simple espeak test in english.",any)

;;Play message in Spanish

exten => 1234,n,Espeak("Esta es una simple prueba espeak en español.",any,es)

;;Play message in Greek

exten => 1234,n,Espeak("Αυτό είναι ένα απλό τέστ του espeak στα ελληνικά.",any,el)

;;Read a text file from disk (relative to the channel language)

;;and play it with espeak using the asterisk channel language.

exten => 1234,n,ReadFile(MYTEXT=/path/${LANGUAGE}/myfile,200)

exten => 1234,n,Espeak("${MYTEXY}",any,${LANGUAGE})

exten => 1234,n,Hangup()

Le logiciel est sous licence GPL, vous êtes donc libre de l'utiliser et bien entendu de l'améliorer.

Solution de synthèse vocale GoogleTTS

Installation

Afin d'utiliser GoogleTTS sur notre serveur asterisk, il est nécessaire que notre serveur ait un accès à internet (le script doit faire appel aux serveurs de Google) mais il nécessite aussi l'installation des paquets suivants :

apt-get install perl libwww-perl sox mpg123

Ensuite, nous allons utiliser un script AGI développer par Zaf, asterisk-googletts. Le script est développé en PERL. Premièrement, localisez l'emplacement du dossier agi-bin afin d'y installer le script. Pour cela, vérifiez la variable astagidir dans le fichier asterisk.conf . Ensuite téléchargez le fichier googletts.agi dans ce répertoire :

wget https://raw.github.com/zaf/asterisk-googletts/master/googletts.agi
chmod +x googletts.agi

Maintenant, vous avez terminé l'installation !.

Utilisation

L'utilisation est extrêmement simple. Il suffit de faire un appel agi afin d'utiliser la synthèse vocale. Voici un exemple simple :

;DEMO GoogleTTS
exten => S,1,Answer()
exten => s,n,agi(googletts.agi,"Asterisk vous parle enfin.",fr)
exten => s,n,Hangup()

Un peu d'explication : googgletts.agi accepte plusieurs variables (4) que nous allons détailler :

  • La première contient le texte. L'exemple est parlant !
  • La seconde contient la langue qui doit être utilisée (par défaut en-US). La liste est très longue.
  • Les autres variables sont optionnelles :
    • 3ème variable : elle peut prendre soit la valeur "any" ou n'importe quel chiffre ou # ou * . Quand un de ces éléments est saisi par l'appelant sur son clavier téléphonique, la lecture du texte est arrêtée.
    • 4ème variable correspond à la vitesse de lecture (par défaut la valeur vaut 1). Vous pouvez accélérer la lecture en utilisant par exemple cette valeur 1.2 .

L'utilisation est assez simple et le résultat est convaincant. La communication avec les serveurs de Google se fait en clair, mais il est possible d'utiliser une connexion cryptée (pour cela, il faut modifier le script PERL.

Conclusion

Nous avons vu 3 solutions différentes afin de réaliser de la synthèse vocale sous asterisk. Sachez qu'il en existe d'autres gratuites ou payantes de différente qualité. A part festival dont la qualité me semble juste, eSpeak et GoogleTTS apporte une qualité suffisante pour la plus part des installations. Quelle solution utilisez-vous ?

FreeSWITCH : problème avec git merge error
04 nov. 2014

Vous rencontrez une erreur "merge error" lorsque vous souhaitez faire un pull sur la branche 1.4 de FreeSWITCH.

Pas de panique, l'équipe de développement FreeSWITCH a réalisée quelques modifications. Pour corriger cette erreur impactant votre repo local, il vous suffit d'entrer cette commande :

git reset --hard origin/v1.4

Vous pouvez installer maintenant la dernière version stable 1.4.

Freeswitch : sortie de la version stable 1.4 (la 1.4.4 pour être précis)
26 mai 2014

L'équipe de Freeswitch vient de libérer la première version stable de la branche 1.4, la 1.4.4, les autres étant des versions beta. Les nouveautés sont nombreuses, les principales étant :

  • WebRTC
  • Séparation de la stack RTP du SIP
  • Suppression de nombreuses librairies tierces
  • Support des nouvelles versions de librairies comme SQLite, OpenSSL ...
  • Optimisation du code apportant une plus grande stabilité et fiabilité.

La branche 1.2 va être déclarée en fin de vie. Aussi, je vous invite à tester vos applications avec la branche 1.4 dès maintenant et de planifier les migrations. Pour ma part, PyFreeBilling est compatible avec la branche 1.4 depuis quelques mois déjà, donc ceux qui veulent migrer leur version de FreeSwitch peuvent le faire sans arrière pensée.

[MOOC] Introduction aux réseaux mobiles par Mines Télécoms
23 avr. 2014

[toc]

Introduction

Tout le monde connait maintenant les MOOCs (Massive Open Online Courses). C'est un excellent moyen de pouvoir acquérir de chez soi, ou de son entreprise, le soir ou le WE (pour ceux qui travaillent) de nouvelles connaissances. Je viens de finir le MOOC "Introduction aux réseaux mobiles" dispensé sur la plateforme FUN (France Université Numérique) par Mines Télécoms. L'Institut Mines-Télécom, pour ceux qui l'ignore, est un acteur majeur public de l’enseignement supérieur, de la recherche et de l'innovation dans les domaines de l'ingénierie et du management. 8 semaines de formation intense, avec chaque semaine un devoir à rendre.

Objectifs du MOOC

Voici le teasing officiel :

"Vous connaissez GSM, 3G ou LTE ? Venez découvrir ce qui se cache derrière ces sigles et comprendre comment fonctionnent ces réseaux qui vous permettent d'accéder à l'Internet et de communiquer, que vous soyez en ville ou à la campagne. Les objectifs de ce cours sont les suivants : connaître les principes généraux communs aux réseaux cellulaires comprendre l'architecture des réseaux cellulaires et ses composantes principales : le réseau d’accès et le réseau-cœur : illustration avec GSM et LTE assimiler les principes de l'interface radio des réseaux cellulaires connaître quelques procédures radio de base connaître les évolutions prévues des réseaux LTE Format : ce cours intègre des vidéos et des quizz sur 8 semaines. Le volume horaire a consacrer à ce cours avoisine les 40h." Mon objectif était de mieux connaître le fonctionnement des réseaux mobiles, notamment ceux de la quatrième génération.

Plan du MOOC

Semaine 1

en ligne à partir du 18 février

  • Introduction
  • Architectures de réseaux cellulaires (Partie 1/2)
  • Architectures de réseaux cellulaires (Partie 2/2)
  • Services et régulation
  • Devoir Semaine 1

Semaine 2

en ligne à partir du 25 février

  • Le réseau téléphonique et ses évolutions
  • Sécurité (Partie 1/2)
  • Sécurité (Partie 2/2)
  • Devoir Semaine 2

Semaine 3

en ligne à partir du 4 mars

  • Gestion de la mobilité
  • Établissement d'un appel
  • Intégration des réseaux intégrés paquets (facultatif)
  • Devoir Semaine 3

Semaine 4

en ligne à partir du 11 mars

  • Introduction seconde partie
  • Propagation
  • Fondamentaux de communication numérique
  • Devoir Semaine 4

Semaine 5

en ligne à partir du 18 mars

  • Réseau cellulaire régulier
  • Analyse d'un réseau cellulaire
  • Etude d'un modèle théorique plus fin
  • Devoir Semaine 5

Semaine 6

en ligne à partir du 25 mars

  • Interface radio : Multiplexage
  • Devoir Semaine 6

Semaine 7

en ligne à partir du 1er avril

  • Transmission sur l'interface radio
  • Devoir Semaine 7

Semaine 8

en ligne à partir du 8 avril

  • Canaux de contrôle Handover
  • Examen final

Mines Télécoms MOOCRemerciements

Je tiens tout particulièrement à remercier Xavier Lagrange et toute l'équipe pédagogique du département « Réseau, Sécurité et Multimédia » de Télécom Bretagne pour la qualité des enseignements et de l'immense travail fourni.

Conclusion

Il existe maintenant nombre de MOOCs d'excellente qualité et ceux présents sur la plateforme FUN (France Université Numérique) en font partie. Si on souhaite réellement acquérir les notions exposées dans les formations, il est nécessaire de réaliser des travaux personnels, soit de synthèse, soit de recherche (Les devoirs de ce MOOC vous imposent de réaliser quelques travaux personnels sous peine d'obtenir une note très très moyenne).

Suite à cette formation, je ne suis pas expert en réseau mobile (mais la formation donne envie d'aller plus loin - pourquoi pas un cours spécifique LTE), mais l'objectif est bien atteint. Je comprends maintenant le fonctionnement d'un réseau mobile, les différences techniques entre les générations de réseaux mobiles et les contraintes d'architecture d'un réseau sans fil. Je suis heureux d'avoir validé cette formation d'excellente qualité, le temps passé m'ayant permis d'acquérir de nouvelles compétences. (J'attends mon certificat avec impatience ;-) , toute labeur méritant récompense ) Pour ceux qui sont intéressés, une nouvelle session est prévue en septembre 2014.

Asterisk : Comment configurer odbc pour stocker les cdr dans mysql
03 avr. 2014

Tuto pour l'installation d'odbc avec Asterisk pour stocker les CDR dans MySQL.

ADSL ou SDSL que choisir ?
24 mars 2014

De manière récurrente, les clients se demandent quel est la différence entre un lien ADSL et un lien SDSL (en dehors de la première lettre, bien entendu ! ;-) ). Je vais essayer de répondre à cette question de manière aussi complète que possible.

Google analytics viré : done
11 févr. 2014

Dans la démarche de protéger mes pauvres visiteurs du traçage par les outils tiers, je viens enfin de virer google analytics. Je vais aussi auditer plus en détail mon thème pour m'assurer que d'autres bouts de codes ne participe pas au traçage. Il ne reste normalement que mon piwik (www.celea-consulting.fr c'est ma boite :-) ), mais je vais aussi modifier cela par la suite. Je veux juste connaître les visites de manière anonyme, ainsi que les pages vues. Le reste, je m'en fous.

Si vous avez des avis ou des commentaires, je vous en remercie par avance.

Avançons ensemble, pour un monde plus libre !

Comment supprimer les doublons avec Libre Office
10 févr. 2014

La gestion des doublons (détection ou suppression) dans un tableur n'est pas très compliqué, il suffit juste de savoir comment le faire.

Debian - ubuntu : script pour nettoyer les vieux noyaux
23 janv. 2014

Voici un script assez simple permettant en une ligne de commande de supprimer ses anciens noyaux et de ne garger que le dernier.

IPBX : sortie de Astlinux 1.14, plateforme de communication sécurisée embarquée
23 janv. 2014

Cette nuit, une nouvelle version de Astlinux vient de sortir. Astlinux est une distribution intégrant Asterisk, et l'ensemble des outils nécessaires afin de gérer votre PABX. Il est plutôt destiné aux petites entreprises du fait de son interface simple. Mais un administrateur connaissant asterisk ne sera nullement bridé et pourra pousser asterisk dans ses retranchements.

Sécurité : une backdoor découverte sur les routeurs Cisco, Linksys et Netgear
09 janv. 2014

Il a été découvert récemment une backdoor écoutant sur le port TCP/32764 sur certains routeurs des marques Cisco, Linksys et Netgear. Cette backdoor permet de faire un reset du routeur ou de prendre le contrôle complet de ce dernier. Un petit lien vers le repo github de la personne ayant mis à jour cette backdoor : https://github.com/elvanderb/TCP-32764 Comment sécuriser son routeur afin de ne plus être vulnérable? Le plus simple, est de changer le firmware par un firmware opensource comme OpenWRT. La liste des routeurs vulnérables (liste non exhaustive malheureusement) - source elvanderb :

Avec les récentes histoires de backdoor présentent dans un certains nombre d'équipements, les solutions opensource deviennent une des solutions les plus sures, le code restant auditable. Profitez en pour regarder Pfsense ou Zeroshell. A vos Soekris !

Bilan de l'année 2013
31 déc. 2013

C'est le dernier jour de l'année, l'heure terrible du bilan.

PyFreeBilling : présentation du softswitch basé sur Freeswitch dédié au wholesale
15 nov. 2013

PyFreeBilling est une solution Open Source de billing et de softswitch dédiée à une activité d'opérateur wholesale VoIP. Cette solution est basée sur Freeswitch, postgresql et python. Ces fonctionnalités sont complètes. PyFreeBilling a été développé avec un objectif de montée en charge (il est actuellement utilisé notament pour terminer les appels des call centers).

Introduction

Il est extrêmement difficile de trouver des solutions Open Source permettant de monter une infrastructure permettant de vendre des communications VoIP, de gérer la facturation (billing) avec une contrainte de montée en charge importante. beaucoup de petits opérateurs utilisent a2billing, mais malgré la qualité du projet, son utilisation est différente : il a été développé pour gérer les cartes d'appels (calling cards).

Explication des choix techniques

Je souhaitais utiliser Freeswitch comme switch VoIP pour ces nombreuses qualités :

  • performance et stabilité assurant une bonne montée en charge
  • performance de la stack SIP (stack Sofia développée par Nokia)
  • utilisation du langage LUA pour les scripts
  • applications performantes
  • fonctions de débuggage évoluées

Ensuite, naturellement la base de données choisie a été PostgreSQL. Je ne vais pas faire un article complet sur ce choix, mais il est important. PostgreSQL est un moteur de base de données performant et fiable, deux qualités indispensables pour cette application. Enfin, la gestion doit s'effectuer via une interface web, et pour cela le langage python a été choisi : performance, lisibilité ... et puis j'aime bien ce langage (c'est important, non ?). Bien entendu, le choix d'un framework comme Django c'est imposé, car il apporte un ensemble de fonctionnalités indispensables (cadre de développement, ORM, sécurité, applications ...).

Fonctionnalités

PyFreeBilling intégre un ensemble de fonctionnalités nécessaires à une activité de vente de minutes VoIP :

  • Customer add/modify/delete
  • IP termination
  • SIP authentication
  • Prepaid and/or postpaid
  • Realtime billing
  • Block calls on negative balance (prepaid) or balance under credit limit (postpaid)
  • Block / allow negative margin calls
  • Email alerts
  • Daily balance email to customer
  • Limit the maximum number of calls per customer and/or per gateway
  • Multiple contexts
  • Tons of media handling options
  • Powerfull ratecard engine
  • Provider add/modify/delete
  • Powerful LCR engine
  • Routing based on area code
  • Routing decision based on quality, reliability, cost or load balancing (equal)
  • Limit max channels by each provider gateway
  • Extensive call and financial reporting screens (TBD)
  • CDR export to CSV
  • Design for scalability

Interface web

Toute la gestion s'effectue via l'interface web. D'autres copies d'écran sont disponibles sur le repo, n'hésitez pas à y aller. Elles ont été créées par ordre de programmation :

  • ajoût d'un client
  • ajoût d'un compte SIP client
  • création d'une grille tarifaire et d'un tarif
  • affectation d'une grille tarifaire à un compte client
  • ajoût d'argent à la balance d'un client
  • création d'une grille tarifaire fournisseur et d'un tarif
  • création d'une LCR (définition du routage d'un appel - très important, c'est le lien entre une grille de vente client et une grille d'achat fournisseur)
  • création d'une gateway fournisseur

Documentation

La documentation est disponible sur readthedocs. La doc utilisateur sera enrichie au fil de l'eau, il me reste encore un peu de travail de rédaction.

Où est le code

Le code est hébergé sur Bitbucket.

Support

Vous pouvez ouvrir vos demandes de support (bug, amélioration, remarque constructive ...) sur bitbucket, qui fournit un bel outil de gestion des "issues".

Et maintenant ?

Je vais bientôt sortir la v1.2. Pour cela, je finis les tests sur un script de déploiement afin de simplifier cette tâche ainsi qu'une intégration dans l'interface web de quelques commandes cli de Freeswitch pour les allegriques de la ligne de commande. J'ai plein d'idées pour la V2, comme l'intégration de la gestion multi devises, d'émission des factures, de gestion des abonnements et de gestion des appels entrants (DID ou SDA). N'hésitez pas à commenter, émettre des suggestions, j'attache beaucoup d'importante aux retours.

Howto compile cdr_pg_csv freeswitch module on debian / ubuntu
18 avr. 2013

With the standard Makefile configuration delivered form git, you can't compile cdr_pg_csv. You need top edit theMakefile file of cdr_pg_csv module. The file si located here : src/mod/event_handlers/mod_cdr_pg_csv/Makefile . Copy and past the following code :

UNAME := $(shell uname -s)
ifeq ($(UNAME),SunOS)
ISA64 := $(shell isainfo -n)
LOCAL_CFLAGS=-I/usr/include/postgresql
ifneq (,$(findstring m64,$(CFLAGS)))
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib/$(ISA64) -R/usr/pgsql-9.1/lib/$(ISA64) -lpq -static
else
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -R/usr/pgsql-9.1/lib -lpq -static
endif
else
LOCAL_CFLAGS=-I/usr/include/postgresql
LOCAL_LDFLAGS=-L/usr/pgsql-9.1/lib -lpq -static
endif
include ../../../../build/modmake.rules

Now, we are ready for make, so do :

make & make install

It's done.

Install freeswitch compiled with odbc PostgreSQL on debian wheezy
18 avr. 2013

This is my first howto in english. As I will release in some days, my project name pyfreebilling (wholesale voip platefom based on Freeswitch, PostgeSQL and Django), i write the first installation step : howto compile and install freeswitch / odbc and postgresql on debian wheezy.

Edito sécurité : attaques des systèmes téléphoniques (voip ou traditionnel)
04 avr. 2013

Les attaques informatiques se multiplient chaque jour. Mais certaines attaques ne font pas les gros titres des journaux, mais par contre coûtent cher. Ces attaques ont pour but de détourner le système téléphonique (PABX ou IPBX) de l'entreprise afin d'émettre des appels frauduleux vers des pays où les communications sont onéreuses. Cette activité est très lucrative. Certains opérateurs ont eux même eu la désagréable surprise un matin, de découvrir un volume d'appels très important anormal vers des destinations exotiques. Il faut avoir en tête qu'une grande partie de ces attaques sont basées sur des failles connues. Ces mêmes attaques ne sont pas très complexes à mettre en oeuvre et ne prennent que peu de temps. Une autre partie des attaques se base sur la négligence des administrateurs des systèmes téléphoniques.

Donc oui, les attaques sur les systèmes de téléphonie sont en effet de plus en plus courant. 01net y a consacré un article le 15 mars dernier, que vous pouvez relire ICI .

Asterisk : comment lire un numéro de téléphone à l'appelant
15 mars 2013

Nous allons voir comment asterisk peut annoncer un numéro de téléphone à l'appelant. En France, on ne lit un numéro de téléphone en annonçant chaque nombre le composant, mais par groupe de 2 ( 014012... est lu zero un, quarante, douze ... et non zero, un, quatre, zero, un , deux ...). Pour cela nous allons utiliser l'application app_playpack.so.

Comment convertir un fichier audio pour son PABX asterisk ou Alcatel ?
11 mars 2013

La pluspart des PABX ou autocommutateurs n'acceptent pas n'importe quel format pour la musique d'attente, les messages d'accueils téléphoniques ou de répondeurs. Vous pouvez très facilement mixer votre musique avec votre belle voix avec des outils opensource comme Audacity . Par contre, afin que vous puissiez importer votre message et le faire fonctionner, il devra répondre à certains standards : format wav, codage 8bits, taux d'échantillonage 8kHz et encodage ulaw (ou alaw).

Configurer correctement les appels anonymes avec un asterisk
26 févr. 2013

Pour certaines raisons, vous souhaitez émettre des appels sans présenter votre numéro à partir de votre serveur asterisk.

Configuration de fail2ban selon les différentes versions d'asterisk
26 févr. 2013

Fail2ban est un outil indispensable à installer sur ses serveurs asterisk. Il permet de bloquer de manière proactive les tentatives de scan et ainsi de protéger vos deniers.

Mais selon la version d'asterisk, le filtre doit être configurer de manière différente.

Sauvegarder automatiquement ses bases de données MySQL
19 févr. 2013

Je ne vais pas rappeler le caractère indispensable des sauvegardes. Les bases de données ne doivent surtout pas être oubliées. Nous allons voir comment gérer de manière automatique les sauvegardes et garder un historique (c'est toujours utile, surtout en cas de corruption)

Pour cela, nous allons faire appel à AutoMySQLBackup .

Présentation :

AutoMySQLBackup permet de faire une sauvegarde via une tâche cron, chaque jour, chaque semaine et chaque mois. Il offre la possibilité de sauvegarder une ou plusieurs bases de données, d'exclure des tables (très utile quand vous avez des tables très volumineuses, mais que vous ne voulez garder que la conf. Par exemple, certaines tables de log).

Ce script peut vous envoyer un email de notification. Cet email pouvant contenir le fichier de backup en pièce attachée. Bien entendu, les sauvegardes sont compressées et peuvent être cryptées.

Il est possible de garder plusieurs sauvegardes, par exemple, les 5 dernières sauvegardes journalières, les 3 dernières sauvegardes hebdomadaires ou les 12 dernières sauvegardes mensuelles (pratique pour respecter certaines obligations d'archivage).

Enfin, et cette fonctionnalité n'est pas des moindres pour les grosses bases, il est possible d'effectuer des sauvegardes incrémentales.

Installation :

Il suffit de télécharger le dossier zippé sur sourceforge , d'effectuer une extraction. Je vous conseille bien entendu de lire le fichier README, puis lancer le script :

install.sh

Configuration :

La configuration s'effectue dans un seul fichier,

vi /etc/automysqlbackup/myserver.conf

Le contenu de ce fichier est bien commenté. Il suffit de compléter et de décommenter les bonnes lignes. Voici une extraction de la version originale sans les commentaires :

CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
CONFIG_backup_dir='/var/backup/db'
CONFIG_do_monthly="01" ; le jour du backup mensuel, ini le 1er du mois
CONFIG_do_weekly="5" ; le jour du backup hebdo, ici le vendredi
CONFIG_rotation_daily=6
CONFIG_rotation_weekly=35 ; on garde les 5 dernières semaines de backup
CONFIG_rotation_monthly=150 ; on garde les 5 derniers mois
CONFIG_mysql_dump_usessl='yes'
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password=''
CONFIG_mysql_dump_host='localhost'
CONFIG_mysql_dump_socket=''
CONFIG_mysql_dump_create_database='no'
CONFIG_mysql_dump_use_separate_dirs='yes'
CONFIG_mysql_dump_compression='gzip'
CONFIG_mysql_dump_commcomp='no'
CONFIG_mysql_dump_latest='no'
CONFIG_mysql_dump_max_allowed_packet=''
CONFIG_db_names=()
CONFIG_db_month_names=()
CONFIG_db_exclude=( 'information_schema' )
CONFIG_mailcontent='log'
CONFIG_mail_maxattsize=4000
CONFIG_mail_address='root'
CONFIG_encrypt='no'
CONFIG_encrypt_password='password0123'

Les sauvegardes journalières sont gardées une semaine (ce n'est pas modifiable), les sauvegardes hebdomadaires 5 semaines et les sauvegardes mensuelles 5 mois. Vous pouvez modifier ces 2 paramètres (CONFIG_rotation_weekly et CONFIG_ROTATION_monthly). A notre, que la valeur doit être exprimée en jour, soit pour 5 semaines, il faut indiquer 35 !

Par défaut, le script va prendre les valeurs définies dans votre fichier, et dans le cas où il ne trouve pas la variable car vous ne l'avez pas définie, il va utiliser les valeurs par défaut comme définies dans ce fichier :

/etc/automysqlbackup/automysqlbackup.conf

Si un paramètre vous pose question, n'hésitez pas à poser une question en commentaire.

Après avoir configurer votre fichier aux petits oignons, vous allez créer le fichier suivant :

/etc/cron.daily/runmysqlbackup

Vous copiez le code suivant :

#!/bin/sh

/usr/local/bin/automysqlbackup -bc "/etc/automysqlbackup/myserver.conf"

chown root.root /var/backup/db* -R
find /var/backup/db* -type f -exec chmod 400 {} ;
find /var/backup/db* -type d -exec chmod 700 {} ;

Ensuite, il faut mettre les bons droits et rendre le fichier exécutable.

Le répertoire de sauvegarde par défaut se situe dans :

/var/backup/db

Vous y trouverez une arborescence claire :

  • daily : sauvegardes journalières
  • fullschema : sauvegardes complètes
  • latest : dernières sauvegardes
  • monthly : sauvegardes mensuelles
  • status : les résultats de l'execution du script
  • tmp : fichiers temporaires
  • weekly : sauvegardes hebdomadaires

Un autre élément très intéressant, c'est la possibilité de lancer des commandes avant et après l'exécution du script. Cela permet par exemple d'exécuter suite à la sauvegarde, un script copiant dans un autre lieu votre précieux backup.

Cahier de test de l'interconnexion SIP
17 févr. 2013

La FFTélécoms publie un cahier de test et une fiche de profil SIP pour aider les opérateurs à valider l'interconnexion entre eux.

MVNE : Mobile Virtual Network Enabler - Quels sont les acteurs en France
11 févr. 2013

On entend beaucoup parler de termes MVNO et MVNE. Quel est la différence ? Que propose un MVNE ? Qui sont-ils ? Nous allons aborder des différents points dans cet article.

Quelle est la différence entre un MVNO et un MVNE ?

Définition d'un MVNO :

Ce sont des opérateurs mobiles virtuels qui ne disposent pas de leur propre **réseau radio (**les MVNO ne disposent pas de ressources en fréquences) et qui utilisent celui de l'un des opérateurs d'infractructures mobiles (Bouygues Télécom, Free, Orange et SFR). Pour fournir le service mobile au client final, ils utilisent le réseau radio d'un opérateur mobile de réseau.

Définition d'un MVNE :

MVNE signifie Mobile Virtual Network Enabler. Il s'agit d'un opérateur proposant à des MVNO l'accès à un ensemble de services ou d'équipements nécessaires à l'activité d'opérateur mobile.

Que propose un MVNE ?

Le système d'informations mobile est très complexe notament pour les éléments de facturation issues du roaming où les données mettent parfois plusieurs mois à remonter. Ils mettent à disposition de leurs clients un système d'informations optimisé qui permet aux nouveaux opérateurs de gagner un temps précieux. Dans certains cas, ils mettent aussi des services d'infrastructure à disposition, comme la messagerie vocale, les serveurs SMS ... Les clients opérateurs MVNO n'ont plus à leur charge que la dimension commerciale et marketing en délégant toute la gestion technique à un tiers de confiance.

Quels sont les différents MVNE ?

La liste est assez restreinte : des sociétés qualifiées " d'agrégateurs » se positionnent comme intermédiaires entre les opérateurs de réseau et les MVNO, à l'image de Transatel, Sisteer, Extelia ou plus récemment Alphalink. Ce dernier est un nouvel arrivant sur le marché de la mobilité, et d'après mes informations, ses services mobiles ne sont toujours pas encore en production que ce soit en direct (via Dimension Télécom) soit via d'éventuels partenaires.

Howto : comment renforcer la sécurité du réseau sous linux avec sysctl ?
11 janv. 2013

Il est essentiel de sécuriser ses machines sous linux. Il y a plusieurs étapes indispensables à suivre. Aujourd'hui, nous allons voir comment sysctl va nous aider.

En modifiant un seul fichier de conf, nous allons renforcer la protection réseau :

  • protection contre l' IP Spoofing
  • protection contre les scans
  • amélioration des logs pour permettre des traitements avec des outils tiers comme fail2ban
  • paramétrages divers

Nous allons éditer le fichier /etc/sysctl.conf et ajouter ou décommenter les lignes suivantes :

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Vous sauvegardez et quittez. Il faut ensuite recharger sysctl pour la prise en compte des modifications :

sysctl -p

Et voilà !

Howto : comment utiliser Sipp pour tester la montée en charge de votre serveur SIP ?
10 janv. 2013

Après le précédent guide détaillant l'installation de sipp sur debian/centos, il est temps maintenant d'apprendre à utiliser ce fabuleux outil.

HowTo : comment overclocker votre carte Raspberry PI ?
08 janv. 2013

Vous adorez votre carte Raspberry mais vous trouvez qu'elle manque un peu de pêche pour certains projets, notamment multimédia ? je vais vous guider afin de doper (légalement, on est pas dans le cyclisme :-) ) votre Raspberry.

HowTo : comment installer Sipp sur centos / debian afin de tester les performances de votre serveur de téléphonie SIP ?
07 janv. 2013

Vous venez de finir d'intégrer votre nouveau serveur de téléphonie SIP, de finir le développement d'une nouvelle application SIP. Il est maintenant essentiel de savoir si elle va pouvoir tenir la montée en charge ? Encore une fois, un outil open source vous apporte une solution performante : SIPP .

Carte des câbles optiques sous-marins
18 juin 2012

Je souhaite vous faire partager en ce lundi matin ensoleillé (enfin), un site fort intéressant permettant de voir les câbles optiques sous-marins. La carte est très bien faite, permettant de zoomer sur la partie qui nous intéresse, en cliquant sur un câble d'obtenir des informations détaillées (nom, longueur, débit, date de mise en service, points d'attache terrestre ...).

Coup de coeur : nouvelle carte Soekris : net6501
04 avr. 2012

Soekris vient de lancer une nouvelle carte : la net6501 !

Nous sommes dans le monde de l'embarqué : petites cartes, peu de puissance, et surtout faible consommation. J'utilise dans mes projets télécoms ces petites cartes consommant très peu d'énergie mais offrant de grandes possibilités. J'ai eu la chance de découvrir la petite de dernière de Soekris, un des fabricants renommés par la qualité de ces cartes.

Vérifier ses factures de téléphone
31 mars 2012

Introduction

N'avez-vous jamais trouvé vos factures de téléphonie trop élevées ? Mais, êtes-vous sûr que vos factures sont justes ? Un vieil adage dit : qui vérifie ses factures, ne perd pas son temps et dans les télécoms, cet adage se vérifie très souvent. Il est rare que lors d'une mission, je ne trouve pas de facture comportant des erreurs. Il est vrai que selon les opérateurs, les erreurs sont plus ou moins récurrentes. Pire, avec certains, je suis sûr de trouver de grossières erreurs. Un conseil : vérifier bien vos factures

Les abonnements

Il faut commencer par vérifier les services, ce qui apparaît souvent dans une colonne abonnements.

  • Vérifiez bien que ces services sont toujours utilisés. Il est courant de trouver des services facturés alors qu'ils ont été résiliés plusieurs mois auparavant.
  • Vérifiez aussi les montants. Souvent, des baisses de tarifs ne se retrouvent pas toujours sur les factures
  • Demandez toujours des explications sur les lignes laconiques avec des intitulés vagues comme "divers" ou "autres services", sans plus de détail.

Les communications

Cette autre partie est plus difficile à contrôler, mais souvent des gains importants sont à attendre de cette analyse.

  • Commencez par vérifier la bonne application des tarifs. Pour les appels facturés à la seconde, dès la première secondes, une simple règle de 3 devrait être suffisante. Pour les autres modes de facturation, vérifiez bien que le nombre des appels est bien indiqué selon les destinations, et demandez le fichier contenant le détail des communications. Sachez bien, que plus le mode de facturation est peu clair, plus les erreurs sont courantes !
  • Puis vérifiez la durée des communications facturées. C'est évidemment l'étape la plus compliquée. Je vous propose 2 solutions :
    • Pendant un mois, notez sur un cahier certains de vos appels (heure précise, destinataire et durée de communications) et croisez ensuite ces données avec le reporting de votre opérateur.
    • Ou, installez de manière provisoire un outil qui enregistrera les données de chaque communication (autrement appelé outil de taxation). Ainsi, une corrélation sera simple, efficace et surtout opposable en cas de litige.

Certains opérateurs indélicats ne facturent pas la bonne durée des communications. J'ai trouvé sur une de mes missions, une sursaturation à la durée de l'ordre de 15% en moyenne ! Je vous rassure tout de même, la plus part des erreurs (hors erreurs sur les durées) ne sont pas malhonnêtes mais due à une grande complexité des outils de facturation.

Conclusion

Il est intéressant financièrement de vérifier ces factures. Ce travail de vérifications doit être fait de manière régulière et précise, car il est très difficile pour un non professionnel d obtenir des avoirs. J'ai malgré tout permis lors de missions la récupération de sommes importantes.

A quel opérateur appartient ce numéro ?
05 janv. 2012

Vous souhaitez savoir comment connaître l'opérateur attributaire d'un numéro ?

Comment sécuriser le SIP d'un serveur asterisk ?
03 janv. 2012

Comme convenu lors de mes voeux, voici mon premier article technique de 2012 touchant la sécurité informatique et plus précisément comment sécuriser le SIP d'un serveur asterisk.

Vulnérabilité de la VoIP
16 juin 2011

Introduction

Alors que les attaques sur les systèmes de VoIP sont en constantes augmentation, les vulnérabilités observées augmentent elles aussi de manière exponentielle. (ne me faites pas dire ce que je n'ai pas dit, les systèmes traditionnels sont aussi soumis à des vulnérabilités qui sont d'autant plus facilement exploitées que tout le monde se croit à l'abri et qu'aucune procédure de sécurité n'est appliquée, même les plus essentielles et faciles à mettre en oeuvre - "comment ça, changer le mot de passe, 0000 comme mot de passe, c'est très bien mon bon mossieur !!!"). On peut décomposer les attaques en 2 parties : les attaques au niveau du protocole et les attaques au niveau applicatif.

Les attaques protocolaires 

- l'écoute non souhaitée :

il est aisée de part la nature des flux (le média est transporté en RTP et la plus part du temps en non crypté) d'écouter les conversations. Cela pose un vrai problème de confidentialité. La plus part des configuration par défaut n'utilise ni cryptage ni authentification.

- usurpation d'identité :

il est très aisé de présenter n'importe quel numéro, et donc se faire passer pour un autre

- détournement de compte SIP :

on retrouve en général 2 types d'authentification, soit par l'adresse IP, soit par un couple user / mot de passe. Grâce à la technique d'IP Spoofing, on peut détourner la première solution, et en sniffant le réseau on peut aisément récupérer les user/mdp. Il est essentiel de ne pas échanger les mots de passe en clair (utiliser md5) et d'utiliser SIPS (attention, tous les systèmes ne le prennent pas en compte).

- Replay :

en sniffant une conversation, on récupère les échanges de signalisation SIP. Il suffit de rejouer cet échange !

- Déni de service :

en générant de forte demande d'appels, d'authentification ...

Les attaques applicatives

- les téléphones voip disposent d'une interface web de base souvent non protégée, permettant sa programmation à distance. L'assaillant après un scan et identification des terminaux, va pouvoir récupérer des informations essentielles (mots de passe, adresses ...) et détourner à son profit les comptes. - les téléphones et ipbx proposent des services qui parfois contiennent des failles de sécurité. Une fois exploitée, l'assaillant pourra prendre le contrôle de tout ou partie du système. Il faut bien s'assurer de bien patcher vos équipements. - la configuration ne prenant pas suffisamment en compte la sécurité : mot de passe évident, compte basique, dialplan non sécurisé ...

Conclusion

Ce n'est pas un exposé exhaustif des attaques touchant la VOIP, mais des principales attaques. Maintenant il ne vous reste plus qu'à vérifier votre protection. Bon courage.

Disparition programmée du PABX ou autocommutateur
02 mars 2011

Grâce à la téléphonie sur IP, il n'est plus nécessaire de disposer de ports dédiés sur une carte de votre autocommutateur afin de raccorder vos postes téléphoniques.

Les offres de raccordements de trunk SIP des opérateurs permettent de se passer aussi de carte numéris.

Alors à quoi bon investir dans du matériel, et ne pas investir sur du logiciel et de l'expertise ?

Comment améliorer l'accueil téléphonique
21 nov. 2009

Combien est-ce frustrant quand vous appeler votre hotline, afin de commander un nouveau service ou réserver une place, d'attendre de très longues minutes sans disposer d'aucunes informations pour se voir parfois raccrocher au nez sans préavis.

Comment résoudre une mauvaise qualité de communication VoIP ?
28 juil. 2009

Nous allons voir comment résoudre un problème de qualité audio.

Asterisk peut-il remplacer votre PABX ?
22 juil. 2009

Je vais essayre de répondre à la question : est-ce que asterisk peut remplacer votre IPBX ?

Du ménage dans la jungle des numéros spéciaux ?
18 juil. 2009

De plus en plus de sociétés utilisent ces numéros dits à "valeur ajoutée", valeur pas toujours ajoutée par ailleurs, comme par exemple comme cette société xxx ( il paraît que je n'ai pas le droit de donner son nom malgré mon envie ) qui ne dispose que de numéros en 0892 pour être jointe.

Au fait combien coûte un 0892 ?

En fait le coût doit-être inférieur (ou égal) à 0,45 €TTC/min.

Petite devinette ? combien ma société secrète facture les appels pour accéder à leur comptabilité ou au service commercial ?

Marché des autocommutateurs (PABX)
05 juil. 2009

De nombreuses marques ont disparu : Telic, Matra, Eritelcom, Barphone, E-Generis, JS Telecom (puis Bosh), Ténovis, Ascotel pour ne citer que les plus connus et récemment le rachat d'Ericsson par Aastra. Certaines ont disparus, d'autres ont été rachetées puis les produits arrétés et rarement les produits continuent de vivre (survivre) comme Ascotel et Matra au sein de Aastra.

Et peut-être la cession de la division entreprise de Nortel à Avaya. Le marché du PABX est réparti et 3 catégories prinicipales : les moins de 10 postes (TPE), les moins de 100 postes (PME) et les plus de 100 postes. Il faut noter que c'est dans cette dernière catégorie, que les sociétés ayant plusieurs sites en réseau et les entreprises multisites trouveront la solution technique adaptée à leurs besoins. En effet, les PABX pour les 2 autres catégories ne proposent que des fonctionnalités trop basiques afin de répondre à leur besoins.

Les parts de marché sont difficiles à estimer. Chaque constructeur les présente selon une vision qui les avantages, parfois en nombre de postes, parfois en Euros ou en Dollars, parfois en excluant l'IP ou le TDM, parfois en ciblant une catégorie qui les avantage par rapport à la concurrence. Le marché Français est dominé par 2 acteurs, Alcatel et Aastra, avec près de 80% des parts de marché.

Un évènement important à garder en mémoire, est la décroissance en valeur du marché mondial qui s'est matérialisée au premier trimestre 2009 par une baisse de 31%. (1,7 milliards de dollars au lieu de 2,5 pour le T1 2008).

Le premier segment de marché, les moins de 10 postes, regorge d'acteurs. Je ne vais donc citer que les solutions les plus représentatives avec mes excuses pour les oubliées (ils peuvent se présenter en commentaire). Alcatel et Aastra sont bien entendu très présent sur ce segment avec leur produit respectif l'Alcatel OmniPCX Office Compact et l'Aastra Ascotel 150. Siemens est présent avec plusieurs modèles dont un full IP et 1 full TDM. Panasonic est présent avec le TDA15 et Cisco avec l'UC500 (Full IP). Deux marques sortent du lot car elles se positionnent essentiellement sur ce segment de marché. Une marque française, Adept-Télécom et une marque Hollandaise Tiptel. Elles se positionnent avec des prix agressifs, mais avec une contre partie notamment avec une évolution fortement limitée. Je ne vais pas trop m'étendre sur cette catégorie, qui est de plus fortement concurrencée par les offres ASP (IP Centrex et Box), et dont la motivation première d'achat est le prix.

La seconde catégorie, les moins de 100 postes, est très représentée en France par le nombre de sites. Je ne vais présenter ici que les solutions qui supportent la VoIP, les autres étant appelées à disparaître. Les leaders encore une fois sont Alcatel avec l'OmniPCX Office et Aastra mais avec cette fois-ci plusieurs offres : Aastra 500 (Full IP) et la gamme Nexspan (ex Matra). Siemens est présente avec la gamme HiPath 3000, Panasonic avec 2 gammes, NCP et TDE, Cisco avec le Call Manager (UC500 occupera très prochainement l'ensemble de cette gamme de poste), Avaya avec l'IP Office et NEC-Philips avec IPC500 et enfin Mitel. Les autres solutions représentent une part de marché négligeable.

Dans la 3ème catégorie, les acteurs sont beaucoup moins nombreux, et je ne citerais que les solutions effectivement représentées sur le marché Français, disposant de nombreuses références, proposant des solutions de mise en réseau IP performantes et de hautes disponibilités. Alcatel est présent avec L'OmniPCX Entreprise, Aastra avec le Nexspan et Cisco avec le Call Manager.

Bien entendu, il existe une multitude d'offres à partir de solutions open source comme asterisk par exemple. Il faut surtout comprendre que ce ne sont pas des produits mais des framework, une excellente base de travail. Aastra propose des solutions basées sur asterisk. Ces solutions dépendent de manière très importante de l'intégrateur qui apporte une compétence toute différente d'un installateur privé. Il se doit de maîtriser les systèmes d'exploitation comme linux ou bsd, d'avoir une bonne notion de langages de programmation (perl, php, C ...) et enfin avoir une connaissance plus pointue en réseau que pour les PABX traditionnel.

Je ne vous ai pas donné de réponses sur quelle solution choisir, car la solution dépend en premier lieu de vos besoins, et ensuite des partenaires aptes à vous accompagner. Pour avoir réaliser de nombreuses missions de d'accompagnement, la base de réussite d'un tel projet est l'analyse de besoins puis le cahier des charges qui en découle. La solution se dessinera alors d'elle même. Vous trouverez sur ce blog, petit à petit des articles présentant plus en détail les solutions citées dans cet article.

Décryptage d'une offre SDSL
16 juin 2009

Un des fournisseurs vend à perte, l'autre a pour objectif de rentabiliser rapidement ses investissements dans sa nouvelle Ferrari ? Ou existe t'il une différence technique expliquant ces écarts tarifaires ?

Un lien SDSL est un service de transport de données destiné à raccorder un site d'extrémité (client) à un PoP (Point of Presence) opérateur.

Votre système téléphonique est-il bien protégé ?
03 juin 2009

Historique

Commençons par un retour vers le passé, un peu d'histoire qui va nous permettre de comprendre l'étendue des risques encourus par les entreprises. Avant l'arrivée de la voix sur IP (VoIP) et du dialogue entre le téléphone et l'informatique communément appelé CTI, les flux voix étaient transportés par des protocoles propriétaires. Le niveau de compétences nécessaires afin de réaliser une intrusion était élevé. Peu d'attaques étaient possibles :

  • écoute des communications en se branchant sur les accès France Télécom.
  • prise en main à distance du système de téléphonie.

Cette dernière attaque est particulièrement dangereuse, car cela permet à l'attaquant de modifier le paramétrage de l'autocommutateur. Ainsi, grâce à des fonctionnalités embarqués dans le PABX, l'attaquant peut appeler au frais de la société attaquée des correspondant étranger à moindre frais. Il peut aussi faire de l'écoute discrète, enregistrer les communications, renvoyer les appels vers le service commercial vers un concurrent ...

Quels sont les risques ?

Nous avons donc trois niveaux de risques :

  1. un risque financier
  2. un risque d'indisponibilité du système
  3. un risque d'espionnage

L'intrusion

Le risque d'intrusion par un accès à distance sur le PABX est très fort. En effet, le monde des installateurs privés n'est pas très au fait de la sécurité. Vous trouvez alors assez facilement les informations nécessaires. Le numéro d'accès est très souvent le numéro du standard. Sinon, un numéro de la séquence SDA assez facile à obtenir. Il suffit alors de scanner la plage de numéro. Il vous reste à trouver le mot de passe. Il faut savoir que pour des raisons pratiques, une partie des autocommutateurs sont toujours avec le mot de passe d'origine ou si le mot de passe a été changé, il n'est pas rare que tous les clients d'un même installateur privé est le même mot de passe. Dans tous les cas, le format des mots de passe est assez simple et n'est pas très difficile à casser. Enfin, chaque constructeur dispose d'un mot de passe dit super utilisateur qui n'est pas toujours très difficile à récupérer. De plus, il y a plusieurs niveaux d'utilisateurs : constructeur, administrateur, opérateur ... Souvent, seul le mot de passe administrateur est changé. Il suffit de se connecter en opérateur et les droits sont en général suffisant pour faire des dégâts.

VOIP / CTI : des risques complémentaires

Avec la VoIP et le CTI, d'autres failles de sécurité interviennent. Les flux voix sont plus facilement interceptés et donc écoutés sans avoir à prendre la main sur le système. Il suffit alors de crypter les communications, mais qui le fait réellement ? De grands constructeurs ne l'implémentent même pas dans leur système et confie cette sécurisation à des tiers. Le CTI (protocole liant l'informatique à la téléphonie) ouvre deux possibilités supplémentaires : prendre possession du PABX, mais nous l'avons vu précédemment qu'il y a des méthodes plus simples, mais permet aussi d'entrer sur le réseau informatique. Je vous laisse imaginer, alors que vous aviez parfaitement sécurisé votre informatique, sans le savoir, vous avez laissé une porte grande ouverte via votre autocommutateur.

Conclusion

Un système téléphonique d'entreprise est avant tout un système informatique (serveur linux, windows ou dérivé d'unix) disposant des failles de sécurité qui doit entrer dans les process de sécurité informatique : gestion des accès externes rigoureux, politique de gestion des mots de pass, surveillance ... d'autant plus que les risques sont au moins aussi importants que pour l'informatique.