Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Grand Guide · Lecture en ligne

FortiMail : modes opératoires CLI/SSH — référence complète

Référence FortiMail CLI/SSH : commandes FortiOS pour configurer le filtrage antispam, les profils, les politiques et les options avancées via SSH sur FortiMail 7.4/7.6/8.0.

22 min de lecture
... mots
100% Gratuit
Chapitre en cours
FortiMail : modes opératoires CLI/SSH — référence complète
Page 1

L'interface CLI de FortiMail expose l'ensemble des paramètres de configuration sous forme de commandes FortiOS structurées. Elle permet une automatisation et une reproductibilité impossibles via l'interface graphique : export de configuration, déploiement cohérent sur plusieurs appliances, diagnostic en temps réel et scripting de maintenance. Cette référence CLI/SSH documente les commandes les plus utiles pour un administrateur FortiMail, organisées par domaine fonctionnel : profils antispam, politiques de session, gestion des utilisateurs, diagnostics de flux et tuning des moteurs de détection. Les commandes sont validées sur FortiMail 7.4, 7.6 et 8.0 ; les différences inter-versions sont signalées. Chaque bloc est accompagné d'une explication du contexte d'utilisation et des précautions à prendre avant d'exécuter les commandes en production.

FortiMail — MODES OPÉRATOIRES CLI / SSH

Complément de la fiche de durcissement antispam — miroir des MO GUI

⚠️ AVERTISSEMENT — À LIRE AVANT TOUTE EXÉCUTION

Aucune commande de ce document ne doit être exécutée sans contrôle préalable par ? dans son contexte, sur la version cible.

Les noms d’options CLI de FortiMail varient d’une branche à l’autre. Deux niveaux de fiabilité sont signalés dans tout le document :

  • # ✔ — syntaxe vérifiée dans la documentation Fortinet.
  • # ⚠ — reconstitution plausible : l’option existe fonctionnellement, mais son nom exact doit être confirmé par set ? avant usage.

La référence faisant foi est la FortiMail CLI Reference de votre version exacte, sur docs.fortinet.com. Ce document est une aide à la navigation, pas une source de vérité.

Base : 7.4 / 7.6 / 8.0.

Conventions et réflexes CLI : - Connexion : ssh admin@<ip-fortimail> — SSH activé et restreint aux trusted hosts (MO-15). - config <bloc>edit <objet>set <option> <valeur>nextend. - ? liste les options du contexte ; Tab auto-complète ; show affiche la configuration non-défaut ; show full-configuration affiche tout ; get donne les valeurs effectives. - Les changements CLI sont immédiats, il n’y a pas de « commit ». Sauvegarder avant toute modification (MO-15 §D). - En cluster HA, travailler sur le maître : la configuration se synchronise. - Les actions antispam se configurent en associant des profils d’action (profile antispam-action) à chaque technique.

MO-01 — Licence et connectivité FortiGuard

# ✔ État général : version, licences AS/AV, numéro de série
get system status

# ✔ État des serveurs de rating FortiGuard AntiSpam — le test clé
diagnose debug rating

# ✔ Debug du démon de mise à jour
diagnose debug application updated -1
diagnose debug enable
# ... observer, puis couper impérativement :
diagnose debug disable

# ✔ Tests réseau vers FortiGuard
execute ping service.fortiguard.net
execute nslookup guard.fortinet.net
execute telnettest service.fortiguard.net:443

# ✔ Forcer une mise à jour immédiate des définitions
execute update

# ✔ Configuration du service de rating antispam
config system fortiguard antispam
    get                              # voir les options disponibles sur votre version
    set port 443                     # tester 443, sinon 8888, sinon 53
end

# ⚠ Planification des mises à jour — bloc et options selon version
config system fortiguard antivirus
    set ?
end

Critère de succès : diagnose debug rating liste des serveurs avec un temps de réponse et sans échec, et les logs antispam montrent des verdicts FortiGuard.

Lecture des flags de diagnose debug rating : D = serveur trouvé par résolution DNS du hostname · I = serveur ayant reçu la dernière requête INIT · F = serveur en échec, ne répond plus · T = serveur en cours de mesure de temps de réponse.

MO-01bis — Vérifier que l’IP réelle du client SMTP est visible

