Aller au contenu principal

Sécurité

Ce qui protège vos données, les réglages qui touchent à la sécurité, ce que vous devez vérifier sur votre installation, ce que reçoit notre serveur de licences et ce qui se passe quand il est indisponible.

La passerelle est installée sur votre serveur. Vos SMS, vos contacts, vos conversations et vos journaux y sont enregistrés et nulle part ailleurs : nous n'en avons aucune copie, aucun accès et aucun moyen de les lire. Cela veut aussi dire qu'une partie de la sécurité est entre vos mains : la machine, son réseau, ses mises à jour et ses sauvegardes.

Cette page explique ce que fait la passerelle pour protéger vos données, quels réglages y touchent, et ce que vous devez vérifier vous-même.

Vos données restent sur votre serveur

Donnée Où elle se trouve Quitte-t-elle votre serveur ?
SMS envoyés et reçus, conversations La base de la passerelle, sur votre machine Seulement vers vos téléphones, qui les envoient et les reçoivent
Contacts, groupes, modèles, règles, campagnes La même base Jamais
Journal d'activité et journaux techniques La même base, et la sortie de la passerelle Jamais
Notifications par webhook Envoyées par la passerelle Seulement vers les adresses que vous avez configurées, et sans texte de SMS ni numéro complet
Alertes (Paramètres, Notifications) Envoyées par la passerelle Par SMS via vos SIM, par e-mail via votre serveur SMTP, et vers le service de notification des navigateurs abonnés par vos utilisateurs. Jamais un texte de SMS ni un numéro complet
Informations de licence Envoyées par la passerelle Vers notre serveur de licences, limitées à ce qui est listé plus bas

La passerelle n'établit d'elle-même que quelques sortes de connexions sortantes : vers notre serveur de licences, vers les adresses de webhook que vous avez créées et, si vous activez les alertes, vers votre serveur SMTP et vers le service de notification des navigateurs abonnés. Tout le reste est entrant : votre navigateur, vos téléphones et vos applications se connectent à elle. La référence de l'API et le dashboard ne chargent rien depuis internet.

Comment la passerelle protège vos données

Comptes et connexion

  • Les mots de passe sont enregistrés sous forme d'empreinte salée et volontairement lente (argon2id), jamais en clair. Ils doivent compter au moins 12 caractères, sans règle de composition : une longue phrase est plus solide qu'un mot court agrémenté d'un symbole.
  • Force brute. Après 5 échecs de connexion pour une même adresse ou un même compte, la connexion est bloquée 30 secondes, puis deux fois plus longtemps à chaque nouvel échec, jusqu'à 15 minutes. Un mauvais e-mail et un mauvais mot de passe reçoivent la même réponse : personne ne peut tester quels comptes existent.
  • Le premier compte ne peut être créé qu'avec le code d'installation affiché à la fin de l'installation (sms-gateway setup-code le réaffiche). Un robot qui trouverait votre passerelle sur internet avant vous ne peut pas créer le compte administrateur à votre place.
  • Changer votre e-mail ou votre mot de passe demande le mot de passe actuel. Changer le mot de passe ferme toutes les autres sessions du compte.

Sessions

Le dashboard vous garde connecté avec un cookie illisible par les scripts, valable 7 jours et prolongé tant que vous l'utilisez. Se déconnecter termine la session immédiatement sur le serveur. Désactiver un compte ou réinitialiser son mot de passe termine toutes ses sessions d'un coup. Chaque modification faite depuis le dashboard est protégée contre les requêtes forgées depuis d'autres sites.

Rôles

Chaque compte du dashboard a l'un des trois rôles, réglé dans Paramètres > Utilisateurs et rôles :

Rôle Ce qu'il peut faire
Superadministrateur Tout, y compris les comptes, la licence, les paramètres, les clés API, les sauvegardes, l'appairage des téléphones et les règles de routage
Opérateur Envoyer, répondre, et gérer contacts, modèles, règles, campagnes et webhooks. Ni comptes, ni paramètres, ni clés, ni sauvegardes
Lecture seule Tout voir, ne rien modifier

Le rôle est vérifié par la passerelle à chaque requête, pas seulement masqué dans l'interface. Le dernier superadministrateur actif ne peut être ni rétrogradé, ni désactivé, ni supprimé : l'installation garde toujours un administrateur. Donnez le rôle de superadministrateur au moins de personnes possible. Voir Utilisateurs et rôles.

Clés API

Les applications utilisent des clés API, jamais un compte du dashboard. Chaque clé a une portée (read, send, admin), une liste facultative d'adresses autorisées et des plafonds facultatifs par minute et par jour. Seule une empreinte de la clé est conservée : une copie de la base ne la révèle donc pas. La révocation est immédiate. Voir Clés API.

Téléphones

  • Un téléphone s'appaire en scannant un QR code valable 5 minutes et utilisable une seule fois. Un QR code saisi sur une capture d'écran ne sert plus à rien ensuite. Le code manuel proposé aux téléphones sans appareil photo suit les mêmes règles, et les codes erronés répétés sont bloqués.
  • Chaque téléphone reçoit son propre secret à l'appairage. Chaque message échangé entre le téléphone et la passerelle est signé avec ce secret et daté : un message capturé sur le réseau ne peut pas être rejoué.
  • Désappairer un téléphone depuis la page Appareils coupe sa connexion aussitôt.
  • Le dashboard affiche l'empreinte SHA-256 de l'application Android qu'il propose au téléchargement, pour que vous puissiez la comparer à celle donnée dans votre espace client.

Secrets conservés par la passerelle

Certains secrets doivent pouvoir être relus par la passerelle : les secrets des téléphones, les secrets des webhooks et votre clé de licence. Ils sont chiffrés (AES-256-GCM) avec une clé maîtresse conservée hors de la base, dans le fichier secret.key du répertoire de données (ou dans GATEWAY_SECRET_KEY si vous la renseignez). Une copie de la base seule, une sauvegarde par exemple, ne les révèle donc pas.

Tout ce qui doit seulement être reconnu est conservé sous forme d'empreinte irréversible : mots de passe, sessions, clés API, codes d'appairage.

La clé maîtresse est précieuse. Sans elle, une base restaurée perd ses téléphones (à appairer de nouveau), les secrets de ses webhooks et sa clé de licence. Sauvegardez-la, à part des sauvegardes de la base : voir Sauvegardes.

Webhooks

Chaque appel de webhook est signé avec un secret que seuls vous et la passerelle connaissez, et daté : votre application peut refuser un appel forgé ou rejoué. Il transporte des identifiants, jamais le texte d'un SMS ni un numéro complet. La passerelle refuse d'appeler sa propre machine ou les adresses de métadonnées cloud. Voir Webhooks.

Alertes

Les alertes ne portent qu'un texte court : le téléphone tel que vous l'avez nommé, la SIM par son emplacement, des nombres. Jamais le texte d'un SMS, jamais un numéro complet. Changer leur destination est réservé à un superadministrateur.

  • L'e-mail passe par le serveur SMTP que vous configurez. Son mot de passe est chiffré comme les autres secrets et n'est plus jamais affiché. Avec la sécurité réglée sur Aucune, la passerelle refuse d'envoyer le mot de passe à un serveur qui n'est pas sur la même machine : choisissez STARTTLS ou TLS pour un serveur distant.
  • Les notifications du navigateur (Web Push) transitent par le service de notification de l'éditeur du navigateur (Google pour Chrome et Edge, Mozilla pour Firefox, Apple pour Safari) : c'est ainsi qu'un navigateur reçoit une notification page fermée. Chaque message est chiffré de bout en bout entre votre passerelle et le navigateur ; l'éditeur relaie des octets qu'il ne peut pas lire, et apprend seulement qu'une notification a été envoyée à ce navigateur. La passerelle s'identifie par une paire de clés tirée sur votre serveur la première fois qu'il en faut une ; la moitié privée est stockée chiffrée et n'en sort jamais. La passerelle refuse les adresses de notification qui pointent vers sa propre machine ou le réseau local.
  • Chaque utilisateur gère les navigateurs qu'il a abonnés, et peut en désabonner un depuis Paramètres, Notifications. Un compte supprimé perd ses abonnements.

Journaux

Ni les journaux techniques ni le Journal d'activité ne contiennent jamais le texte d'un SMS, un numéro de téléphone complet (ils affichent +261******89), une clé, un jeton ou un mot de passe. Les termes de recherche et les numéros saisis dans les URL sont masqués avant qu'une requête soit journalisée. Le frontal HTTPS installé avec la passerelle retire aussi les clés et les cookies de son journal d'accès. La vue technique des journaux est réservée aux superadministrateurs.

La connexion

  • Avec un nom de domaine, l'installeur place un serveur HTTPS (Caddy) devant la passerelle, avec un certificat gratuit renouvelé automatiquement. La passerelle elle-même n'écoute que sur l'adresse interne de la machine, et n'est pas joignable de l'extérieur sans HTTPS.
  • La passerelle refuse de démarrer avec une adresse publique en http:// : en HTTP simple sur internet, mots de passe et sessions traverseraient le réseau en clair.
  • Le conteneur tourne avec un système de fichiers en lecture seule, sans privilèges, et n'écrit que dans son répertoire de données.

Réglages qui touchent à la sécurité

Option Par défaut Effet
Mode d'installation --domain ou --lan Installeur demandé à l'installation --domain : HTTPS avec certificat, passerelle joignable seulement à travers lui. --lan : HTTP simple sur votre réseau local. Voir plus bas
GATEWAY_PUBLIC_URL .env de l'installation écrit par l'installeur L'adresse qu'utilisent les utilisateurs et les téléphones. Doit être en https://, sauf nom local (.local, localhost)
GATEWAY_INSECURE_COOKIES .env false (domaine), true (réseau local) true permet au navigateur de garder votre session en HTTP simple. La session traverse alors le réseau local sans chiffrement. Ne change rien d'autre
GATEWAY_SECRET_KEY .env vide : secret.key est tiré au premier démarrage La clé maîtresse qui chiffre les secrets conservés. La changer rend illisible tout ce qui a été chiffré avec l'ancienne
GATEWAY_TRUSTED_PROXIES .env l'adresse du serveur HTTPS intégré Les proxys autorisés à indiquer l'adresse réelle du visiteur. Cette adresse sert aux blocages de connexion, aux listes d'adresses des clés API et aux plafonds. Une valeur trop large permet à n'importe qui de se faire passer pour n'importe quelle adresse
GATEWAY_WEBHOOKS_ALLOW_PRIVATE_NETWORKS .env true false interdit les webhooks vers votre réseau privé, et ne laisse que les adresses publiques
GATEWAY_LOG_RETENTION_DAYS .env 30 Durée de conservation du Journal (connexions, changements de clés, échecs). Plus longue, elle aide une enquête ; plus courte, elle garde moins d'historique
GATEWAY_LOG_LEVEL .env info Niveau de détail des journaux techniques. Aucun niveau n'écrit le texte d'un SMS ni un numéro complet
Rôle de chaque compte Paramètres > Utilisateurs et rôles le rôle choisi à la création Ce que chaque personne peut faire. Voir Rôles
Portée, adresses autorisées, plafonds d'une clé Système > Clés API Lecture, toutes les adresses, aucun plafond Ce que chaque application peut faire, d'où et à quelle fréquence
Secret et destination d'un webhook Page Webhooks, API secret tiré par la passerelle Qui reçoit les notifications et comment elles prouvent leur origine

Toutes les variables d'environnement sont décrites dans le guide d'installation. Une variable se modifie dans le fichier .env de l'installation, puis s'applique en redémarrant la passerelle.

Domaine ou réseau local

Mode Adresse Chiffrement Pour qui
--domain (recommandé) https://sms.exemple.com HTTPS de bout en bout Toute installation joignable depuis internet, ou utilisée de l'extérieur
--lan http://<machine>.local:8080 Aucun : mots de passe et sessions circulent en clair sur le réseau local Un réseau fermé en qui vous avez entièrement confiance (bureau, domicile), sans accès depuis l'extérieur

Ne rendez jamais une installation --lan joignable depuis internet (par une redirection de port sur votre box, par exemple). Si vous avez besoin d'un accès depuis l'extérieur, réinstallez en mode --domain.

Ce que vous devez faire

Une liste à parcourir après l'installation, puis de temps en temps.

À l'installation

  • Installez en mode --domain dès que la passerelle sert en dehors d'un réseau local fermé.
  • Créez le premier compte juste après l'installation, avec le code d'installation, et un mot de passe d'au moins 12 caractères que vous n'utilisez nulle part ailleurs.
  • Copiez secret.key en lieu sûr, hors du serveur (voir Sauvegardes).

Le serveur

  • Pare-feu : en mode domaine, n'ouvrez que les ports 80 et 443 (plus SSH pour vous, idéalement limité à votre adresse). Le port 8080 de la passerelle ne doit pas être joignable de l'extérieur. En mode réseau local, ouvrez 8080 sur le réseau local seulement.
  • Appliquez les mises à jour de sécurité du système, et mettez à jour la passerelle quand une nouvelle version paraît.
  • Gardez l'horloge du serveur à l'heure (NTP) : les signatures des téléphones et des webhooks en dépendent.
  • Limitez qui a un accès administrateur à la machine : qui est root sur le serveur peut tout lire, quoi que fasse la passerelle.

Comptes et clés

  • Un compte par personne, jamais partagé. Le rôle Lecture seule pour qui ne fait que consulter.
  • Le moins de superadministrateurs possible, au moins deux si vous voulez un remplaçant.
  • Désactivez le compte d'une personne qui s'en va : ses sessions se terminent aussitôt.
  • Une clé API par application, avec la portée la plus restreinte, des adresses autorisées quand c'est possible et un plafond journalier.
  • Révoquez les clés que personne n'utilise (colonne Dernière utilisation de Clés API).

Téléphones

  • Verrouillez les téléphones par un code et gardez-les dans un endroit accessible à votre seule équipe : qui tient un téléphone appairé peut lire les SMS qu'il reçoit.
  • Désappairez un téléphone perdu, remplacé ou vendu, depuis la page Appareils.

Sauvegardes

  • Activez les sauvegardes planifiées et copiez-les régulièrement hors du serveur.
  • Protégez les copies : une sauvegarde contient toutes vos données (messages, contacts, comptes), sans chiffrement. Rangez-la chiffrée, ou dans un endroit à accès restreint.
  • Testez une restauration de temps en temps.

Surveiller

  • Parcourez le Journal de temps à autre : connexions, échecs de connexion, créations et révocations de clés, téléphones hors ligne.
  • Abonnez-vous à device.offline et backup.failed par webhook si vous voulez être alerté.

Ce que reçoit notre serveur de licences

La passerelle contacte notre serveur de licences pour activer votre licence, puis environ une fois par jour pour la renouveler. Chaque contact envoie exactement ceci, et rien d'autre :

Information Ce que c'est
La clé de licence Envoyée en HTTPS pour que nous puissions la vérifier. Notre serveur n'en conserve qu'une empreinte
La ligne de version La version majeure de la passerelle, pour vérifier que la clé la couvre
La version exacte Le numéro de build de votre passerelle
L'empreinte de la machine Une empreinte calculée sur votre serveur. Les informations dont elle est tirée ne sortent jamais
Le nombre de téléphones Combien de téléphones sont appairés
Un compteur Un nombre qui ne fait qu'augmenter, pour détecter une horloge remontée dans le temps

Aucun numéro de téléphone, aucun message, aucun contact, aucun nom, aucune adresse e-mail de compte et aucun journal n'est jamais envoyé : la requête n'a aucun champ pour eux. Notre réponse est un jeton de licence signé par nous, que votre passerelle vérifie avec une clé publique intégrée.

Si nos serveurs sont indisponibles

Rien ne s'arrête. Votre passerelle ne dépend pas de nous pour envoyer ou recevoir le moindre SMS.

  • Un serveur de licences injoignable, un délai dépassé, une page d'erreur ou une réponse non signée sont tous traités comme « notre côté est en panne », et jamais comme un problème de votre licence. Le dashboard affiche un avis d'information, et la passerelle continue d'essayer : après 15 minutes, 1 heure, 6 heures, puis une fois par jour.
  • Une licence reste valable 90 jours après son dernier renouvellement. Au-delà, un bandeau apparaît pendant 30 jours, puis un avertissement durable : l'envoi n'est jamais coupé parce que notre serveur n'a pas répondu.
  • Une licence détenue depuis 12 mois ou plus fonctionne sans limite de durée, que notre serveur réponde ou non.
  • Seul un retrait explicite de votre licence, signé par nous et vérifié par votre passerelle, peut la restreindre. Même dans ce cas, vous gardez la lecture et l'export de toutes vos données : seules les nouvelles modifications sont refusées.

Le détail, et que faire dans chaque situation, se trouvent dans Licence.

Limites connues

Nous préférons vous dire ce que la passerelle ne fait pas encore :

Sujet Aujourd'hui
Authentification à deux facteurs Non disponible. Utilisez des mots de passe longs et uniques, et limitez le nombre de superadministrateurs
Chiffrement de la base Le fichier de la base n'est pas chiffré sur le disque. Il est protégé par les permissions du serveur, et les secrets qu'il contient sont chiffrés à part. Utilisez le chiffrement de disque du serveur si vous en avez besoin
Chiffrement des sauvegardes Les sauvegardes ne sont pas chiffrées. Protégez vous-même les copies
Mode réseau local HTTP simple : ne convient qu'à un réseau de confiance
Changement de la clé maîtresse Aucune procédure automatique : la changer rend illisibles les secrets conservés (téléphones à appairer de nouveau, secrets de webhook à redéfinir, clé de licence à saisir de nouveau)

Rechercher dans la documentation

Saisissez quelques mots, puis choisissez une page.