Vue d’ensemble — à quoi sert cette page
La page Liste blanche gère les IP et les plages à exempter de la chaîne de blocage automatique d’InfraGuard. Tout ce qui est enregistré ici constitue la « liste des exemptions » que les collecteurs de détection consultent juste avant de bloquer, ce qui évite que des sources de confiance (CDN, API partenaires, lignes du bureau) soient bloquées sur un faux positif.
La notion centrale est l’échéance :
expires_atà NULL → exemption permanente (n’expire jamais). Pour les sources toujours fiables, telles que les CDN et les lignes du bureau.expires_atavec une date → exemption temporaire (elle tombe automatiquement passé cet instant). Pour de courtes fenêtres d’investigation ou pour les verdicts d’innocence automatiques.
Les exemptions proviennent de trois sources :
| Source | Valeur | Signification |
|---|---|---|
| Manuelle | manual |
Un opérateur l’ajoute directement depuis l’interface |
| Automatique (innocente) | auto |
srct_tx consulte la réputation d’une IP et, si elle est manifestement innocente, enregistre automatiquement une exemption de 30 jours |
| Par défaut | seed |
Plages CDN/OFFICE autrefois codées en dur, migrées par InfrWhitelistSeeder (permanentes) |
La table
infr_whitelistréside sur la connexionlegacy_glory(la même base queblacklist_infoet les tablessuricata_*), et non sur celle de l’application. Cela permet au collecteur Nodesrct_txde lire cette table directement juste avant de bloquer et d’y écrire les IP innocentes.
Quand l’utiliser
- Éviter les faux positifs : enregistrez à l’avance le trafic normal (robots de supervision, robots d’exploration partenaires, rappels de paiement) susceptible de déclencher les heuristiques de balayage ou de débit.
- Exception temporaire pendant une investigation : donnez une date d’échéance à une plage pour l’exempter quelques jours.
- Faire toujours confiance au CDN ou au bureau : exemptez de façon permanente les IP frontales de Cloudflare/Google/AWS/Akamai ou une IP fixe du bureau.
- Revoir les verdicts automatiques : inspectez, prolongez ou supprimez les entrées
autocréées parsrct_tx. - Débloquez dans la liste de blocage une IP bloquée par erreur et empêchez qu’elle soit à nouveau bloquée (en enregistrant une exemption).
Disposition
Indicateurs en tête (5)
Calculés par WhitelistService::summary() avec un cache de 30 secondes. Active = is_active = 1 ET (expires_at IS NULL OU expires_at > now).
| Indicateur | Signification | Calcul |
|---|---|---|
| Exemptions actives | Total des exemptions actuellement en vigueur | nombre d’actives |
| Permanentes | Entrées sans échéance | actives ET expires_at IS NULL |
| Temporaires | Entrées qui expireront | actives − permanentes |
| Exemption automatique | Entrées automatiques avec verdict d’innocence | actives ET source = 'auto' |
| Bientôt expirées | Expirent sous 7 jours | actives ET expires_at <= now+7d |
Liste des exemptions
Un tableau filtrable (25 lignes par page). Le tri place les permanentes en tête (expires_at IS NULL DESC) → échéance croissante → id décroissant.
| Colonne | Description |
|---|---|
| Plage | cidr normalisé (p. ex. 203.0.113.0/24 ou 203.0.113.10/32) |
| Nom | label (p. ex. « Cloudflare », « Bureau ») |
| Source | Badge manual / auto / seed |
| Échéance | Permanente / YYYY-MM-DD HH:MM / n days left / expirée |
| Ajoutée | created_at |
| Action | Retirer (si vous disposez du droit d’écriture) |
Filtres : statut (active · expirée · toutes), source (manuelle · automatique · par défaut · toutes) et recherche (IP · CIDR · nom). La liste interroge les mises à jour toutes les 30 secondes.
Fenêtre d’ajout manuel
Le bouton [Add manually] (Ajouter manuellement) ouvre une fenêtre modale. Champs : IP ou CIDR, nom (facultatif) et date/heure d’échéance (facultative ; vide = permanente).
Utilisation
1. Ajouter une exemption manuelle
- Cliquez sur
[Add manually](Ajouter manuellement). - Saisissez une IP ou un CIDR. Une IP seule est normalisée en
/32; une plage est normalisée en son adresse réseau (voir les règles de normalisation ci-dessous). - Facultativement, saisissez un nom et une date/heure d’échéance. Laissez l’échéance vide pour une exemption permanente.
- Cliquez sur
[Add](Ajouter). Si le mêmecidrexiste déjà, il est réactivé (is_active=1), et son échéance ainsi que son nom sont mis à jour.
2. Règles de normalisation (normalizeCidr)
WhitelistService::normalizeCidr() réécrit la saisie sous une forme canonique (indépendante de la langue, identique à la convention de correspondance de srct_tx).
203.0.113.10 → 203.0.113.10/32 (une IP seule devient /32)
203.0.113.0/24 → 203.0.113.0/24 (inchangé)
203.0.113.55/24 → 203.0.113.0/24 (bits d’hôte masqués → adresse réseau)
10.0.0.5/8 → 10.0.0.0/8
999.1.1.1 → (non valide → null, 422 invalid_ip)
- IPv4 uniquement. Longueur de préfixe de 0 à 32.
- Avant l’enregistrement, le contrôleur effectue une pré-validation avec l’expression régulière
^\d{1,3}\.\d{1,3}\.\d{1,3}(\.\d{1,3})?(/\d{1,2})?$, puis le service finalise avecfilter_var(... FILTER_FLAG_IPV4)+ip2long.
Lorsque vous ajoutez une plage
/24, vous pouvez laisser les bits d’hôte :203.0.113.55/24est automatiquement stocké sous la forme203.0.113.0/24(son adresse réseau).
3. Saisie de l’échéance
- Vide → permanente (
expires_at = NULL). YYYY-MM-DDouYYYY-MM-DD HH:MM→ interprété parCarbon::parse.- Un échec d’interprétation devient également permanent (
parseExpiry→ null).
4. Retirer
L’action de retrait sur une ligne de la liste appelle remove après confirmation. La ligne est supprimée physiquement (et non de façon logique). Même une entrée CDN d’origine seed peut être retirée, mais elle peut être recréée lors de la prochaine exécution du semeur.
5. Innocence automatique de srct_tx (source auto) — comment elle est alimentée
Le collecteur srct_tx vérifie l’innocence selon une procédure très stricte juste avant de bloquer une IP présentant une anomalie de balayage ou de débit, et ne laisse ici une entrée auto que lorsque le verdict est certain.
- Filtre par la liste blanche — si l’IP est déjà présente dans
infr_whitelist(ainsi que dans la liste CDN codée dans le programme), elle est exemptée et ignorée immédiatement. - Consultation de réputation pour les seules candidates « E seul » — seules les IP portant le signal propice aux faux positifs de « balayage court isolé » (heuristique E) et aucun des signaux durs (A/A2/B/C/D) sont confrontées à AbuseIPDB (clés en rotation · cache de 6 h · plafond par balayage).
- Verdict de pleine innocence — si
abuse_score=0ETreports=0ET qu’il ne s’agit pas de Tor (ou si l’IP est en liste blanche avec un score de 0), une exemption de 30 jours (ip/32) est enregistrée automatiquement dansinfr_whitelist(source=auto)et le blocage est ignoré.
L’innocence automatique est propre à
srct_tx.kts_tx(Kitsune ML) se contente de lire et de filtrer avec la liste blanche : il n’effectue ni consultation de réputation ni enregistrement automatique.
6. cidrList() — réutilisé pour la génération de code
WhitelistService::cidrList() renvoie les CIDR actifs et non expirés, dédoublonnés (cache de 30 secondes). Cette liste est injectée comme source de la constante CDN_WHITELIST_CIDRS lorsque la page Règles et seuils génère les scripts srct_tx/kts_tx — de sorte que les exemptions gérées dans l’interface se retrouvent dans le code réel du collecteur.
Sources de données
Table infr_whitelist (connexion : legacy_glory, migration 000734)
| Colonne | Type | Description |
|---|---|---|
id |
bigint PK | |
cidr |
varchar(43) unique | IP normalisée (/32) ou réseau (/n) |
label |
varchar(120) null | quoi / qui |
source |
varchar(12) | manual / auto / seed |
reason |
varchar(500) null | justification automatique (score/catégorie de réputation) |
country |
varchar(4) null | code pays |
expires_at |
datetime null | NULL = permanente |
is_active |
tinyint(1) | indicateur d’activité |
created_by |
int null | id de l’utilisateur ayant enregistré l’entrée |
created_at / updated_at |
timestamps |
Index : (is_active, expires_at) et source.
infr_whitelistest créée sur la baselegacy_glory(GLORY). Silegacy_gloryn’est pas configurée en mysql/mariadb, la migration et le semeur sont protégés pour ne rien faire : la page s’affiche, mais les indicateurs lisent 0. En déploiement réel, la connexion GLORY doit être renseignée.
Semeur InfrWhitelistSeeder (source=seed, permanente)
Migre les plages CDN/OFFICE autrefois codées en dur (idempotent grâce à firstOrCreate). Comprend les plages frontales de Cloudflare, Google, Meta, AWS et Akamai, ainsi qu’une IP fixe OFFICE.
php artisan db:seed --class=InfrWhitelistSeeder
Modèle · Service
- Modèle :
App\Models\Infr\InfrWhitelist(protected $connection = 'legacy_glory'). - Service :
App\Services\Security\WhitelistService—summary()(indicateurs, cache 30 s),page()(filtrage/pagination),add()/remove()(écritures),cidrList()(source pour la génération de code) etnormalizeCidr()(SOT statique). - Contrôleur :
App\Http\Controllers\Security\WhitelistController—index·live·add·remove.
Accès
| Action | Niveau minimal | Remarques |
|---|---|---|
| Entrer dans la zone Sécurité et la consulter | min_req 2 du menu Sécurité |
demo(1) ne voit pas le menu Sécurité |
| Ajouter/retirer de la liste blanche (écriture) | niveau ≥ 2 | WhitelistController::canWrite() = user_level >= 2 |
Échelle des niveaux : demo=1 · staff=5 · admin=10. Ainsi, staff et admin peuvent à la fois lire et écrire ; un échec d’écriture renvoie 403 forbidden (message « Non autorisé (niveau 2 ou supérieur) »).
Chaque écriture est consignée dans InfrAuditLog :
- Ajout →
sec.whitelist_add(target=ip, meta contenantid·reactivated). - Retrait →
sec.whitelist_remove(target=ip, meta contenantid).
Voir Niveaux d’accès pour la politique complète de niveaux et de rôles, et Journal d’audit pour revoir les écritures.
Dépannage et FAQ
Tous les indicateurs sont à 0 et la liste est vide
La connexion legacy_glory n’est pas configurée, ou la table infr_whitelist n’existe pas encore. Vérifiez les paramètres de la base GLORY et exécutez la migration et le semeur. En cas d’erreur de base de données, le service renvoie des valeurs vides sans échouer.
« IP / CIDR non valide » (422)
La saisie n’est pas de l’IPv4, ou la longueur de préfixe sort de l’intervalle 0–32. IPv6 n’est pas pris en charge. Exemples : 203.0.113.10, 203.0.113.0/24.
J’ai saisi un /24 mais la plage enregistrée diffère
C’est le comportement attendu. Les bits d’hôte sont masqués jusqu’à l’adresse réseau (203.0.113.55/24 → 203.0.113.0/24).
Réajouter la même IP crée-t-il un doublon ?
Non. cidr est unique : l’entrée existante est donc réactivée et son échéance ainsi que son nom sont mis à jour (réponse reactivated: true). Si l’entrée existante était seed, la source reste seed.
Pourquoi des entrées auto apparaissent-elles / puis-je les retirer ?
srct_tx a enregistré automatiquement, sous forme d’exemption de 30 jours, une IP qu’il a jugée manifestement innocente. Vous pouvez la retirer, mais si cette IP est de nouveau signalée à tort, elle peut être réenregistrée.
Les entrées expirées disparaissent-elles automatiquement ?
La ligne subsiste, mais elle sort des décomptes « actives » dès que son échéance est passée. Basculez le filtre de statut sur expirée ou toutes pour les voir. Pour les faire disparaître complètement, retirez-les.
J’ai exempté une IP mais elle est toujours bloquée
Vérifiez : (1) si la plage normalisée couvre réellement l’IP du trafic (p. ex. /32 contre /24) ; (2) le cache de cidrList() (30 s) et si le script du collecteur a bien été régénéré ; (3) s’il existe déjà un enregistrement de blocage dans blacklist_info. Les blocages existants doivent être levés depuis la liste de blocage.
Voir aussi
- Liste de blocage et réputation — gestion de la liste de blocage (l’inverse de l’exemption)
- Blocage automatique — blocage automatique du planificateur (veto par liste blanche ou par innocence)
- Menaces — triage des menaces IDS, exploration par IP
- Règles et seuils — constantes srct_tx/kts_tx + injection de cidrList
- Réputation IP — consultation AbuseIPDB dans l’application
- Journal d’audit — audit des opérations d’écriture
