Aller au contenu principal

Niveau 3 · Ajuster

Niveau 3
Adapter la protection au site

Un WAF utile bloque les attaques sans gêner vos clients. Kokiris fait l'essentiel de ces réglages pendant la phase de training. Ce niveau vous apprend à corriger un faux positif, à exempter du trafic de confiance et à limiter les abus quand votre site évolue.

6 chapitres · ≈ 55 min · 0/6 terminé

3.1 Corriger un faux positif​

Durée 15 minPrérequis chapitre 2.4Rôle éditeur
Objectifs
  • Choisir la portée la plus étroite possible pour une correction.
  • Corriger plusieurs règles et plusieurs champs en une fois, et relire la règle générée.
  • Ne corriger que sous conditions, par exemple pour un seul outil.

Un faux positif est une requête légitime que le WAF prend pour une attaque. Exemple courant : un éditeur de contenu qui enregistre du HTML dans un champ de formulaire.

PortéeEffetQuand l'utiliser
Ignorer un champ précisLes règles ignorent un seul paramètre, par exemple ARGS:content.Le cas le plus fréquent. Choisissez-le d'abord.
Seulement sur un cheminLes règles sont coupées sous un chemin, par exemple /wp-admin/.Un outil d'administration envoie des données inhabituelles.
Désactiver complètementLes règles ne s'appliquent plus du tout sur le site, ou partout.En dernier recours, quand la règle ne sert à rien pour ce site.
  1. Dans Journaux, ouvrez la requête : 🔍 Détails, puis 🔬 Radiographie. Vous voyez le champ en cause, et si une correction le couvre déjà.
  2. Cliquez sur Corriger ce faux positif : le formulaire Corriger une règle s'ouvre, rempli avec le champ en cause et les règles qui ont réagi sur lui. Depuis une ligne des journaux, Corriger ce blocage ouvre RuleForge, lui aussi déjà rempli.
  3. Choisissez la portée la plus étroite et indiquez une raison. Ajoutez une date d'expiration si la correction est provisoire : à l'heure dite, elle cesse d'agir d'elle-même, sans Appliquer.
  4. Enregistrez, puis appliquez. Rejouez la requête légitime pour vérifier qu'elle passe.

Plusieurs règles, plusieurs champs​

Un même champ fait souvent réagir plusieurs règles. Le champ Règles accepte plusieurs numéros et Champs à ignorer plusieurs champs, séparés par des virgules : une seule correction couvre chaque combinaison. Avant d'enregistrer, le formulaire compte les combinaisons et affiche la Règle générée, c'est-à-dire exactement ce que le WAF recevra.

Formulaire Corriger une règle : règles 941100 et 941160, portée Ignorer un champ précis, champs ARGS et ARGS, section Conditions, site www.atelier-mirabelle.fr, 4 combinaisons listées, puis la règle générée et la raison

Deux règles, deux champs, quatre combinaisons. La règle générée se met à jour à chaque saisie.

Le chemin d'une correction ne tient pas compte des majuscules : /Admin/ couvre aussi /admin/x. Il vaut pour un segment entier : /admin couvre /admin et /admin/x, mais pas /administration. La portée Seulement sur un chemin retire toutes les règles listées sous ce chemin.

Un champ peut aussi viser le nom d'un cookie, avec REQUEST_COOKIES_NAMES:<nom>, quand c'est le nom du cookie, et non sa valeur, qui fait réagir une règle.

Ne corriger que sous conditions​