Sans ce contrôle, la sender reputation et la FortiGuard IP reputation peuvent noter un load-balancer au lieu du spammeur. Deux couches neutralisées, sans erreur visible.

# ✔ Observer les IP sources réelles vues par le MTA
diagnose debug application smtp -1
diagnose debug enable
# ... laisser tourner quelques secondes sur du trafic entrant, observer les IP clientes
diagnose debug disable

# ✔ Capture ciblée pour confirmer
diagnose sniffer packet port1 "tcp port 25" 4 50

Si toutes les connexions proviennent d’une même IP interne, un équipement amont masque la source.

Correction 8.0 : identification de l’IP client d’origine via en-tête HTTP, configurable sous System > Configuration > Web Service (GUI). Sinon, reconfigurer l’équipement amont en mode transparent.

MO-02 — Audit et purge des safe lists

# ⚠ Gestion des listes système, domaine et utilisateur
# La syntaxe exacte des sous-commandes varie : commencer par
execute safelist ?
execute blocklist ?

# ✔ Chercher les règles d'accès trop permissives
config policy access-control receive
    show
end
# → repérer toute entrée « set action safe » ou « set action relay »
#   dont le client ou l'expéditeur est générique, puis :
config policy access-control receive
    edit <id>
        set action receive
    next
end

Les deux bypass silencieux du profil AntiSpam — à vérifier sur chaque profil :

config profile antispam
    edit "<profil>"
        show | grep -i bypass
        show | grep -i scan
        # ⚠ `Bypass scan on SMTP authentication` est ACTIVÉ PAR DÉFAUT :
        #    il doit être désactivé sur les profils entrants.
        # ⚠ `Apply default action without scan upon policy match` doit être désactivé.
        #    Noms exacts : set ?
    next
end

# ✔ 8.0 — le Reply-To ne doit pas être utilisé avec les safe lists (surface d'évasion)
config antispam setting
    set safelist-check-reply-to disable
end

MO-03 — Profil de session entrant SESSION_ENTRANT_DURCI

config profile session
    edit "SESSION_ENTRANT_DURCI"

        # --- Réputation locale de l'expéditeur ---
        # ⚠ noms d'options à confirmer par `set ?`
        set sender-reputation-status enable
        set sender-reputation-throttling-score 50
        set sender-reputation-tempfail-score 70
        set sender-reputation-reject-score 80

        # --- Contrôles HELO/EHLO et connexion ---
        set helo-require enable                  # ⚠
        # Level 2, après mesure :
        # set helo-domain-verification enable    # ⚠ HELO doit être un FQDN valide
        set connection-limit 60                  # ⚠ connexions / client / 30 min
        set idle-timeout 60                      # ⚠

        # --- Limites SMTP ---
        set session-message-limit 20             # ⚠
        set recipient-limit 50                   # ⚠

        # --- Validation expéditeur ---
        set sender-domain-verification enable    # ⚠ MAIL FROM : domaine avec A/MX
        # Level 2 : PTR — privilégier le tempfail 4xx au rejet 5xx
        # set reverse-dns-verification enable    # ⚠

        # --- AUTH interdite sur ce profil entrant ---
        set smtp-auth-status disable             # ⚠

        # --- Aucun bypass ---
        show                                     # vérifier qu'aucune option bypass-* n'est à enable
    next
end

Sur les seuils de sender reputation. Les valeurs 50/70/80 sont un point de départ, pas une cible. Les laisser une semaine, puis lire la distribution réelle des scores dans Monitor > Reputation > Sender Reputation et réajuster. Des seuils repris d’un document sans mesure produisent soit aucun effet, soit des faux positifs.

MO-04 — Profil de session sortant SESSION_SORTANT

config profile session
    edit "SESSION_SORTANT"
        set smtp-auth-status enable              # ⚠
        # set smtp-auth-tls-only enable          # ⚠ exiger TLS pour l'AUTH
        set session-message-limit 50             # ⚠
        set recipient-limit 100                  # ⚠
        set greylist disable                     # ⚠

        # ⚠ Limites d'envoi par expéditeur authentifié — LE réglage anti-compromission.
        #    Bloc et options selon version : chercher « sender rate control »
        #    Objectif : plafonner messages et destinataires par expéditeur et par heure,
        #    avec notification administrateur au dépassement.
        set ?
    next
