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://bigbro.gergosnet.com/client/install.sh | sudo bash -s -- --key VOTRE_CLE
# Installer tous les plugins
curl -sSL https://bigbro.gergosnet.com/client/update_plugins.sh | sudo bash
Sans clé d'inscription (validation admin)
# Installe l'agent + service systemd
curl -sSL https://bigbro.gergosnet.com/client/install.sh | sudo bash
# Installer tous les plugins
curl -sSL https://bigbro.gergosnet.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://bigbro.gergosnet.com/client/agent.py -o agent.py
curl -sSL https://bigbro.gergosnet.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://bigbro.gergosnet.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://bigbro.gergosnet.com/client/update_agent.sh | sudo bash |
| Tous les plugins | curl -sSL https://bigbro.gergosnet.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://bigbro.gergosnet.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é.MikroTik / RouterOS v7 passerelle
Supervisez un ou plusieurs routeurs MikroTik (RouterOS v7) sans rien installer dessus. Un connecteur tourne sur une VM ou une machine Linux : il lit le journal des routeurs via l'API RouterOS, remonte les tentatives d'intrusion à DenyGrid, et redescend les bans décidés dans une address-list du routeur.
Fonctionnement
- Chaque routeur est enrôlé comme une machine DenyGrid à part entière.
- Le connecteur lit
/loget en extrait les échecs de login (SSH, Winbox, FTP, Telnet, API, web). - DenyGrid décide des bans (réputation, classification, autoban) — la logique serveur est inchangée.
- Les bans (IP et plages /24) sont poussés dans l'address-list, avec un
timeoutégal à la durée du ban. - Le routeur bénéficie ainsi de toute l'intelligence du réseau DenyGrid, pas seulement de ses propres détections.
Prérequis
- RouterOS v7.1+, joignable depuis la machine qui héberge le connecteur.
- Une VM ou machine Linux avec Python 3.7+ (Debian/Ubuntu recommandé). Elle peut superviser plusieurs routeurs.
- Votre clé d'enrôlement DenyGrid, disponible dans votre profil.
1. Préparer le routeur
À répéter sur chaque routeur. Remplacez A.B.C.D par l'adresse IP de la machine qui héberge le connecteur.
Groupe à privilèges minimaux
/user group add name=denygrid-api \
policy=read,write,api \
comment="DenyGrid connector - least privilege"
Compte de service, verrouillé sur l'IP du connecteur
/user add name=denygrid-svc group=denygrid-api \
password="MOT_DE_PASSE_FORT" \
address=A.B.C.D/32 \
comment="DenyGrid connector"
Activer l'API binaire chiffrée (port 8729)
/certificate add name=denygrid-api common-name=router days-valid=3650
/certificate sign denygrid-api
/ip service set api-ssl certificate=denygrid-api disabled=no address=A.B.C.D/32
On utilise l'API binaire dédiée : le service web (www/www-ssl) reste éteint. Le certificat étant auto-signé, laissez "verify_tls": false pour ce routeur dans la configuration du connecteur.
Journalisation des échecs de login
/system logging action set memory memory-lines=1000
RouterOS journalise déjà les échecs de login. Augmenter la profondeur du buffer évite de perdre des tentatives entre deux relevés.
Règle de blocage
// passerelle
/ip firewall raw add chain=prerouting action=drop \
src-address-list=denygrid-blocked comment=denygrid-managed
Le connecteur crée cette règle automatiquement au premier passage — inutile de la saisir. Elle est placée dans raw/prerouting : les IP bannies sont rejetées avant le suivi de connexions, ce qui protège aussi le trafic routé, donc le réseau situé derrière le routeur.
2. Installer le connecteur
Sur la VM Linux. L'installeur détecte s'il tourne en root ou sans privilèges, installe les dépendances dans un environnement Python isolé, génère la configuration en mode interactif (clé d'enrôlement puis premier routeur), et met en place le service.
Avec les droits root (installation système, service systemd)
curl -sSLO https://bigbro.gergosnet.com/client/mikrotik-connector/install.sh
chmod +x install.sh && sudo ./install.sh
Sans aucun privilège (installation dans votre dossier personnel)
curl -sSLO https://bigbro.gergosnet.com/client/mikrotik-connector/install.sh
chmod +x install.sh && ./install.sh
Sur une machine sans sudo, passez root avec su - puis lancez l'installeur.
Ce que fait l'installeur selon le contexte
| Root | Sans root | |
|---|---|---|
| Dossier | /opt/denygrid-mikrotik | $HOME/denygrid-mikrotik |
| Dépendances | environnement Python isolé (venv) | venv, sinon pip --user |
| Compte | compte système dédié denygrid | l'utilisateur courant |
| Service | systemd | systemd utilisateur, sinon cron @reboot |
3. Ajouter d'autres routeurs
Un même connecteur supervise autant de routeurs que nécessaire. La commande est interactive et redémarre le service.
sudo ./install.sh --add-router
Vérifier que tout fonctionne
- Chaque routeur apparaît dans Machines, avec la version
mikrotik/…comme agent. - Provoquez un échec de connexion SSH sur le routeur : la tentative doit remonter dans Événements en moins d'une minute.
- Côté routeur, la liste des bans doit se remplir :
/ip firewall address-list print count-only where list=denygrid-blocked - Suivre l'activité du connecteur :
journalctl -u denygrid-mikrotik -f
Réglages disponibles
Le fichier config.json est généré par l'installeur. Ces options par routeur sont facultatives — les valeurs par défaut conviennent à la plupart des cas.
| Option | Défaut | Rôle |
|---|---|---|
poll_interval | 60 | Période de relevé des journaux, en secondes. |
sync_interval | 300 | Intervalle minimal entre deux synchronisations complètes de l'address-list. La lecture complète coûte cher : l'espacer garde la remontée des tentatives réactive. |
push_delay_ms | 5 | Pause entre deux écritures vers le routeur, pour ne pas le saturer lors d'un gros lot d'ajouts. |
timeout_refresh_interval | 3600 | Intervalle de rafraîchissement des durées de ban déjà en place. |
address_list | denygrid-blocked | Nom de l'address-list gérée sur le routeur. |
service_map | — | Correspondance service RouterOS → type d'événement DenyGrid. |
Bon à savoir
- Les échecs SSH et Telnet remontent en
ssh_failed, le FTP enftp_failed: ils déclenchent donc vos règles d'autoban existantes sans configuration supplémentaire. Winbox, l'API et le web utilisent des typesmikrotik_*; pour qu'ils déclenchent un ban, ajoutez ces types à une règle d'autoban. - Les bans de plage (/24) sont poussés tels quels : RouterOS gère nativement le CIDR.
- Un routeur injoignable n'empêche pas les autres de fonctionner. La position de lecture du journal est conservée entre deux démarrages et gère les redémarrages du routeur.
- RouterOS n'offrant pas d'ACL par commande, le compte de service dispose de la policy
write. Le confinement repose sur le verrouillage par IP, l'absence de shell, l'impossibilité de gérer les utilisateurs et de lire les secrets.
Téléchargements
- Installeur —
install.sh - Archive complète —
.tar.gz - Documentation technique —
README.md
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://bigbro.gergosnet.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