Commit Graph

122 Commits

Author SHA1 Message Date
fb448257a1 ui(qualys/agents): connectivite minimale - HTTP code recu = OK, diag detaille seulement si KO 2026-04-28 00:52:17 +02:00
c54ec0ba0c fix(qualys/agents): test connectivite DIRECT vers qagpublic.qg1.apps.qualys.eu (pod EU1 SANEF) - pas de proxy car agent sort en direct 2026-04-28 00:26:29 +02:00
9d312f43a3 feat(qualys/agents): check conf proxy agent (qagent-proxy.conf, drop-in systemd, sysconfig, /etc/environment) + suggestion config proxy 2026-04-28 00:20:56 +02:00
191c167423 fix(qualys/agents): snapshot vCenter (pas LVM) pour rollback avant extend FS 2026-04-28 00:15:12 +02:00
640292c1ce feat(qualys/agents): checks LVM + logrotate + suggestions extend FS / cleanup / fix logrotate avec snapshot LVM obligatoire 2026-04-28 00:11:45 +02:00
b81343d5ca fix(qualys/agents): test connectivite via proxy SANEF (proxy.sanef.fr:8080, fallback IP 10.40.10.225) + suggestion conf agent 2026-04-28 00:06:32 +02:00
a877589cf3 feat(qualys/agents): suggestions auto resolution selon patterns logs (disque sature, crash loop, conn KO, service masked, agent obsolete) 2026-04-28 00:01:14 +02:00
437b1ed172 feat(qualys/agents): ajout checks espace disque + connectivite console Qualys (qualysagent/qualysguard.qualys.eu) 2026-04-27 23:53:15 +02:00
d9be39a037 fix(qualys/agents): sudo -n explicite pour lire logs Qualys (fichiers root-only) + fallback messages 'existe mais non lisible' 2026-04-27 23:39:53 +02:00
cdcb85917d feat(qualys/agents): audit en background thread + page d'attente auto-refresh (fix ERR_CONNECTION_RESET sur audits longs) 2026-04-27 23:25:50 +02:00
26e05d63ac fix(qualys/agents): commandes audit adaptees multi-OS (RHEL5 SysV init, journalctl absent, chemins log Qualys multiples) 2026-04-27 23:15:50 +02:00
03229d4d08 feat(qualys/agents): bouton Check + page audit cible Qualys agent (status + version + logs agent/systeme via SSH) 2026-04-27 23:09:05 +02:00
dc9c197274 fix(qualys/dashboard): timeout 120s->300s + log erreurs sur _fetch_asset_ids_by_tag (manque ENV-PRD/REC sur gros tags) 2026-04-27 23:00:58 +02:00
5ec5271232 perf(qualys/dashboard): parallelise fetch vulns par batch IPs (8 workers, ~18min -> ~3min) 2026-04-27 17:15:44 +02:00
0d4ce6dfc2 feat(qualys/duplicates): scan filtre Linux+Windows Server uniquement (~1200 vs 6244) 2026-04-25 19:56:23 +00:00
6c52d05393 fix(qualys/duplicates): renomme cle items -> groups (conflit Jinja avec dict.items) 2026-04-25 10:49:53 +00:00
e832381b68 feat(qualys/duplicates): filtre serveurs uniquement (exclut Win 10/11/7/8/XP postes) 2026-04-25 10:23:14 +00:00
3d043af194 feat(qualys): page doublons + suppression API Qualys 1-clic 2026-04-25 10:17:40 +00:00
8f406f211d feat(qualys/dashboard): compute v2 - interroge API Qualys par tag (DB locale qualys_asset_tags souvent obsolete) 2026-04-25 00:42:29 +00:00
0ab4f2d8fa fix(qualys/dashboard): vire flag in-memory + safety net thread + flex layout 6 KPI 2026-04-25 00:13:22 +00:00
9a7f446637 fix(qualys/dashboard): insert pending row dans la route avant spawn thread (no race) 2026-04-25 00:07:22 +00:00
8f8e8c4d8f feat(qualys): dashboard vulnerabilites avec KPI + historique 2026-04-24 23:49:46 +00:00
c258d6091a fix(qualys): resync_all_tags HTTP 400 - limitResults 10000 trop grand, capper a 1000
Qualys QPS API rejette limitResults au-dela de 1000 (HTTP 400 Bad Request).
Aligne sur les autres requetes du service (5, 20, 100, 200, 1000) et sur
qualys_tags_service.list_qualys_tags qui utilise deja 1000.