end

C’est ce réglage qui transforme une compromission de compte en incident de dix minutes plutôt qu’en listing RBL de trois jours. Ne pas le sauter.

MO-05 — Greylisting

# ⚠ Réglages globaux — bloc selon version
config antispam greylist ?
    # options recherchées : délai initial, durée de rétention, capacité

# ⚠ Exemptions : OTP/MFA par mail, partenaires critiques sensibles au délai
config antispam greylist exempt
    edit 1
        set sender-pattern "*@banque-otp-exemple.fr"
    next
end

# ⚠ Activation dans le profil de session entrant
config profile session
    edit "SESSION_ENTRANT_DURCI"
        set greylist enable
    next
end

Level 2 assumé. Sur un flux déjà couvert par sender reputation et FortiGuard IP reputation, le gain est marginal — les botnets réessaient — alors que le coût en latence perçue est immédiat.

MO-06 — Bounce Verification (BATV)

# ⚠ Création et activation de la clé — bloc selon version
config antispam bounce-verification ?
    # créer une clé aléatoire ≥ 16 caractères, statut actif
    # activer le tagging et la vérification
    # pour l'action : sélectionner « use antispam profile settings »

# ⚠ Retirer les bypass sur chaque domaine
config domain
    edit "votredomaine.fr"
        config domain-setting
            set bypass-bounce-verification disable
        end
    next
end

# ⚠ Retirer le bypass dans chaque profil de session
config profile session
    edit "SESSION_ENTRANT_DURCI"
        set bypass-bounce-verification disable
    next
end

Pré-requis impératif : tout le flux sortant et entrant passe par le FortiMail, sinon les DSN légitimes de vos propres envois seront rejetés.

MO-07 — Vérification des destinataires via LDAP

# ⚠ A. Profil LDAP vers l'AD
config profile ldap
    edit "LDAP_AD_INTERNE"
        set server 10.0.0.10
        set port 636
        set secure ldaps
        set base-dn "DC=votredomaine,DC=local"
        set bind-dn "CN=svc-fortimail,OU=Services,DC=votredomaine,DC=local"
        set bind-password <motdepasse>
        set query-filter "(|(mail=$m)(proxyAddresses=smtp:$m))"
    next
end

# ✔ Debug LDAP si la requête échoue
diagnose debug application ldap -1
diagnose debug enable
diagnose debug disable

# ⚠ B. Activer la vérification sur le domaine
config domain
    edit "votredomaine.fr"
        config domain-setting
            set recipient-verification ldap
            set recipient-verification-profile "LDAP_AD_INTERNE"
        end
    next
end

# ✔ C. Test de bout en bout
# Depuis l'extérieur : RCPT TO:<[email protected]> → 550 attendu
diagnose debug application smtp -1
diagnose debug enable
# ... reproduire le test, lire le refus
diagnose debug disable

Ne pas passer en production tant que le test avec une adresse existante ne réussit pas ET que le test avec une adresse inexistante n’échoue pas. Un filtre LDAP mal formé qui répond « non trouvé » à tout coupe l’intégralité du courrier entrant.

MO-08 — Profil AntiSpam durci AS_ENTRANT_DURCI

Pré-requis : créer d’abord les profils d’action (MO-09), référencés ici.

