diff --git a/monitoring/security/wazuh/config/wazuh_manager/rules/wireguard-rules.xml b/monitoring/security/wazuh/config/wazuh_manager/rules/wireguard-rules.xml index 5d317f89..7630a925 100644 --- a/monitoring/security/wazuh/config/wazuh_manager/rules/wireguard-rules.xml +++ b/monitoring/security/wazuh/config/wazuh_manager/rules/wireguard-rules.xml @@ -1,11 +1,17 @@ + Les rules 1082x sont des enfants pour les peers de confiance + (etc/lists/wireguard-trusted-ips) : le negate="yes" sur + n'est pas supporté par analysisd ici, donc on matche positivement + et on laisse la règle la plus spécifique (l'enfant) l'emporter + sur le parent. + Niveau 3 (pas 0) : 3 dans + ossec.conf exclut tout niveau < 3 de l'index OpenSearch. Un niveau + 0 rendrait les handshakes de confiance invisibles du dashboard VPN + (compteurs handshakes/peers actifs à 0). Le groupe vpn_trusted + permet de les filtrer d'une vue "alertes à traiter" sans les + retirer des stats. --> @@ -26,7 +32,7 @@ wireguard,vpn_handshake, - + 100801 etc/lists/wireguard-trusted-ips WireGuard: handshake initiation - peer de confiance $(srcip) @@ -41,7 +47,7 @@ wireguard,vpn_handshake, - + 100802 etc/lists/wireguard-trusted-ips WireGuard: handshake reponse - peer de confiance $(srcip) @@ -56,7 +62,7 @@ wireguard,vpn_handshake, - + 100803 etc/lists/wireguard-trusted-ips WireGuard: handshake complet - peer de confiance $(srcip) @@ -98,7 +104,7 @@ wireguard,vpn_roaming, - + 100815 etc/lists/wireguard-trusted-ips WireGuard: roaming - peer de confiance $(id) vers $(srcip) @@ -113,7 +119,7 @@ wireguard,vpn_reconnected, - + 100816 etc/lists/wireguard-trusted-ips WireGuard: reconnexion - peer de confiance $(srcip) diff --git a/monitoring/security/wazuh/create-dashboard-vpn.py b/monitoring/security/wazuh/create-dashboard-vpn.py index e8e04bab..9b70d2a9 100644 --- a/monitoring/security/wazuh/create-dashboard-vpn.py +++ b/monitoring/security/wazuh/create-dashboard-vpn.py @@ -29,10 +29,20 @@ DASHBOARD_PASS = os.environ.get("DASHBOARD_PASSWORD", "E9Jpr6586kQ3wYrCS2!") INDEX_PATTERN = "wazuh-alerts-*" # ── Queries ──────────────────────────────────────────────────────────────────── -Q_ALL = "rule.id: 100801 OR rule.id: 100802 OR rule.id: 100803 OR rule.id: 100810 OR rule.id: 100811 OR rule.id: 100812 OR rule.id: 100815" -Q_HANDSHAKES = "rule.id: 100801 OR rule.id: 100802 OR rule.id: 100803" +# Note: pour un peer de la liste de confiance (etc/lists/wireguard-trusted-ips), +# analysisd indexe l'alerte sous le rule.id de la regle enfant 1082x (voir +# wireguard-rules.xml), pas celui du parent 1008xx. Il faut donc inclure les +# deux jeux d'IDs partout, sinon les peers de confiance disparaissent des stats. +Q_ALL = ("rule.id: 100801 OR rule.id: 100802 OR rule.id: 100803 OR rule.id: 100810 " + "OR rule.id: 100811 OR rule.id: 100812 OR rule.id: 100815 OR rule.id: 100816 " + "OR rule.id: 100821 OR rule.id: 100822 OR rule.id: 100823 OR rule.id: 100825 OR rule.id: 100826") +Q_HANDSHAKES = ("rule.id: 100801 OR rule.id: 100802 OR rule.id: 100803 " + "OR rule.id: 100821 OR rule.id: 100822 OR rule.id: 100823") Q_WARNINGS = "rule.id: 100810 OR rule.id: 100811 OR rule.id: 100812" -Q_COMPLETE = "rule.id: 100803" +# Peers actifs : cardinalite sur data.srcip, tous rule.id de handshake confondus +# (100802/100822 = reponse envoyee, le cas dominant sur un serveur qui recoit les +# connexions ; 100803/100823 = reponse recue, cote initiateur). +Q_COMPLETE = Q_HANDSHAKES # ── Client HTTP ──────────────────────────────────────────────────────────────── ctx = ssl.create_default_context() @@ -337,7 +347,9 @@ def main(): "description": "Handshakes peers, deconnexions, timeouts, activite par IP — agent vpn-prod", "panelsJSON": json.dumps(PANELS), "optionsJSON": json.dumps({"useMargins": True, "hidePanelTitles": False}), - "timeRestore": False, + "timeRestore": True, + "timeFrom": "now-24h", + "timeTo": "now", "kibanaSavedObjectMeta": { "searchSourceJSON": json.dumps({"query": {"language": "kuery", "query": ""}, "filter": []}) },