Reproductible via /qualys/tags > bouton Resync (msg=resync_ko_HTTP+400).
2026-04-23 12:19:31 +00:00
9a72fa7eb7 Optim: fix N+1 queries itop_service (pre-load batch) + macros Jinja2 badges 2026-04-17 23:23:32 +00:00
a0f90cd719 Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers 2026-04-17 23:19:18 +00:00
MOUTAOUAKIL-ext Khalid
e2fb34f115 Sync SANEF : audit_service + schema.sql + data deploy + gitignore 2026-04-17 09:20:57 +02:00
1c661e2dc5 qualys_tags: respect qualys_bypass_proxy flag
_get_creds() ignorait le flag bypass_proxy et retournait toujours
qualys_proxy meme si l'utilisateur avait coche bypass en settings.
Comportement desormais aligne avec qualys_service._get_qualys_creds().
2026-04-17 00:28:57 +02:00
617bf94e31 Qualys agents sync: optims perf majeures (~3-5x plus rapide)
Refactor _refresh_all_agents_impl() avec 4 optimisations:

1. Pre-chargement des servers en dict Python au debut (hostname + IP)
   -> elimine 2 queries SQL par asset (gain principal)

2. UPSERT 'INSERT ... ON CONFLICT DO UPDATE' + RETURNING (xmax=0)
   -> une seule query au lieu de SELECT + INSERT/UPDATE
   -> compte created/updated via xmax

3. HTTP Session reutilisee (requests.Session)
   -> keep-alive, pas de handshake SSL a chaque page

4. ThreadPoolExecutor(5) pour executer les 5 filtres tagName en parallele
   -> dedup par asset_id pour eviter traitement double