config profile antispam
    edit "AS_ENTRANT_DURCI"
        set comment "Profil durci - entrant"

        # ================== SCAN OPTIONS ==================
        # ⚠ Les deux réglages les plus importants du profil.
        #    `Bypass scan on SMTP authentication` est ACTIVÉ PAR DÉFAUT.
        set scan-bypass-on-auth disable          # ⚠ nom exact : set ?
        # ⚠ `Apply default action without scan upon policy match` doit rester désactivé
        set scan-pdf enable                      # ⚠ prérequis du scan QR dans les PDF
        set scan-max-size 10240000               # ⚠

        # ================== FORTIGUARD ==================
        # ✔ IP reputation : level 1 = pire réputation, level 3 = mauvaise
        # ⚠ noms d'options exacts à confirmer
        set fortiguard-antispam enable
        set ip-reputation-level1-status enable
        set action-ip-reputation-level1 "ACT_REJECT"
        set ip-reputation-level2-status enable
        set action-ip-reputation-level2 "ACT_QUARANTAINE"
        set ip-reputation-level3-status enable
        set action-ip-reputation-level3 "ACT_QUARANTAINE"

        # URL Category — catégories de rating FortiGuard sur les URI du corps.
        # ATTENTION : si IP reputation ET URL category détectent, c'est l'action
        # de URL category qui prévaut. La régler au moins aussi fermement.
        set url-filter-status enable             # ⚠
        set url-filter "URLF_DURCI"              # ⚠ profil URL filter (MO-18bis)
        set action-url-filter "ACT_QUARANTAINE"  # ⚠

        # Level 2 : étend la requête à toutes les IP publiques des lignes Received:
        # set deepheader-check-ip enable         # ⚠ activer après mesure des FP

        # ✔ Spam outbreak protection
        set spam-outbreak-protection enable
        # Rappels de comportement :
        #  - ne se déclenche QUE si le contrôle FortiGuard n'a rien retourné ;
        #  - une action « reject » bascule en quarantaine système sur un message retenu ;
        #  - les IP en safe list et les règles ACL RELAY en sont exemptées.
        # File à superviser : Monitor > Mail Queue > Spam Outbreak

        # ================== AUTHENTIFICATION EXPÉDITEUR ==================
        # ⚠ noms d'options à confirmer
        set spf-checking enable
        set spf-fail-status enable
        set action-spf-fail "ACT_QUARANTAINE"    # passer à ACT_REJECT après 2 semaines
        set spf-soft-fail-status enable
        set action-spf-soft-fail "ACT_TAG"
        # ne PAS activer le blocage sur « none » : trop de domaines légitimes sans SPF

        set dkim-checking enable
        set dkim-fail-status enable
        set action-dkim-fail "ACT_TAG"           # jamais de rejet sec : les listes cassent DKIM

        set dmarc-checking enable
        set dmarc-policy-reject-status enable
        set action-dmarc-policy-reject "ACT_REJECT"
        set dmarc-policy-quarantine-status enable
        set action-dmarc-policy-quarantine "ACT_QUARANTAINE"
        set dmarc-policy-none-status enable
        set action-dmarc-policy-none "ACT_TAG"
        set arc-status enable                    # préserve les listes de diffusion

        # ================== BUSINESS EMAIL COMPROMISE ==================
        # ✔ Sender alignment : compare From: d'en-tête au domaine d'autorisation
        #   ET au Reply-To. Disponible sur toutes les versions couvertes.
        set sender-alignment-status enable       # ⚠
        set action-sender-alignment "ACT_QUARANTAINE"

        set impersonation-analysis enable        # ⚠
        set impersonation "IMPERSONATION_VIP"
        set action-impersonation-analysis "ACT_QUARANTAINE"

        set cousin-domain enable                 # ⚠
        set cousin-domain-profile "COUSIN_DOMAINES"
        set cousin-domain-scan-option header-detection body-detection
        set action-cousin-domain "ACT_QUARANTAINE"

        # Weighted analysis : scoring pondéré (cousin domains, caractères suspects,
        # sender alignment, mots-clés d'action, catégories d'URL) avec seuil global.
        # DÉMARRER EN TAG. Voir MO-13bis.
        set weighted-analysis "WA_ANALYSE_PONDEREE"   # ⚠
        set action-weighted-analysis "ACT_TAG"        # ⚠

        # ================== ANALYSES LOCALES ==================
        set heuristic enable                     # ⚠
        # Noter la valeur de seuil PAR DÉFAUT avant toute modification.
        # Ajuster ensuite par petits pas, avec mesure des FP entre chaque pas.
        set action-heuristic "ACT_QUARANTAINE"

        set behavior-analysis enable             # ⚠
        set action-behavior-analysis "ACT_QUARANTAINE"

        set header-analysis enable               # ⚠
        set action-deep-header "ACT_QUARANTAINE"

        set image-spam enable                    # ⚠ prérequis du scan QR
        set action-image-spam "ACT_QUARANTAINE"

        set bayesian enable                      # ⚠ moteur d'appoint uniquement
        set action-bayesian "ACT_QUARANTAINE"    # jamais ACT_REJECT

        set suspicious-newsletter-status enable  # ⚠
        set action-suspicious-newsletter "ACT_QUARANTAINE"
        set newsletter-status enable
        set action-newsletter "ACT_TAG_NEWS"

        # ================== DNSBL / SURBL ==================
        # Activer d'abord le SURBL FortiGuard (section FortiGuard, sans contrainte
        # de résolveur). Les serveurs tiers ci-dessous exigent un résolveur dédié :
        # Spamhaus ET SURBL refusent les grands résolveurs publics.
        set dnsbl enable                         # ⚠
        config dnsbl-server
            edit "zen.spamhaus.org"
            next
        end
        set action-rbl "ACT_REJECT"

        set surbl enable                         # ⚠
        config surbl-server
            edit "multi.surbl.org"
            next
        end
        set action-surbl "ACT_QUARANTAINE"

        # ================== DICTIONNAIRES ==================
        set dictionary enable                    # ⚠
        set dictionary-type group
        set dictionary-group "DICT_GROUPE"
        set dict-score 4                         # ⚠
        set action-dictionary "ACT_QUARANTAINE"

        show                                     # vérifier avant de sortir
    next
