Intégration SIEM

🔐 Pré-requis

  • Une clé API fournie par Securemail

  • Un système capable d’exécuter des requêtes HTTPS (curl, Python, etc.)

  • Un outil de traitement SIEM capable d’ingérer du JSON

  • URL API : https://logs.securemail.tech/siem/suivi.php

📝 Notes importantes :

  • ⏱️ 1 heure max de données par requête

  • 🔐 Requêtes obligatoirement en HTTPS GET

  • 📛 Codes retour HTTP :

    • 401 → Clé API absente ou invalide

    • 500 → Erreur serveur

    • 200 → Tout va bien

  • 📅 La valeur queryEndTime peut être réutilisé dans le paramètre sinceTime

  • 🔑 Chaque requête doit contenir un en-tête HTTP appelé Authorization, avec le format suivant :

    Authorization: Bearer VOTRE_CLÉ_API

1. 🔑 Récupérer votre clé API

  Accédez à votre console d'administration e-securemail, sélectionnez le domaine concerné, puis allez dans Suivi > Intégration SIEM.  

La clé API sera affichée sur la page, comme illustré dans la capture d'écran ci-dessous :

2. 🧪 Tester une requête curl

Exécutez cette commande dans votre terminal (remplacez <clé> par votre clé API) :

curl -H "Authorization: Bearer <clé>" https://logs.securemail.tech/siem/suivi.php

3. 📅 Choisir votre méthode de récupération

Vous avez 3 options pour récupérer les messages :

Paramètre sinceSeconds

  • Description : Permet de récupérer les données à partir d’un nombre de secondes dans le passé, par rapport au moment actuel.

  • Type : Entier (secondes)

  • Exemple :

    /siem/suivi.php?sinceSeconds=3600

    👉 Données récupérées depuis 1 heure en arrière (3600 secondes).

Paramètre sinceTime

  • Description : Définit une date/heure précise à partir de laquelle les données doivent être récupérées.

  • Type :

    • Date au format ISO 8601 (YYYY-MM-DDTHH:MM:SSZ)

    • Ou timestamp Unix (secondes depuis Epoch)

  • Exemples :

    /siem/suivi.php?sinceTime=2024-06-01T12:00:00Z
    /siem/suivi.php?sinceTime=1726869600

    👉 Données récupérées à partir du 1er juin 2024 à 12h00 UTC (même date dans les deux formats).

Paramètre interval

  • Description : Permet de spécifier un intervalle de temps complet (début et fin).

  • Format : Deux dates/timestamps séparés par un /.

  • Type :

    • Dates au format ISO 8601

    • Ou timestamps Unix

  • Exemples :

    /siem/suivi.php?interval=2024-08-20T15:30:00/2024-08-20T16:00:00
    /siem/suivi.php?interval=1727136000/1727139600

    👉 Données récupérées entre 15h30 et 16h00 le 20 août 2024.


4. ✅ Comprendre la structure du JSON retourné

STRUCTURE D'UN MESSAGE :

Champ Type Description
message_id texte Identifiant unique du message
client_ip adresse IP IP du serveur d'émission
client_name texte Nom (PTR) de l'IP d'émission
client_country 2 lettres Pays d'émission
helo_name texte HELO utilisé par le serveur d'émission
stamp_queue timestamp Date de réception du message (avant analyse)
header_from texte Expéditeur dans l'entête From
sender texte Expéditeur SMTP
subject texte Sujet
message_size nombre Taille en octet
recipients tableau Une entrée par destinataire
message_parts tableau Une entrée par partie du message

STRUCTURE DU JSON :
Champ Type Description
queryEndTime timestamp date fin de la requête,
à utiliser à nouveau dans le paramètre sinceTime
data tableau une entrée par email. si le tableau est vide alors aucun message n'a été filtré durant la période demandé

STRUCTURE MESSAGE_PARTS :
Champ Type Description
name texte Nom du ficher ou vide si partie text / html
placement nombre numéro de la part
sha1 texte
size nombre Taille en octet
content_type texte type MIME
qrcode bool Indique si la part contient un QR Code

5. 🎯 Résultats

Exemple de sortie JSON sans message

{
  "queryEndTime": 1727259183,
  "data": []
}

queryEndTime timestamp de la fin des données

data tableau contenant un élément par email.

Exemple de sortie avec message

{
  "queryEndTime": 1727259183,
  "data": [
  {
    "message_id": "23e0.64facee0.bc601.0",
    "client_ip": "161.38.205.161",
    "client_name": "m205-161.eu.mailgun.net",
    "client_country": "US",
    "helo_name": "m205-161.eu.mailgun.net",
    "stamp_queued": 1727254241,
    "header_from": "actualites@e.artisanparfumeur.com",
    "sender": "bounce+2ba51a.211f8-marie.fini=pur-mail.net@e.artisanparfumeur.com",
    "subject": "Signatures intemporelles",
    "message_size": 87879,
    "recipients": [
    {
      "recipient": "marie.fini@pur-mail.net",
      "stamp_filter": 1727254241,
      "verdict": "tagged",
      "action": "pass",
      "stamp_delivery": 1727254244,
      "delivery_to_ip": "172.16.240.194",
      "delivery_to_name": "mails.security-mail.net",
      "delivery_status": "sent",
      "delivery_info": "250 2113927973 message accepted for delivery",
      "filter_info": "DKIM_SIGNED=0.1, DKIM_VALID=-0.5, DKIM_VALID_AU=-0.5, DMARC_PASS=-0.5, HEAD_NEWS=-0.5, SPF_PASS=-0.1, S_ENVFROM_LONG_40=0.5, S_FROM_GREY_MINUS_1=-1, T_REMOTE_IMAGE=0.42, URIBL_SECURITYMAIL=10",
      "antispam_score": 7.914
    }
    ],
    "message_parts": [
    {
      "name": "",
      "placement": 1,
      "sha1": "2aa02691eeb412a8ef371a312177bba525c1ee33",
      "size": 18528,
      "content_type": "text/plain",
      "qrcode": false
    },
    {
      "name": "",
      "placement": 2,
      "sha1": "240171907cc95ab46cd2b4549ebd81dd48ac5d12",
      "size": 60556,
      "content_type": "text/html",
      "qrcode": false
    },
    {
      "name": "image001.png",
      "placement": 3,
      "sha1": "bb238282b1a443121271a0d4c71c5efbdd8fbb07",
      "size": 15473,
      "content_type": "image/png",
      "qrcode": false
    }
    ]
  }
  ]
}