Bonus:
- max_pages 30 -> 500 par filtre (evite syncs incomplets silencieux)
- FQDN backfill cible via cache 'servers_need_fqdn' (pas d'UPDATE inutile)
- Commit unique en fin de traitement (suppression savepoint par asset)
- Retrait age-check redondant en mode diff (deja filtre cote API)
2026-04-16 23:34:51 +02:00
f1a1ca9c7b Qualys Tags V3: unescape entites XML dans ruleText/name
Qualys renvoie les entites XML dans ruleText deja echappees (Bip&Go,
<?xml...). Jinja auto-escape les ressortait en double (<...).
Unescape iteratif (jusqu'a 3 passes) pour couvrir le double-escape.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 15:40:04 +02:00
79a2cc896e Qualys diff: format ISO sans microsec YYYY-MM-DDTHH:MM:SSZ (compat API QPS) 2026-04-15 14:28:57 +02:00
7924e64616 Qualys diff: filtre 'updated' (searchable) au lieu de 'lastCheckedIn' (non recunu API) 2026-04-15 14:06:27 +02:00
0ebf72d789 Qualys diff sync: sauve le timestamp DES LE DEBUT (resilient si annulation) 2026-04-15 13:29:36 +02:00
935c8003b4 Qualys sync: retry 3x avec backoff sur erreurs transitoires proxy/reseau 2026-04-15 12:44:49 +02:00
a62f9a4146 Qualys sync dual mode: diff (rapide, lastCheckedIn) + full (complet)
- refresh_all_agents accepte mode='diff'|'full' (defaut diff)
- Mode diff: filtre Qualys lastCheckedIn > qualys_last_diff_sync (settings)
- Mode full: pull tous les assets (comme avant)
- Skip early-exit en diff si dernier diff < 5 min
- 2 boutons UI: 'Sync rapide (diff)' et 'Sync complete'
- JS refreshAgents(mode) passe le mode en query param
2026-04-15 12:33:48 +02:00
55f81de986 Qualys sync: fallback matching par IP integrer si hostname ne match pas 2026-04-15 12:25:27 +02:00
0dc9b07edd audit _run: retry sans sudo accepte sortie vide (pas containers/failed = OK, pas erreur) 2026-04-15 12:18:35 +02:00
1a1af9e28a Qualys sync multi-pass: filtres SRV/server/SED/SEI/EMV pour couvrir tags heterogenes 2026-04-15 12:17:02 +02:00
2746188f1c audit _run: detection sudo refused plus robuste (accent-insensitive, sudo:, no tty) 2026-04-15 12:12:22 +02:00
53d4f71607 LDAP: restriction groupe AD + auto-provisioning users (sans permissions)
- Settings ldap_required_group (DN groupe autorise) + ldap_default_role
- ldap_authenticate verifie memberOf vs required_group avant bind
- auth.py: si user inconnu + LDAP + groupe OK -> auto-create user, role default,
  zero permission (admin doit assigner via /users)
2026-04-15 11:45:33 +02:00
ec7712f0c9 Add module Qualys Tags V3: catalogue YAML + service + pages /qualys/tagsv3 et /gap
- deploy/qualys_tags_v3.yaml: catalogue 19 DYN + 6 SPEC manuel + prefixes
- app/services/qualys_tags_service.py: list/analyze_gap/create_static/delete via API
- app/routers/qualys_tags.py: routes /qualys/tagsv3 et /gap
- templates: qualys_tagsv3.html (liste) + qualys_tagsv3_gap.html (diff catalogue)
- Route /qualys/tagsv3/create-all-static pour creer les STAT manquants en bulk
- DYN manquants affiches avec QQL copy-paste pour console Qualys (API ne permet pas)
- PyYAML ajoute aux requirements
2026-04-15 10:14:10 +02:00
105a756008 Qualys hostname: retour a priorite name (sauf IP/localhost/vide), fqdn/netbios en fallback 2026-04-15 01:38:56 +02:00
c7291d3e6d Qualys _parse_assets_full: hostname FQDN > NetBIOS > name (fix aussi cette fonction) 2026-04-15 01:20:28 +02:00
71260e20c3 Qualys sync: hostname depuis FQDN > NetBIOS > name (evite troncature display name) 2026-04-15 01:11:08 +02:00
7eb56bc9cd Qualys sync: filtre SRV au lieu de server (matche OS-WIN-SRV/OS-LIN-SRV DYN SANEF v3) 2026-04-15 01:00:37 +02:00
7480bbf5ac audit _run: fallback sans sudo si sudoers refuse bash -c (commandes read-only OK sans root) 2026-04-15 00:26:42 +02:00
3c4244597c Audit: ThreadPoolExecutor avec parallel borne (evite saturation DB/PSMP) 2026-04-15 00:20:12 +02:00
596276441b audit realtime: route via PSMP CyberArk si ssh_method=ssh_psmp
Nouvelle fonction _connect_via_psmp avec auth_interactive Vault Password,
lookup ssh_method par hostname avant _connect. Fallback SSH direct si
PSMP echoue.
2026-04-14 23:48:00 +02:00
9b3840bfa6 audit realtime: FQDN base = retour direct (plus de check port 22), boucle suffixes uniquement en fallback 2026-04-14 23:30:47 +02:00
e2b984c2c4 Servers: filtre licence (active/obsolete/els/sans licence) 2026-04-14 22:17:09 +02:00
4300eb1210 Fix zone filter: subquery sur zone_id (count query n'a pas le JOIN zones) 2026-04-14 21:17:56 +02:00