end

# ✔ Durée de rétention du spam outbreak, en minutes (paramètre système)
config system fortiguard antispam
    set outbreak-protection-period 60
end

MO-08bis — Scan des QR codes (quishing)

Le QR code ne contient aucune URL dans le corps du message : sans ce scan, tout le contrôle d’URL est contourné.

# ⚠ Prérequis : activer « attachment image » dans les préférences antispam
config antispam settings
    get                          # repérer les options d'image et de QR code
    # 8.0 : scan des QR codes dans les PDF et les archives PDF —
    #       options d'activation et de nombre maximal de pages analysées
    set ?
end

# ⚠ Dans le profil antispam
config profile antispam
    edit "AS_ENTRANT_DURCI"
        set scan-pdf enable
        set image-spam enable
    next
end

# ✔ Mesurer la charge avant/après : le scan d'images est le traitement
#   le plus gourmand du produit.
get system performance
diagnose system top

MO-09 — Profils d’action AntiSpam et quarantaine

config profile antispam-action                   # ⚠ noms d'options à confirmer
    edit "ACT_QUARANTAINE"
        set action quarantine                    # quarantaine personnelle
        set header-insertion-status enable
        # Utiliser un préfixe PROPRE à votre organisation.
        # NE PAS utiliser X-FEAS-* : préfixe réservé à FortiMail (X-FEAS-Spam-outbreak),
        # une collision rend l'analyse post-incident ambiguë.
        set header-insertion-name "X-ORG-Spam-Verdict"
        set header-insertion-value "quarantine"
    next
    edit "ACT_REJECT"
        set action reject                        # rejet en session 5xx
    next
    edit "ACT_DISCARD"
        set action discard                       # suppression silencieuse
        # À préférer sur les verdicts de type signature : un rejet 5xx
        # confirme au spammeur que l'adresse existe.
    next
    edit "ACT_TAG"
        set action none
        set subject-tagging-status enable        # ⚠
        set subject-tagging-text "[SUSPECT]"
    next
    edit "ACT_TAG_NEWS"
        set action none
        set subject-tagging-status enable
        set subject-tagging-text "[NEWSLETTER]"
    next
end

# ⚠ Digest de quarantaine — planification et contenu
config antispam quarantine-report
    get                                          # voir les options réelles
    # Objectif : 2 envois/jour, lien « release » actif,
    # lien « safelist sender » DÉSACTIVÉ pendant la phase de durcissement.
    set ?
end

# ⚠ Rétention de la quarantaine
config mailsetting systemquarantine
    get
    set ?                                        # rétention 14 à 30 jours, quota disque
end

# ⚠ 8.0 — re-scan à la libération (contenu et DLP)
#    Security > Quarantine > Quarantine Control en GUI ; bloc CLI : chercher
#    « quarantine control ». Sans cela, libérer un message libère aussi sa pièce jointe.

MO-10 — Politiques IP et Recipient