Une correction peut ne s'appliquer que si la requête remplit une ou plusieurs Conditions. Exemple : l'import du catalogue d'un fournisseur fait réagir la règle 942100 sous /import/. Plutôt que de couper la règle pour tout le monde sur ce chemin, ajoutez la condition « l'en-tête X-Fournisseur est présent » : les autres requêtes sous /import/ restent inspectées.

  1. Dans le formulaire de la correction, section Conditions, cliquez sur + Ajouter une condition.
  2. Choisissez la variable (REQUEST_HEADERS, ARGS, REQUEST_COOKIES, REQUEST_URI…), son nom si elle en a un (X-Fournisseur), puis l'opérateur : est présent, est absent, contient, ne contient pas, correspond à (regex) ou ne correspond pas à (regex).
  3. Enregistrez, puis appliquez. La liste des corrections affiche les conditions sous chaque entrée, précédées de « Seulement si ».
  • Toutes les conditions doivent être vraies (ET). Pour un OU, créez une seconde correction.
  • contient et ne contient pas ignorent les majuscules. Une expression régulière est vérifiée à l'enregistrement.
  • Saisir en texte passe à une saisie d'une condition par ligne, dans la syntaxe ModSecurity : REQUEST_HEADERS:User-Agent @contains ERP-Sync, ARGS:id @rx ^[0-9]+$, !ARGS:debug (absent). Le panel vérifie chaque ligne pendant la frappe.
  • Une condition sur le corps (ARGS, ARGS_POST, FILES, REQUEST_BODY…) n'est connue qu'en phase 2 : la correction ne retire alors pas les règles de phase 1 (920…, 913…).

Page Faux positifs : le tableau des trois corrections, dont la règle 942100 sur le chemin /import/ « Seulement si » l&#39;en-tête X-Fournisseur est présent, avec leur portée, leur site, leur raison et leur expiration, puis le haut de la carte Champs qui déclenchent des règles

Faux positifs. Toutes les corrections, globales ou par site, avec leur portée et leur expiration. Dessous, Champs qui déclenchent des règles classe les champs qui font réagir le WAF sur 1 h, 6 h ou 24 h.

L'IA peut préparer la correction

Dans le détail d'un événement, 🤖 Faux positif ? (IA) analyse la requête. Sur la page Faux positifs, 🤖 Analyser avec l'IA donne un verdict pour chaque champ : FAUX POSITIF, ATTAQUE ou INCERTAIN. Pour un faux positif, l'IA propose une correction déjà contrôlée par le serveur : Pré-remplir l'exclusion ouvre le formulaire, vous relisez et vous enregistrez (chapitre 5.4).

Vérifiez

La règle 941100 (XSS) bloque le champ content de l'éditeur WordPress, et seulement lui. Quelle portée choisissez-vous ?

3.2 Déclarer du trafic de confiance​

Durée 5 minPrérequis chapitre 3.1
Objectifs
  • Faire la différence entre « Ne pas inspecter » et « Toujours inspecter ».
  • Limiter une entrée de confiance par des conditions.

Le trafic de confiance ne passe pas par Coraza. On l'utilise pour une sonde de supervision, un partenaire qui appelle une API, ou un outil interne connu.

  • Ne pas inspecter : l'IP, la plage, le chemin ou le paramètre n'est plus analysé.
  • Toujours inspecter : force l'analyse, même si une autre règle de confiance couvre ce trafic. Elle l'emporte toujours.
  • Ne pas journaliser ce trafic : le WAF reste actif, mais ces requêtes n'encombrent plus les journaux.
En une image

C'est le badge du personnel : on ne fouille pas le sac des employés connus. Raison de plus pour ne le donner qu'à ceux que vous connaissez vraiment.

Page Trafic de confiance, onglet Entrées : un chemin /admin-mirabelle en Accès réservé aux groupes Agence web et Bureaux Mirabelle, une adresse IP en observation toujours inspectée avec une expiration, un paramètre export_token et un chemin /api/webhooks/paiement en Ne pas inspecter

Trafic de confiance. Chaque règle peut viser un site ou tous les sites, et porter une date d'expiration.

À l'expiration, un chemin ou un paramètre cesse d'agir à l'heure exacte, sans Appliquer. Une adresse ou une plage en « Ne pas inspecter » est retirée dans l'heure qui suit, sur tous les nœuds, elle aussi sans Appliquer. La règle expirée quitte la liste dans l'heure ; si le bandeau vous propose alors d'appliquer, c'est pour la retirer des fichiers du WAF : son effet a déjà cessé.

