v1.1.11: Fix exclude_source_ips config loading and debug logging
Major fixes: - Add exclude_source_ips to mergeConfigs() - config file values now properly loaded - Add validation for exclude_source_ips (IP/CIDR format validation) - Remove JA4SENTINEL_LOG_LEVEL env var from systemd service - Config file log_level now respected without env override Debug logging improvements: - Log IP filter entries at startup (debug mode) - Track filtered packet count with atomic counter - Display filter statistics at shutdown via GetFilterStats() - New debug logs in tlsparse component Testing: - Add 6 new unit tests for exclude_source_ips and log_level config loading - Test mergeConfigs() behavior with empty/override values - Test validation of invalid IPs and CIDR ranges Documentation: - Update architecture.yml with ipfilter module - Document config loading priority and notes - Update api.Config fields (LocalIPs, ExcludeSourceIPs, LogLevel) Files changed: - internal/config/loader.go (merge, validation, helpers) - internal/config/loader_test.go (6 new tests) - internal/tlsparse/parser.go (GetFilterStats, counter) - cmd/ja4sentinel/main.go (debug logging) - packaging/systemd/ja4sentinel.service (remove env var) - architecture.yml (ipfilter module, config_loading section) Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@ -57,14 +57,17 @@ modules:
|
||||
path: "internal/tlsparse"
|
||||
description: "Extraction des ClientHello TLS côté client à partir des paquets capturés."
|
||||
responsibilities:
|
||||
- "Décoder les couches IP/TCP jusqu’au payload TLS."
|
||||
- "Décoder les couches IP/TCP jusqu'au payload TLS."
|
||||
- "Identifier le ClientHello TLS du client sur les ports configurés."
|
||||
- "Assembler les segments si nécessaire pour obtenir un ClientHello complet."
|
||||
- "Produire des TLSClientHello enrichis avec IPMeta et TCPMeta."
|
||||
- "Filtrer les IPs source exclues via le module ipfilter (avant parsing TLS)."
|
||||
- "Compter les paquets filtrés pour statistiques (GetFilterStats)."
|
||||
allowed_dependencies:
|
||||
- "config"
|
||||
- "capture"
|
||||
- "api"
|
||||
- "ipfilter"
|
||||
forbidden_dependencies:
|
||||
- "output"
|
||||
|
||||
@ -117,6 +120,22 @@ modules:
|
||||
- "fingerprint"
|
||||
- "output"
|
||||
|
||||
- name: ipfilter
|
||||
path: "internal/ipfilter"
|
||||
description: "Filtrage des adresses IP source par correspondance IP/CIDR."
|
||||
responsibilities:
|
||||
- "Charger une liste d'IPs ou plages CIDR à exclure."
|
||||
- "Vérifier si une IP source correspond à une entrée de la liste d'exclusion."
|
||||
- "Supporter IPv4 et IPv6."
|
||||
- "Validation des formats IP et CIDR lors du chargement de la config."
|
||||
allowed_dependencies: []
|
||||
forbidden_dependencies:
|
||||
- "config"
|
||||
- "capture"
|
||||
- "tlsparse"
|
||||
- "fingerprint"
|
||||
- "output"
|
||||
|
||||
- name: cmd_ja4sentinel
|
||||
path: "cmd/ja4sentinel"
|
||||
description: "Point d'entrée de l'application (main)."
|
||||
@ -126,6 +145,7 @@ modules:
|
||||
- "Brancher les modules entre eux selon l'architecture pipeline."
|
||||
- "Gérer les signaux système (arrêt propre)."
|
||||
- "Gérer le signal SIGHUP pour la rotation des logs (systemctl reload)."
|
||||
- "Logger les statistiques du filtre IP au démarrage et à l'arrêt (debug)."
|
||||
allowed_dependencies:
|
||||
- "config"
|
||||
- "capture"
|
||||
@ -155,9 +175,11 @@ api:
|
||||
- { name: Interface, type: "string", description: "Nom de l'interface réseau (ex: eth0)." }
|
||||
- { name: ListenPorts, type: "[]uint16", description: "Ports TCP à surveiller (ex: [443, 8443])." }
|
||||
- { name: BPFFilter, type: "string", description: "Filtre BPF optionnel pour la capture." }
|
||||
- { name: LocalIPs, type: "[]string", description: "IPs locales à surveiller (vide = auto-détection, exclut loopback)." }
|
||||
- { name: ExcludeSourceIPs,type: "[]string", description: "IPs sources ou plages CIDR à exclure (ex: [\"10.0.0.0/8\", \"192.168.1.1\"]). Validé par le module config." }
|
||||
- { name: FlowTimeoutSec, type: "int", description: "Timeout en secondes pour l'extraction du handshake TLS (défaut: 30)." }
|
||||
- { name: PacketBufferSize,type: "int", description: "Taille du buffer du canal de paquets (défaut: 1000). Pour les environnements à fort trafic." }
|
||||
- { name: LogLevel, type: "string", description: "Niveau de log : debug, info, warn, error (défaut: info). Extension pour configuration runtime." }
|
||||
- { name: LogLevel, type: "string", description: "Niveau de log : debug, info, warn, error (défaut: info). Configuration via fichier YAML uniquement (pas d'override env dans systemd)." }
|
||||
|
||||
- name: "api.IPMeta"
|
||||
description: "Métadonnées IP pour fingerprinting de stack."
|
||||
@ -478,7 +500,7 @@ packaging:
|
||||
note: "Fourni par le RPM, configure la rotation quotidienne avec compression."
|
||||
- path: "/etc/systemd/system/ja4sentinel.service"
|
||||
description: "Unité systemd pour la gestion du service."
|
||||
note: "Doit inclure Type=notify et ExecReload=/bin/kill -HUP $MAINPID pour supporter systemctl reload."
|
||||
note: "Doit inclure Type=notify et ExecReload=/bin/kill -HUP $MAINPID pour supporter systemctl reload. PAS de variable Environment=JA4SENTINEL_LOG_LEVEL pour respecter la config fichier."
|
||||
logrotate:
|
||||
description: "Configuration logrotate pour la rotation des logs."
|
||||
behavior:
|
||||
@ -489,3 +511,14 @@ packaging:
|
||||
- "systemctl reload ja4sentinel déclenche le handler SIGHUP."
|
||||
- "Le service réouvre ses fichiers de log sans redémarrage complet."
|
||||
|
||||
config_loading:
|
||||
priority:
|
||||
- "1. Fichier de configuration YAML (config.yml)"
|
||||
- "2. Variables d'environnement JA4SENTINEL_* (sauf log_level depuis v1.1.11)"
|
||||
- "3. Arguments CLI (--config)"
|
||||
notes:
|
||||
- "Depuis v1.1.11, la variable JA4SENTINEL_LOG_LEVEL n'est plus définie dans le service systemd."
|
||||
- "Le log_level doit être configuré exclusivement dans le fichier YAML."
|
||||
- "exclude_source_ips est uniquement chargé depuis le fichier YAML (pas d'override env)."
|
||||
- "La fusion des configs utilise mergeConfigs() qui préserve les valeurs non-overridées."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user