Installer et exploiter l'agent
L'agent Vigie (nom technique conservé : paquet vigie, configuration /etc/vigie, sets vigie4 / vigie6) tourne en service systemd sur chaque serveur surveillé. Il fonctionne seul ; la console est un ajout.
Prérequis
Debian 11 ou 12 (Proxmox VE compris), Python 3.9 ou plus, ipset et iptables pour le mode protection. Aucune autre dépendance.
Le paquet
Archive vigie-0.3.0.tar.gz, téléchargeable depuis la console : https://vdr.vozit.dev/telechargement/agent. Son empreinte SHA-256 est affichée dans la console (Serveurs). Elle contient le code (vigie/), le script install.sh, l'unité systemd et la configuration par défaut.
Installation et mise à jour
sh install.sh # agent seul (sans console), mode observation
sh install.sh --console https://vdr.vozit.dev # relié à la console : le jeton est demandé
[--token-file FICHIER] # jeton lu dans un fichier (automatisation)
[--whitelist 203.0.113.10/32] … # IP à ne jamais bannir, option répétable
Le script :
- copie le code dans
/opt/vigieet la commandevigiedans/usr/local/sbin; - crée
/etc/vigie/vigie.jsons'il n'existe pas (jamais écrasé), puis y ajoute la sectionconsoleet les plages--whitelist; - écrit le jeton dans
/etc/vigie/console.token(droits 600) ; le jeton n'est jamais passé en argument ; - crée la base locale
/var/lib/vigie/vigie.db, active et démarre le service en mode observation ; - affiche
vigie statuset le résultat devigie console test.
Relancé sur un serveur déjà équipé, il met l'agent à jour en conservant configuration, jeton et historique.
Configuration utile
{
"mode": "observation",
"whitelist": ["127.0.0.0/8", "::1/128", "IP_ADMIN/32"],
"console": { "url": "https://vdr.vozit.dev", "token_file": "/etc/vigie/console.token" },
"integrity": { "paths": [ … ], "exclude": [ … ] },
"rootcheck": { "suspect_exclude": ["/root/.vscode-server/*", "/opt/mon-outil/.bin/*"] }
}
rootcheck.suspect_exclude : binaires à ne pas signaler comme « processus suspect » (motifs). Par défaut, les serveurs distants de VS Code et Cursor (.vscode-server, .vscode-server-insiders, .cursor-server, sous /root et /home/*). Une liste dans la configuration remplace la liste par défaut : recopiez-la pour la compléter.
ca_file (facultatif dans console) : autorité de certification dédiée. Sans lui, le magasin du système est utilisé. La vérification TLS ne peut pas être désactivée.
Commandes
| Commande | Rôle |
|---|---|
vigie status | mode, alertes 24 h, bans, état de l'envoi vers la console |
vigie alerts --since 7j --min haute | alertes locales |
vigie bans / vigie unban IP | bans en cours / lever un ban |
vigie check | lance une fois intégrité et recherche de rootkits |
vigie baseline list / vigie baseline accept [CHEMIN] | empreintes de référence ; accepter un changement légitime |
vigie console test | envoie un battement de cœur et affiche la réponse |
vigie replay FICHIERS… | rejoue des journaux archivés, sans rien bannir |
Après une mise à jour du système
Une mise à jour de paquets modifie des fichiers surveillés : des alertes integrite_fichier apparaissent. Vérifiez qu'elles correspondent à la mise à jour, puis vigie baseline accept.
Ce que l'agent surveille
Journaux d'accès (SSH, Proxmox, messagerie, bases de données, FTP), journaux web nginx et Apache, comptes et privilèges, intégrité des fichiers, rootkits et persistance, ports en écoute, fichiers SUID, modules noyau, commandes suspectes, mises à jour de sécurité et durcissement. Le détail des scénarios et des réglages est dans le README.md de l'archive.
Réglages utiles :
| Clé | Usage |
|---|---|
web.paths, web.exclude | journaux web à suivre (découverte automatique des emplacements nginx et Apache usuels) |
web.webshell_ignore | scripts légitimes à ne pas prendre pour des webshells (ex. un adminer.php voulu) |
privileges.privileged_groups | groupes dont l'ajout déclenche une alerte |
services.paths | journaux de services hors journald |
sca.exclude | contrôles de durcissement à ignorer (sans objet sur ce serveur) |
hostwatch.suid_exclude | dossiers exclus du parcours des fichiers SUID |
Proxy inverse : si le serveur web est derrière un proxy, les journaux portent l'IP du proxy. Mettez-la en liste blanche, ou faites journaliser l'IP réelle (mod_remoteip pour Apache, real_ip pour nginx) : sinon le proxy serait banni.
Faux positifs
- Un changement légitime de fichier surveillé :
vigie baseline accept CHEMIN. - Un outil légitime lancé depuis un dossier caché : ajoutez son chemin à
rootcheck.suspect_exclude, puissystemctl restart vigie. - Dans la console, acquittez les alertes concernées avec un commentaire (« faux positif : … ») : il reste tracé.
Réinstallation
Si /var/lib/vigie/vigie.db est supprimée, la numérotation des alertes repart de zéro. Dans la console, changez le jeton en cochant « l'agent a été réinstallé ».
Dépannage
| Symptôme | Piste |
|---|---|
| Serveur « jamais vu » | vigie console test ; vérifier l'URL, le jeton, le pare-feu sortant (443) |
| 401 | jeton révoqué ou mal recopié, ou IP source hors des IP autorisées du serveur |
| Serveur « muet » | systemctl status vigie, journalctl -u vigie -n 50 |
| Écart d'horloge signalé | activer NTP (timedatectl set-ntp true) |