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, diagnosti….
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é parset ?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> → next → end. - ? 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 applicationpour capturer les flux en temps réel sans impact sur la production. - Préfixer chaque session SSH de maintenance par
execute backup configpour sauvegarder l'état courant. - Les commandes
config antispam profilepermettent de créer des profils plus granulaires qu'en GUI. - La commande
diagnose smtp session listdonne 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.
À propos de l'auteur
Ayi NEDJIMI
Auditeur Senior Cybersécurité & Consultant IA
Expert Judiciaire — Cour d'Appel de Paris
Habilitation Confidentiel Défense
[email protected]
Ayi NEDJIMI est un vétéran de la cybersécurité avec plus de 25 ans d'expérience sur des missions critiques. Ancien développeur Microsoft à Redmond sur le module GINA (Windows NT4) et co-auteur de la version française du guide de sécurité Windows NT4 pour la NSA.
À la tête d'Ayi NEDJIMI Consultants, il réalise des audits Lead Auditor ISO 42001 et ISO 27001, des pentests d'infrastructures critiques, du forensics et des missions de conformité NIS2 / AI Act.
Conférencier international (Europe & US), il a formé plus de 10 000 professionnels.
Domaines d'expertise
Ressources & Outils de l'auteur
Articles connexes
FortiMail MO-18 : répondre à une vague de spam active
Une vague de spam active — qu'elle soit entrante ou sortante — génère une pression opérationnelle immédiate sur les équipes messagerie et sécurité. En cas de spam entrant massif, les files d'attente s'engorgent et les utilisateurs reçoivent des vagues de messages frauduleux ; en cas de spam sortant,…
FortiMail : modes opératoires GUI pas-à-pas
Configurer FortiMail via l'interface graphique requiert de naviguer dans une arborescence de menus dense, dont la logique n'est pas toujours évidente pour les équipes qui découvrent l'appliance. Ce recueil de 18 modes opératoires GUI a été conçu pour les administrateurs système et les ingénieurs séc…
FortiMail : détecter le spam et le phishing en français
Les campagnes de spam et de phishing rédigées en français présentent des caractéristiques linguistiques et infrastructurelles spécifiques que les moteurs de filtrage généralistes ne détectent pas toujours efficacement. FortiMail offre les leviers nécessaires pour construire une détection adaptée au …
Un projet cybersécurité ? Parlons-en.
Pentest, conformité NIS 2, ISO 27001, audit IA, RSSI externalisé… nos experts répondent sous 24h pour évaluer votre besoin et vous proposer un accompagnement sur mesure.
Commentaires
Aucun commentaire pour le moment. Soyez le premier à commenter !
Laisser un commentaire