Comme une correction, une entrée Ne pas inspecter accepte des Conditions (chapitre 3.1). Exemple : la sonde de supervision n'est exemptée que si son User-Agent contient Kokiris-Supervision. Avec des conditions, une adresse IP n'est plus exemptée par HAProxy : bans, vérification JavaScript et limite de débit s'appliquent à elle. Seule l'inspection du WAF est levée, quand les conditions sont vraies.

Comptes revendeur et membre

Sans condition, une adresse ou une plage de confiance vaut pour tous les sites de la plateforme. Un compte revendeur ou membre doit donc lui ajouter au moins une condition, et ne peut pas créer de « Toujours inspecter ». Avec une condition, l'entrée ne vaut que pour son site.

À ne pas confondre avec un faux positif

Un faux positif se corrige règle par règle. Le trafic de confiance retire toute l'inspection. Gardez-le pour les sources que vous maîtrisez.

Réserver un chemin à vos bureaux​

Un groupe d'IP est une liste nommée d'adresses (par exemple « Siège » ou « Direction »), créée une fois dans l'onglet Groupes d'IP et réutilisable sur tous vos sites. Une règle de type chemin peut ensuite cocher un ou plusieurs groupes.

  1. Onglet Groupes d'IP → Ajouter un groupe d'IP : un nom, puis une adresse ou une plage par ligne.
  2. Onglet Entrées → Ajouter une règle de trafic, type Motif de chemin, par exemple /wp-login.php, et cochez le groupe. Attention : ne restreignez pas /wp-admin en entier, WordPress appelle /wp-admin/admin-ajax.php depuis les pages publiques.
  3. Décision Accès réservé : seules les adresses du groupe atteignent le chemin, les autres reçoivent une page 403. Avec Ne pas inspecter, ce sont seulement ces adresses qui passent sans inspection.

Onglet Groupes d&#39;IP de la page Trafic de confiance : deux groupes, Agence web (198.51.100.32/28, équipe qui développe la boutique) et Bureaux Mirabelle (198.51.100.64/29, siège et atelier), chacun utilisé par une entrée, avec le bouton Modifier et le bouton Supprimer grisé, et le bouton Ajouter un groupe d&#39;IP

Groupes d'IP. La colonne Utilisé par compte les entrées qui s'en servent : ici, le chemin du back-office réservé à l'agence et aux bureaux.

À retenir

Modifier le groupe suffit : toutes les règles qui l'utilisent suivent. Un groupe utilisé ne peut pas être supprimé. L'accès réservé s'applique même quand le site est en mode Détecter, mais pas à une adresse déjà en confiance globale.

Vérifiez

Votre outil de supervision appelle /health toutes les minutes et se fait bloquer. Quelle est la bonne réponse ?

3.3 Limiter le débit​

Durée 10 minPrérequis chapitre 2.2Outil curl
Objectifs
  • Protéger une page de connexion contre les essais de mots de passe en série.
  • Vérifier la limite avec une boucle curl.
  • Choisir ce que deviennent les gros envois.
  1. Ouvrez la fiche du site, carte Contrôle du trafic, puis cliquez sur + Ajouter une limite.
  2. Saisissez le chemin de votre page de connexion (/wp-login.php pour WordPress), 5 requêtes, fenêtre de 60 secondes.
  3. Enregistrez, puis appliquez.

Carte Contrôle du trafic du blog : mode maintenance, file d&#39;attente, vérification JS sur /wp-login.php, corps plus grand que la taille inspectée en Bloquer (413) avec le chemin exempté /wp-admin/async-upload.php, et une limitation de débit sur /wp-login.php à 5 requêtes par 60 secondes

Contrôle du trafic. Cinq réglages : maintenance, file d'attente, vérification JavaScript, gros envois et limitation de débit.

Ce que vous devez voir​