# ---- IP Policies ----
config policy ip                                 # ⚠
    edit 1                                       # internes sortants
        set client "10.0.0.0/24"
        set session-profile "SESSION_SORTANT"
        set status enable
    next
    edit 2                                       # Internet entrant
        set client "0.0.0.0/0"
        set session-profile "SESSION_ENTRANT_DURCI"
        # NE PAS écraser les profils des recipient policies :
        set precedence-over-recipient-policy disable   # ⚠ nom à confirmer
        set status enable
    next
    # réordonner si besoin : move <id> after <id>
end

# ---- Recipient Policies ----
config policy recipient                          # ⚠
    edit 1
        set direction incoming
        set recipient-pattern "*@votredomaine.fr"
        set antispam-profile "AS_ENTRANT_DURCI"
        set antivirus-profile "AV_ENTRANT_DURCI"
        set content-profile "CONTENT_ENTRANT"
        set status enable
    next
    edit 10                                      # sortant : profil AS obligatoire aussi
        set direction outgoing
        set sender-pattern "*@votredomaine.fr"
        set antispam-profile "AS_SORTANT"
        set status enable
    next
end

# 8.0 — « sender exclusion » configurable dans les recipient policies :
# préférer ce mécanisme à une safe list globale pour traiter un faux positif récurrent.

# Contrôle final : aucune politique sans profil AS ne doit matcher avant
config policy recipient
    show
end

MO-11 — Profil de contenu (pièces jointes dangereuses)

config file filter                               # ⚠ structure exacte : config ? / set ?
    edit "FF_PJ_DANGEREUSES"
        # cible : exe js vbs vbe scr bat cmd ps1 hta lnk iso img jar cab msi reg chm wsf
    next
end

config profile content                           # ⚠
    edit "CONTENT_ENTRANT"
        set attachment-filter enable
        set archive-scan-depth 2
        set encrypted-archive-action quarantine
        # Options licenciées (Level 2) :
        # set url-rewrite enable                 # click protection
        # set content-disarm enable              # CDR
        # 8.0 : le CDR peut retirer les métadonnées Office et les contenus HTML cachés
        #       (textes et images transparents, minuscules ou dissimulés).
        # 8.0 : les pièces jointes protégées par mot de passe peuvent déclencher
        #       une demande de mot de passe à l'utilisateur avant scan.
    next
end

MO-12 — DKIM sortant

config domain                                    # ⚠
    edit "votredomaine.fr"
        config domain-setting
            config dkim
                edit "fm2026"
                    set status enable
                next
            end
            set dkim-signing enable
        end
    next
end

# Récupérer la clé publique à publier en DNS
show domain votredomaine.fr                      # section dkim → clé publique
# Publier : fm2026._domainkey.votredomaine.fr  TXT  "v=DKIM1; k=rsa; p=<clé>"

MO-13 — Impersonation, cousin domains, anti-spoofing

# ⚠ Profil d'impersonation : mapping display name → adresse légitime
config profile impersonation
    edit "IMPERSONATION_VIP"
        config entries                           # ⚠ nom du sous-bloc : config ?
            edit 1
                set display-name-pattern "Jean Dupont"
                set email-address "[email protected]"
            next
            edit 2
                set display-name-pattern "DUPONT Jean"
                set email-address "[email protected]"
            next
        end
    next
end

# ⚠ Mode dynamique : il EXIGE d'activer d'abord le Mail Statistics Service,
#    DÉSACTIVÉ PAR DÉFAUT. Sans cette activation, la fonction ne produit rien —
#    c'est la raison la plus fréquente pour laquelle elle semble inopérante.
#    Chercher le bloc correspondant : config system ? / mail-statistics

# ⚠ Profil cousin-domain
config profile cousin-domain
    edit "COUSIN_DOMAINES"
        config entries
            edit 1
                set domain "votredomaine.fr"
            next
        end
    next
end

Anti-spoofing de vos domaines depuis Internet — 8.0, licence advanced management :

# ✔ L'ACL peut matcher l'expéditeur sur l'enveloppe, sur le From: d'en-tête, ou les deux.
#   C'est ce qui permet de bloquer l'usurpation AFFICHÉE, celle que voit l'utilisateur.
config policy access-control receive
    edit <id>
        set sender-option header-from            # envelope-from | envelope-or-header-from | header-from
        set action reject
    next
end

⚠️ Avant activation : inventorier les émetteurs SaaS légitimes qui envoient en votre nom — paie, marketing, ticketing — et les intégrer à votre SPF/DKIM, ou créer pour leurs IP une règle RECEIVE au-dessus. C’est la cause n°1 d’incident sur cette mesure.

