Les alertes par e-mail et webhook

Ajouter des adresses e-mail et des webhooks (Slack, Discord, ntfy ou JSON), choisir la règle (changements, problèmes, toujours), router par client et tester un canal.

Mis à jour le

La page Alertes indique où envoyer les nouvelles : après chaque audit, quand un site tombe en panne puis revient, quand un certificat inhabituel est émis, quand un domaine est prêt pour son étape DMARC suivante, ou quand la note d’un fournisseur baisse. Aucune alerte ne part tant que vous n’avez pas ajouté de canal.

Ajouter un canal

  1. Ouvrez Alertes et allez à Ajouter un canal.
  2. Choisissez le type : E-mail, ou Webhook (ntfy, Slack, Discord ou toute adresse HTTPS) à partir de l’offre Solo.
  3. Saisissez l’adresse ou l’URL : vous@example.com, ou l’adresse du webhook, comme https://ntfy.sh/votre-sujet.
  4. Choisissez quand envoyer après un audit : quand quelque chose a changé, quand il y a un constat critique ou élevé, ou à chaque audit.
  5. Avec les offres Agency, choisissez si le canal sert à tout l’espace ou seulement à un client.
  6. Appuyez sur Ajouter le canal, puis sur Tester pour recevoir un message d’essai.

Seuls les propriétaires et les administrateurs peuvent gérer les canaux. Un espace peut en avoir jusqu’à vingt.

Confirmer une adresse e-mail

Une adresse qui appartient à un membre de l’espace fonctionne tout de suite. Toute autre adresse reçoit d’abord un message qui demande à son titulaire de confirmer (« Oui, envoyez-moi ces alertes ») ; d’ici là, le canal indique « en attente de confirmation par le titulaire » et rien n’y est envoyé. Ainsi, personne ne reçoit d’alertes qu’il n’a pas demandées.

Les trois règles

La règle décide quels audits sont envoyés au canal :

Règle Envoyé quand
changements Quelque chose a changé depuis l’audit précédent : nouveaux constats, nouveaux sous-domaines, sosies, certificats, baisse de la note.
problèmes L’audit a au moins un constat critique ou élevé.
toujours Après chaque audit.

Les autres alertes suivent leur propre logique :

  • Les pannes et les retours vont à chaque canal qui les accepte (voir plus bas), quelle que soit sa règle.
  • Les certificats inhabituels vont à chaque canal, quelle que soit sa règle.
  • Les vulnérabilités nouvellement exploitées (à partir de l’offre Solo) vont à chaque canal, quelle que soit sa règle : une vulnérabilité que le dernier audit a vue sur une de vos adresses vient d’entrer dans le catalogue des vulnérabilités exploitées de la CISA ou de l’Union européenne (ENISA). Elle apparaît aussi sur la page du domaine.
  • Les étapes DMARC vont aux canaux réglés sur changements ou toujours.
  • Les alertes fournisseurs vont aux canaux qui ne sont pas réservés à un client.

Les webhooks

Le message est mis en forme pour le service auquel appartient l’adresse : les webhooks entrants de Slack, les webhooks de Discord et les sujets ntfy reçoivent un message lisible ; toute autre adresse HTTPS reçoit du JSON. Les adresses de webhook doivent être des adresses HTTPS publiques : les adresses privées et réservées sont refusées.

Webhooks signés

Chaque alerte envoyée à un webhook porte un en-tête Perimetry-Signature : t=<heure>,v1=<signature>, où la signature est le HMAC-SHA256, en hexadécimal, de l’heure, d’un point et du corps brut, avec le secret de signature du canal. Les propriétaires et les administrateurs trouvent ce secret sous le canal, sur la page Alertes (Secret de signature), avec un bouton pour en créer un nouveau ; l’ancien cesse alors aussitôt d’être valide. Les messages de test sont signés eux aussi.

Pour n’accepter que nos alertes, calculez le même HMAC sur le corps tel que reçu, comparez-le en temps constant, et refusez une heure qui s’écarte de plus de cinq minutes de la vôtre :

import { createHmac, timingSafeEqual } from 'node:crypto';

// rawBody: the body exactly as received; header: the Perimetry-Signature header.
function fromPerimetry(rawBody, header, secret) {
  const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header ?? '');
  if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
  const want = createHmac('sha256', secret).update(`${m[1]}.${rawBody}`).digest();
  const got = Buffer.from(m[2], 'hex');
  return got.length === want.length && timingSafeEqual(got, want);
}

Slack, Microsoft Teams et PagerDuty

Les canaux Slack et Teams (à partir de l’offre Solo) reçoivent les mêmes alertes en messages riches avec des boutons vers le rapport ; PagerDuty (à partir de l’offre Agency) ne reçoit que les constats critiques et les pannes, résolus d’eux-mêmes une fois corrigés. Voir Slack, Microsoft Teams et PagerDuty. Chaque membre reçoit aussi un résumé hebdomadaire par e-mail, réglé dans les Réglages.

Gérer vos canaux

Chaque ligne du tableau Canaux montre la cible, la règle, et la date de la dernière alerte avec son résultat (envoyé, échec, ou ignoré parce que la règle n’était pas remplie). De là :

  • Tester envoie un message d’essai (cinq par heure au plus) ;
  • Mettre en pause arrête un canal sans le retirer, et Activer le relance ;
  • Sans alertes de panne garde un canal pour les audits seulement ; Alertes de panne les reprend ;
  • Retirer supprime le canal.

Chaque e-mail d’alerte contient un lien vers cette page, où il peut être arrêté.

Langue

Les alertes sont rédigées dans la langue de l’espace, réglée dans Réglages › Langue par les propriétaires et administrateurs : e-mails, webhooks et messages d’essai, titres des constats compris.

Clients et tickets

Avec les offres Agency, la même page permet de créer des clients pour regrouper les domaines et envoyer leurs alertes séparément (voyez Les clients et leurs rapports mensuels), et de connecter des outils de tickets (voyez Tickets).