terminal · 8 requêtes de suite
for i in $(seq 1 8); do curl -s -o /dev/null -w '%{http_code} ' https://www.votre-site.fr/wp-login.php; done; echo
réponse
200 200 200 200 200 429 429 429
terminal · la réponse 429 en détail
curl -s -D - -o /dev/null https://www.votre-site.fr/wp-login.php
réponse
HTTP/2 429
retry-after: 60
cache-control: no-cache
content-length: 2818
content-type: text/html; charset=UTF-8
alt-svc: h3=":443"; ma=60

Les cinq premières requêtes passent. À partir de la sixième, HAProxy répond 429 et indique au client d'attendre 60 secondes.

OutilRéponseExemple d'usage
Limitation de débit429Page de connexion, API publique
Mode maintenance503* pendant une mise à jour, !/api pour garder l'API ouverte
File d'attente429Soldes : au plus N visiteurs simultanés
Vérification JS200 + page de calculÉcarter les robots simples sur /panier
Corps plus grand que la taille inspectée413Refuser un envoi que le WAF ne pourrait pas lire en entier
La file d'attente compte par nœud

Utilisateurs simultanés max vaut pour chaque nœud : sur deux nœuds, jusqu'à deux fois ce nombre de visiteurs. Les admissions repartent de zéro à chaque rechargement de HAProxy (Appliquer, mise à jour des zones GEO) : évitez d'appliquer en plein pic. Sans Durée de session, un visiteur admis garde sa place 30 minutes. La file ne retient jamais votre panel kokiGUARD ni le renouvellement de vos certificats.

Les gros envois​

kokiGUARD inspecte le corps d'une requête (un formulaire, un JSON d'API) jusqu'à une certaine taille, 64 Ko par défaut. Au-delà, il ne pourrait pas lire la fin : une attaque cachée en fin de corps passerait. Le réglage Corps plus grand que la taille inspectée de la carte Contrôle du trafic dit quoi faire de ces requêtes :

  • Bloquer (413) : la requête est refusée avec le code 413 et l'en-tête x-waf-action: body-too-large, sauf sur les Chemins exemptés (même syntaxe que la maintenance : *, préfixes, !/chemin pour retirer). Exemptez par exemple l'envoi de médias de WordPress, /wp-admin/async-upload.php.
  • Laisser passer : la requête passe sur tout le site, mais la fin de son corps n'est pas inspectée.

Le refus ne s'applique qu'aux sites en mode Bloquer, Challenge ou Bannir. Les envois de fichiers (multipart/form-data) ne sont jamais refusés pour leur taille, et un chemin de confiance n'est jamais concerné. Un corps trop grand ne donne aucun point de réputation et ne mène jamais à un ban.

Dans les journaux, ces requêtes portent la pastille Corps trop grand (« · refusé (413) », « · passé » ou « · upload »). Sur une ligne refusée, Exempter ce chemin de la limite de taille ajoute son chemin aux chemins exemptés du site. Le tableau de bord les compte dans la carte Corps trop grands.

Agrandir la taille inspectée

La taille elle-même se règle pour toute l'installation : Paramètres, carte Paramètres WAF par défaut, Taille de corps inspectée, de 64 Ko à 1 Mo (administrateur). Plus grand coûte de la mémoire et du temps d'inspection pour chaque gros envoi : parlez-en à Kokiris avant de changer.

Vérifiez

Avec une limite de 5 requêtes par 60 s, à partir de quelle requête un client reçoit-il 429 ?

3.4 Bloquer par pays​

Durée 5 minPrérequis chapitre 2.2Rôle éditeur
Objectifs
  • Créer une règle géographique globale.
  • Faire une exception pour un site.

La page Blocage géographique agit par pays ou par continent, pour tous les sites. Trois actions : Bloquer (403), Détection seule (journalise sans bloquer) et Rediriger vers une URL, obligatoire avec cette action. Cochez les pays, ou Tous pour un continent entier, choisissez l'action, cliquez sur Enregistrer, puis appliquez. Si vous quittez la page avant d'enregistrer, le panel vous demande confirmation.

Page Blocage géographique : carte avec trois pays en rouge (Russie, Chine, Viêt Nam), règles globales avec l&#39;action Détection seule (journalisation), liste des continents avec le nombre de pays bloqués, et la base de zones

Blocage géographique. Trois pays en Détection seule : leurs requêtes passent et sont journalisées, le temps de mesurer avant de bloquer. Plus bas, la base de zones à mettre à jour de temps en temps.

Pour un site qui doit faire autrement, utilisez la carte Blocage géographique — Dérogation par site de sa fiche : ajouter des pays à la liste globale, en retirer (liste blanche), ou la remplacer.

Un code à deux lettres est toujours un pays

Un continent est enregistré comme la liste de ses pays, y compris depuis le radar des menaces ou RuleForge. AF désigne l'Afghanistan, AS les Samoa américaines, NA la Namibie et SA l'Arabie saoudite, jamais un continent. Avec les versions antérieures à octobre 2026, un continent bloqué depuis le radar ou RuleForge était enregistré sous l'un de ces codes : relisez vos listes si vous en aviez créé, ou demandez à Kokiris de le faire.

Signal à reconnaître

Une requête bloquée par pays reçoit un 403 avec l'en-tête X-Geo-Blocked: 1.

3.5 Robots et crawlers​

Durée 10 minPrérequis chapitre 2.2Rôle éditeur
Objectifs
  • Distinguer un robot vérifié, un robot déclaré et un usurpateur.
  • Choisir, site par site, ce que vous faites de chaque robot connu.

Moteurs de recherche, robots d'entraînement d'IA, assistants IA, outils SEO, aperçus des réseaux sociaux : une partie de votre trafic vient de robots qui se présentent sous leur vrai nom. Certains vous amènent des clients, d'autres copient vos contenus sans rien rapporter. La carte Robots et crawlers de la fiche du site décide, robot par robot, de ce qu'ils peuvent faire.

kokiGUARD reconnaît un robot à son User-Agent et, quand son éditeur les publie, à ses plages d'adresses IP. La colonne Vérification le dit :

MarqueSignification
✔ VérifiéUser-Agent du robot et adresse dans les plages publiées par son éditeur (Google, Microsoft, OpenAI…).
⚠ Non vérifiableL'éditeur ne publie pas ses plages : le robot n'est reconnu qu'à son User-Agent, que n'importe qui peut imiter.
UsurpateursUser-Agent d'un robot vérifiable, mais depuis une adresse hors de ses plages : quelqu'un se fait passer pour lui.

Pour chaque robot, quatre actions :

ActionEffet
AutoriserLe robot passe. Vérifié, il échappe aussi à la détection des scanners et à la limite de débit par adresse, et ses détections ne comptent pas pour le bannissement. Jamais au WAF : une attaque reste bloquée.
Limiter (requêtes/min)Au-delà de N requêtes par minute, il reçoit un 429.
ChallengeIl reçoit la page du challenge (chapitre 4.5) : un robot ne la résout pas.
BloquerIl reçoit un 403 avec l'en-tête X-Bot-Blocked.

Sans réglage sur le site, chaque robot suit le Défaut global (Paramètres, carte Robots et crawlers, administrateur) : Autoriser, sauf GPTBot, ChatGPT-User, OAI-SearchBot et Bytespider, bloqués. Les usurpateurs reçoivent le challenge.

  1. Ouvrez la fiche du site, carte Robots et crawlers.
  2. Partez d'un Préréglage…, puis ajustez robot par robot dans la colonne Action : Référencement seul autorise les moteurs de recherche et bloque tous les autres robots ; Sans entraînement IA bloque les robots d'entraînement d'IA et laisse les autres inchangés ; Permissif remet tous les robots sur le défaut global.
  3. Regardez la colonne 30 jours (vues · refusées) : elle montre quels robots visitent vraiment ce site.
  4. Cliquez sur Enregistrer les réglages des robots, puis appliquez.