MO-13bis — Weighted analysis

# ⚠ Profil de scoring pondéré — bloc `config profile weighted-analysis`
config profile weighted-analysis
    edit "WA_ANALYSE_PONDEREE"
        get                                      # lister les signaux et leurs poids
        # Signaux évalués : cousin domains, caractères suspects, sender alignment,
        # mots-clés d'action, catégories d'URL.
        #
        # Réglage recommandé :
        #  - augmenter le poids de cousin domain, suspicious characters, URL categories ;
        #  - laisser bas celui des action keywords (le courrier commercial légitime
        #    est prescriptif par nature : risque de FP élevé) ;
        #  - fixer le seuil global pour exiger AU MOINS DEUX signaux distincts.
        set ?
    next
end

Association dans le profil AntiSpam (MO-08), en action tag pendant deux semaines, puis relevé des déclenchements par signal, ajustement des poids, et bascule en quarantaine.

MO-14 — Journalisation et alertes

# ⚠ Logs locaux
config log setting local
    set status enable
    set log-level information
    set ?                                        # catégories : antispam / antivirus / history / event
end

# ⚠ Export syslog / SIEM
config log setting remote
    edit 1
        set status enable
        set server 10.0.0.50
        set port 514
        set log-level information
    next
end

# ⚠ Alertes mail : destinataires puis catégories
config log alertemail recipient
    edit 1
        set email "[email protected]"  # boîte d'équipe, jamais une personne seule
    next
end
config log alertemail setting
    get                                          # voir les catégories réellement disponibles
    set ?
end

Catégories à couvrir : expiration de licence, échec de mise à jour FortiGuard, quota disque, seuil de file d’attente différée, événements HA, événements critiques.

MO-15 — Durcissement administratif et sauvegardes

# ⚠ A. Comptes admin : trusted hosts et droits
config system admin
    edit "admin-jdupont"
        set trusted-host 10.10.99.0/24           # parfois trusthost1/2/3
        set accprofile "profil_lecture_seule"    # config system accprofile
        # MFA : FortiToken, RADIUS (RADIUS sur TLS supporté en 8.0),
        #       SAML, ou FortiIdentity Cloud (8.0)
        set ?
    next
end

# ⚠ Politique de mots de passe
config system password-policy
    set status enable
    set min-length 14
end

# ⚠ B. Services par interface : ne laisser que le strict nécessaire
config system interface
    edit "port1"                                 # interface exposée
        set allowaccess smtp https               # retirer http, ssh, ping, telnet
    next
    edit "port2"                                 # interface d'administration (VLAN admin)
        set allowaccess https ssh ping
    next
end

# ⚠ C. Global
config system global
    set admin-idle-timeout 10
    set ?
end

# ✔ D. Sauvegarde de configuration — AVANT et APRÈS toute intervention
execute backup config scp <fichier> <user@serveur:/chemin/> <port>
# ⚠ Sauvegarde planifiée : bloc et options selon version

Tester au moins une restauration par an. Une sauvegarde jamais restaurée n’est pas une sauvegarde.

MO-16 — Tests de validation

# ✔ 1. GTUBE — envoyer depuis l'extérieur un message contenant :
#    XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
#    puis observer le verdict :
diagnose debug application smtp -1
diagnose debug enable
# ... envoyer le test, observer
diagnose debug disable

# ✔ 2. Open relay — depuis un poste EXTERNE, jamais depuis le FortiMail :
#    telnet <ip-publique> 25
#    HELO test / MAIL FROM:<[email protected]> / RCPT TO:<[email protected]>
#    → attendu : 554 5.7.1 Relaying denied

# ✔ 3. Files d'attente
diagnose system mailqueue
# ⚠ execute cleanqueue purge SANS DISCERNEMENT — à proscrire en incident,
#   vous perdriez le courrier légitime en attente.

# ✔ 4. Capture réseau ciblée
diagnose sniffer packet port1 "tcp port 25 and host 203.0.113.10" 4 100

# ✔ 5. Charge et santé
diagnose system top
get system performance
diagnose system disk-usage

MO-17 — Analyse d’un spam passé (routine)

