InfraGuard

Liste blanche (exemption de blocage)

Gérez les IP et CIDR à exempter du blocage automatique, avec un modèle d’échéance (permanente ou temporaire), consommé par srct_tx juste avant qu’il ne bloque.

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 :

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_whitelist réside sur la connexion legacy_glory (la même base que blacklist_info et les tables suricata_*), et non sur celle de l’application. Cela permet au collecteur Node srct_tx de lire cette table directement juste avant de bloquer et d’y écrire les IP innocentes.


Quand l’utiliser


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

  1. Cliquez sur [Add manually] (Ajouter manuellement).
  2. 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).
  3. Facultativement, saisissez un nom et une date/heure d’échéance. Laissez l’échéance vide pour une exemption permanente.
  4. Cliquez sur [Add] (Ajouter). Si le même cidr existe 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)

Lorsque vous ajoutez une plage /24, vous pouvez laisser les bits d’hôte : 203.0.113.55/24 est automatiquement stocké sous la forme 203.0.113.0/24 (son adresse réseau).

3. Saisie de l’échéance

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.

  1. 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.
  2. 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).
  3. Verdict de pleine innocence — si abuse_score=0 ET reports=0 ET 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 dans infr_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_whitelist est créée sur la base legacy_glory (GLORY). Si legacy_glory n’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


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 :

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

화이트리스트 — 차단 면책 목록
화이트리스트 — 차단 면책 목록