Carte Robots et crawlers de la boutique : préréglage, puis les robots rangés par famille (moteurs de recherche, entraînement d&#39;IA, assistants et recherche IA, outils SEO, aperçus des réseaux sociaux) avec leur marque de vérification, leurs vues et refus sur 30 jours et leur action : GPTBot, CCBot et Bytespider bloqués, Meta-ExternalAgent limité à 60 requêtes par minute, SemrushBot en challenge, les autres sur le défaut global

Robots et crawlers. La boutique bloque les robots d'entraînement d'IA qui copient ses fiches produit, limite les plus gourmands et garde les moteurs de recherche.

Ne coupez pas votre référencement

Un moteur de recherche bloqué ou soumis au challenge n'indexe plus votre site, et votre référencement en pâtit. Le panel vous le rappelle quand vous le choisissez.

  • Les actions des robots passent après le verdict du WAF : un robot qui attaque reçoit le 403 du WAF, comme tout le monde.
  • Elles ne s'appliquent jamais au trafic de confiance ni au panel kokiGUARD.
  • Les plages des robots sont téléchargées avec les zones GEO, par le bouton Mettre à jour les zones de la page Blocage géographique.
Vérifiez

Votre boutique doit rester dans Google, mais vous ne voulez pas que vos fiches produit servent à entraîner des IA. Que choisissez-vous ?

3.6 Paranoïa et catégories : laissez Kokiris régler​

Durée 5 minPrérequis chapitre 0.3
Objectifs
  • Comprendre ce que règlent la paranoïa et les catégories.
  • Savoir pourquoi ce réglage se fait avec Kokiris.
Nous vous déconseillons de modifier le niveau de paranoïa

Ce réglage change le comportement de centaines de règles à la fois. Trop haut, il bloque de vrais clients. Trop bas, il laisse passer des attaques. Kokiris le fixe pour vous pendant la phase de training, à partir du trafic réel de vos sites, et l'adapte ensuite si vos sites évoluent.

Vous voulez renforcer ou assouplir la protection ? Demandez-le à Kokiris : le changement sera testé en mode Détecter avant d'être mis en production.

En une image

La paranoïa, c'est la sensibilité d'un détecteur de fumée. Trop sensible, il sonne pour un toast ; pas assez, il rate un début d'incendie. Le bon réglage dépend de la pièce, c'est-à-dire de votre site et de son trafic.

Pour comprendre ce que vous voyez dans la fiche d'un site :

NiveauEffet
PL1 · MinimalPeu de faux positifs, protection de base solide. Le point de départ habituel.
PL2 · StandardPlus de détections, quelques faux positifs à corriger.
PL3 · StrictDétection fine, beaucoup de corrections à prévoir.
PL4 · ParanoïaqueTrès strict, beaucoup de faux positifs.

Sous le niveau de paranoïa, la carte Catégories de règles activées liste les 13 familles du CRS. Kokiris désactive pendant le training les familles qui ne concernent pas votre site, par exemple Injection Java sur un site PHP.

Page Règles CRS : catalogue des règles OWASP avec recherche, filtres par catégorie et sévérité, et pour chaque règle son identifiant, son nom, sa catégorie, sa sévérité, son niveau de paranoïa et les boutons Voir et Ajouter une exclusion

Règles CRS. Le catalogue complet. Pour chaque règle, vous pouvez demander une explication à l'IA.

À retenir
  • La paranoïa et les catégories se règlent avec Kokiris, pendant le training puis sur demande.
  • Tout changement passe d'abord par le mode Détecter.
Vérifiez

Votre boutique a subi une vague d'attaques et vous voulez la protéger davantage. Que faites-vous ?

Ce que vous savez maintenant
  • Corriger un faux positif avec la portée la plus étroite, sur une ou plusieurs règles et un ou plusieurs champs.
  • Choisir entre trafic de confiance et correction de faux positif.
  • Poser une limite de débit, une page de maintenance, une file d'attente ou une vérification JavaScript.
  • Ne corriger ou ne faire confiance que sous conditions.
  • Choisir entre refuser et laisser passer les gros envois.
  • Bloquer un pays, en détection d'abord.
  • Choisir, site par site, ce que vous faites de chaque robot connu.
  • Laisser la paranoïa et les catégories à Kokiris, et savoir pourquoi.