# 1. La recherche fine est plus confortable en GUI (Monitor > Log > History
#    puis Cross Search). En CLI, exploiter l'export syslog/SIEM (MO-14).

# ✔ 2. Vérifier en temps réel le traitement d'un envoi identique
diagnose debug application smtp -1
diagnose debug enable
# ... faire renvoyer un échantillon ; observer session, verdicts, politique matchée
diagnose debug disable

# 3. Points de contrôle systématiques
diagnose debug rating                            # ✔ FortiGuard répond-il ?
config profile antispam
    edit "AS_ENTRANT_DURCI"
        show | grep -i bypass                    # bypass sur authentification ?
        show | grep -i scan                      # « apply default action without scan » ?
    next
end
config policy recipient
    show                                         # la bonne politique porte-t-elle le bon profil AS ?
end
config policy ip
    show                                         # « take precedence » désactivée ?
end

# 4. Si scanné mais jugé propre :
#    - soumettre le .eml sur le portail FortiGuard ;
#    - ajouter le domaine en URL rating override (MO-18bis) ;
#    - ajuster les poids du weighted analysis (MO-13bis) ;
#    - enrichir le dictionnaire ou le profil d'impersonation.

MO-18bis — Threat feeds et notation locale d’URL

# ⚠ Threat feed — types disponibles : IP, et « URL filter (catégorie FortiGuard) ».
#    Le type URL accepte un URI par ligne, l'encodage IDN et UTF-8,
#    et les wildcards * en début ou fin de chaîne.
config system threat-feed
    edit "TF_SOC_IP"
        set status enable
        set type ?                               # lister les types réellement disponibles
        set uri "https://<serveur-interne>/iocs-ip.txt"
        set refresh-rate 5                       # minutes
    next
    edit "TF_SOC_URL"
        set status enable
        set type ?
        set uri "https://<serveur-interne>/iocs-url.txt"
        set refresh-rate 5
    next
end

# ⚠ Association : le feed IP dans la section FortiGuard du profil antispam ;
#    le feed URL via la catégorie d'URL à laquelle il est rattaché.
config profile antispam
    edit "AS_ENTRANT_DURCI"
        set ?                                    # options *-threat-feed
    next
end

# ⚠ Profil URL filter et notation locale
config profile url-filter
    edit "URLF_DURCI"
        # catégories : phishing, malicious websites, spam URLs,
        # newly observed domains, newly registered domains, catégories personnalisées
        set ?
    next
end

Bénéfice du threat feed interne : bloquer un indicateur revient à ajouter une ligne dans un fichier texte versionné, sans modification de configuration sous pression et sans règle orpheline oubliée.

Annexe — Aide-mémoire de diagnostic

Besoin Commande
Version, licences get system status ✔
Serveurs FortiGuard AS diagnose debug rating ✔
Forcer une mise à jour execute update ✔
Test DNS / DNSBL execute nslookup 2.0.0.127.zen.spamhaus.org ✔
Test de port distant execute telnettest <hôte>:<port> ✔
Debug SMTP live diagnose debug application smtp -1 + diagnose debug enable/disable ✔
Debug LDAP diagnose debug application ldap -1 ✔
Files d’attente diagnose system mailqueue ✔
Capture réseau diagnose sniffer packet <if> "<filtre bpf>" 4 100 ✔
Charge diagnose system top, get system performance ✔
Disque diagnose system disk-usage ✔
Config d’un bloc show dans le contexte, show full-configuration ✔
Sauvegarde execute backup config scp ... ✔
HA diagnose system ha ⚠, execute ha failover ⚠ (test planifié)

Rappel de prudence : toujours couper les debugs (diagnose debug disable) après usage — charge CPU et volume de logs. En cluster HA, travailler sur le maître.

Points clés à retenir

  • Utiliser diagnose debug application pour capturer les flux en temps réel sans impact sur la production.
  • Préfixer chaque session SSH de maintenance par execute backup config pour sauvegarder l'état courant.
  • Les commandes config antispam profile permettent de créer des profils plus granulaires qu'en GUI.
  • La commande diagnose smtp session list donne la vue en temps réel des connexions SMTP actives.
  • Versionner les scripts de configuration CLI dans un dépôt Git pour tracer les évolutions de configuration.
Aller au chapitre :

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis