Documentation
Guide d'installation et d'utilisation de l'agent DenyGrid et de ses plugins.
Installation de l'agent
Prérequis
- OS : Debian 8+ à 13+, Ubuntu, RHEL, CentOS
- Arch : x86_64, ARM
- Python : 3.5+
- Privilèges : root (pour la lecture des logs)
Installation automatique
Avec clé d'inscription (recommandé)
Récupérez votre clé d'inscription depuis Mon profil → Clé d'inscription machines dans le dashboard, puis :
# Installe l'agent avec enrôlement automatique (pas besoin de validation admin)
curl -sSL https://denygrid.com/client/install.sh | sudo bash -s -- --key VOTRE_CLE
# Installer tous les plugins
curl -sSL https://denygrid.com/client/update_plugins.sh | sudo bash
Sans clé d'inscription (validation admin)
# Installe l'agent + service systemd
curl -sSL https://denygrid.com/client/install.sh | sudo bash
# Installer tous les plugins
curl -sSL https://denygrid.com/client/update_plugins.sh | sudo bash
L'agent s'installe dans /opt/security-monitor/ et crée un service systemd security-monitor.
Installation manuelle
mkdir -p /opt/security-monitor
cd /opt/security-monitor
curl -sSL https://denygrid.com/client/agent.py -o agent.py
curl -sSL https://denygrid.com/client/config.json.example -o config.json
chmod 600 config.json
# Éditer config.json avec votre clé API
nano config.json
Configuration
Le fichier /opt/security-monitor/config.json contient toute la configuration :
{
"api_url": "https://denygrid.com/api",
"api_key": "",
"enrollment_key": "",
"machine_alias": "Production Server",
"scan_interval": 60,
"auto_register": true,
"auto_update": true,
"verify_ssl": true,
"plugins": {
"http": { "enabled": true },
"firewall": { "enabled": true },
"ftp": { "enabled": false },
"smtp": { "enabled": false },
"mysql": { "enabled": false },
"pam": { "enabled": false }
}
}
| Option | Description | Défaut |
|---|---|---|
api_url | URL de l'API du serveur DenyGrid | — |
api_key | Clé API (générée automatiquement après enrôlement) | vide |
enrollment_key | Clé d'inscription pour auto-approbation (depuis Mon profil) | vide |
machine_alias | Nom affiché dans le dashboard | hostname |
scan_interval | Fréquence de collecte en secondes | 60 |
auto_register | Inscription automatique de la machine | true |
auto_update | Mise à jour automatique de l'agent | true |
verify_ssl | Vérifier le certificat SSL du serveur | true |
--key à l'installation, la clé API est générée et configurée automatiquement. Sans clé d'inscription, la machine requiert une approbation manuelle par un administrateur. Vous pouvez régénérer votre clé à tout moment depuis votre profil (l'ancienne sera invalidée).Mise à jour
| Quoi | Commande |
|---|---|
| Agent seul | curl -sSL https://denygrid.com/client/update_agent.sh | sudo bash |
| Tous les plugins | curl -sSL https://denygrid.com/client/update_plugins.sh | sudo bash |
| Plugin spécifique | curl -sSL .../client/install_plugin_http.sh | sudo bash |
Le script de mise à jour crée un backup automatique et conserve la configuration.
Plugin SSH intégré
La collecte SSH est intégrée à l'agent — aucun plugin à activer.
| Event type | Description |
|---|---|
ssh_failed | Tentative de connexion échouée |
ssh_invalid_user | Utilisateur inexistant |
ssh_success | Connexion réussie |
ssh_closed | Connexion fermée |
Sources de logs : /var/log/auth.log, /var/log/secure, journalctl -u sshd
Plugin HTTP / WordPress actif par défaut
Analyse les logs Apache et Nginx pour détecter les attaques web, scans, CVE et tentatives WordPress.
Configuration
"http": {
"enabled": true,
"auto_discover": true, // scan auto des répertoires de logs
"log_paths": [], // chemins manuels (optionnel)
"max_log_files": 100,
"scan_threshold": 10, // seuil 404 pour détection de scan
"scan_window": 60 // fenêtre en secondes
}
Types d'événements
| Event | Description |
|---|---|
http_sql_injection | Tentative d'injection SQL |
http_xss_attempt | Tentative XSS |
http_suspicious_path | Chemin suspect (traversal, config...) |
http_scan_detected | Scan de répertoires (burst 404) |
http_ddos_detected | DDoS (100+ req/5min par IP) |
http_slowloris_detected | Attaque Slowloris |
http_backdoor_detected | Tentative d'accès backdoor |
http_cve_* | Exploitation CVE (Log4j, Spring4Shell...) |
wp_login_failed | Échec connexion WordPress |
wp_xmlrpc_attack | Attaque XML-RPC |
wp_brute_force | Brute force wp-login |
wp_plugin_scan | Scan de plugins WordPress |
wp_shell_upload | Tentative d'upload de shell |
Répertoires scannés : /var/log/apache2, /var/log/nginx, /var/log/httpd
Listes CrowdSec : 1080+ patterns inclus (587 user-agents, 209 backdoors, 93 données sensibles, CVE).
Plugin FTP opt-in
Surveille vsftpd, proftpd et pure-ftpd.
Activation
# Via le script d'installation (recommandé)
curl -sSL https://denygrid.com/client/install_plugin_ftp.sh | sudo bash
# Ou manuellement dans config.json
"ftp": { "enabled": true }
| Event | Description |
|---|---|
ftp_failed | Connexion échouée |
ftp_invalid_user | Utilisateur inexistant |
ftp_success | Connexion réussie |
ftp_connect | Connexion entrante |
Plugin SMTP opt-in
Surveille Postfix, Exim4, Sendmail et Dovecot. 18 patterns de détection couvrant l'authentification, le relay, le spam et les scans.
Activation
"smtp": { "enabled": true }
Types d'événements
| Event | Description |
|---|---|
smtp_auth_failed | Échec authentification SASL |
smtp_auth_abort | Authentification interrompue |
smtp_brute_force | Brute force détecté (5+ échecs/IP) |
smtp_relay_denied | Tentative de relay refusé |
smtp_relay_scan | Scan de relay ouvert (3+ tentatives) |
smtp_scan_detected | Scan SMTP |
smtp_spam_attempt | Tentative de spam (10+ envois) |
smtp_rate_abuse | Dépassement de débit |
smtp_tls_error | Erreur TLS |
smtp_helo_rejected | HELO/EHLO rejeté |
Sources : /var/log/mail.log, /var/log/maillog, journalctl -u postfix -u exim4
Plugin MySQL opt-in
Surveille MySQL et MariaDB : échecs d'authentification, injections SQL, abus de privilèges.
Activation
"mysql": {
"enabled": true,
"monitor_queries": false // true = surveille aussi les requêtes dangereuses
}
Types d'événements
| Event | Description |
|---|---|
mysql_auth_failed | Access denied |
mysql_brute_force | Brute force détecté |
mysql_root_attempt | Connexion root depuis le réseau |
mysql_sql_injection | Requête dangereuse (DROP, LOAD DATA...) |
mysql_privilege_abuse | Escalade de privilèges |
mysql_connect_scan | Scan de port MySQL |
Sources : /var/log/mysql/error.log, /var/log/mariadb/mariadb.log, journalctl -u mysql -u mariadb
Plugin PAM / Système opt-in
Surveille les authentifications système : sudo, su, cron, sessions PAM.
Activation
"pam": {
"enabled": true,
"monitor_cron_exec": false // true = surveille les exécutions cron
}
Types d'événements
| Event | Description |
|---|---|
pam_auth_failed | Échec d'authentification PAM |
pam_brute_force | Brute force PAM détecté |
pam_sudo_failed | Commande sudo refusée |
pam_su_failed | Changement d'utilisateur refusé |
pam_account_locked | Compte verrouillé |
pam_account_expired | Compte expiré |
system_login_failed | Échec de connexion système |
Sources : /var/log/auth.log, /var/log/secure, journalctl -t sudo -t su -t login
Plugin Firewall actif par défaut
Applique automatiquement les bans du dashboard via iptables. Récupère la blacklist toutes les 5 minutes.
Configuration
"firewall": {
"enabled": true,
"check_interval": 300, // secondes entre chaque sync
"backend": "iptables",
"auto_unban": true, // deban auto quand retiré du dashboard
"chain_name": "SECURITY_MONITOR"
}
Vérification
# Voir les règles actives
iptables -L SECURITY_MONITOR -n -v
# Compter les IPs bannies
iptables -L SECURITY_MONITOR -n | grep DROP | wc -l
iptables installé.Auto-ban
Le système détecte automatiquement les IPs malveillantes et les bannit selon des règles configurables depuis le dashboard (Menu → Auto-ban).
Règles par défaut
| Règle | Seuil | Fenêtre | Durée du ban |
|---|---|---|---|
| Brute Force SSH | 3 events | 15 min | 5 jours |
| CVE HTTP | 3 events | 15 min | 30 jours |
| Attaques HTTP | 5 events | 15 min | 7 jours |
| Brute Force FTP | 5 events | 30 min | 1 jour |
| Brute Force SMTP | 5 events | 15 min | 1 jour |
| SMTP Scan | 3 events | 15 min | 7 jours |
| SMTP Relay Abuse | 5 events | 30 min | 2 jours |
| SMTP Spam / Rate | 10 events | 1h | 7 jours |
Options avancées
- Récidive : une IP déjà bannie est rebannie dès la première tentative
- Ban permanent : après N bans (défaut 3), le prochain est définitif
- Graduation : durée × multiplicateur à chaque récidive
- Tor/VPN : seuils réduits pour les IPs identifiées Tor ou VPN
Dépannage
L'agent ne démarre pas
# Vérifier le statut
systemctl status security-monitor
# Voir les logs
journalctl -u security-monitor -f
# Tester manuellement
python3 /opt/security-monitor/agent.py
Les plugins ne se chargent pas
# Vérifier les logs
journalctl -u security-monitor | grep -i plugin
# Vérifier les permissions
ls -la /opt/security-monitor/plugins/
# Mettre à jour le système de plugins
curl -sSL https://denygrid.com/client/update_agent.sh | sudo bash
Les IPs ne sont pas bannies automatiquement
- Vérifier les règles dans le dashboard (Menu → Auto-ban)
- Vérifier que l'IP n'est pas whitelistée
Le dashboard est lent
- Utiliser le mode Cache dans la page Événements
- Augmenter
innodb_buffer_pool_sizedans la config MySQL
Buffer bloqué
# Vérifier la taille du buffer
ls -lh /opt/security-monitor/log_buffer.json
# Si trop volumineux, réinitialiser
sudo systemctl stop security-monitor
sudo rm /opt/security-monitor/log_buffer.json
sudo systemctl start security-monitor