Retour au site

Documentation

Guide d'installation et d'utilisation de l'agent DenyGrid et de ses plugins.

Installation de l'agent

Prérequis

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
Avec la clé d'inscription, la machine est automatiquement approuvée et rattachée à votre compte. La clé API est générée et configurée sans intervention.

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
Sans clé d'inscription, la machine apparaît en « attente de validation » dans le dashboard. Un administrateur doit l'approuver manuellement.

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 }
  }
}
OptionDescriptionDéfaut
api_urlURL de l'API du serveur DenyGrid
api_keyClé API (générée automatiquement après enrôlement)vide
enrollment_keyClé d'inscription pour auto-approbation (depuis Mon profil)vide
machine_aliasNom affiché dans le dashboardhostname
scan_intervalFréquence de collecte en secondes60
auto_registerInscription automatique de la machinetrue
auto_updateMise à jour automatique de l'agenttrue
verify_sslVérifier le certificat SSL du serveurtrue
La clé d'inscription est disponible dans le dashboard : Mon profil → Clé d'inscription machines. Si vous utilisez l'option --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

QuoiCommande
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 typeDescription
ssh_failedTentative de connexion échouée
ssh_invalid_userUtilisateur inexistant
ssh_successConnexion réussie
ssh_closedConnexion 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

EventDescription
http_sql_injectionTentative d'injection SQL
http_xss_attemptTentative XSS
http_suspicious_pathChemin suspect (traversal, config...)
http_scan_detectedScan de répertoires (burst 404)
http_ddos_detectedDDoS (100+ req/5min par IP)
http_slowloris_detectedAttaque Slowloris
http_backdoor_detectedTentative d'accès backdoor
http_cve_*Exploitation CVE (Log4j, Spring4Shell...)
wp_login_failedÉchec connexion WordPress
wp_xmlrpc_attackAttaque XML-RPC
wp_brute_forceBrute force wp-login
wp_plugin_scanScan de plugins WordPress
wp_shell_uploadTentative 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 }
EventDescription
ftp_failedConnexion échouée
ftp_invalid_userUtilisateur inexistant
ftp_successConnexion réussie
ftp_connectConnexion 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

EventDescription
smtp_auth_failedÉchec authentification SASL
smtp_auth_abortAuthentification interrompue
smtp_brute_forceBrute force détecté (5+ échecs/IP)
smtp_relay_deniedTentative de relay refusé
smtp_relay_scanScan de relay ouvert (3+ tentatives)
smtp_scan_detectedScan SMTP
smtp_spam_attemptTentative de spam (10+ envois)
smtp_rate_abuseDépassement de débit
smtp_tls_errorErreur TLS
smtp_helo_rejectedHELO/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

EventDescription
mysql_auth_failedAccess denied
mysql_brute_forceBrute force détecté
mysql_root_attemptConnexion root depuis le réseau
mysql_sql_injectionRequête dangereuse (DROP, LOAD DATA...)
mysql_privilege_abuseEscalade de privilèges
mysql_connect_scanScan 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

EventDescription
pam_auth_failedÉchec d'authentification PAM
pam_brute_forceBrute force PAM détecté
pam_sudo_failedCommande sudo refusée
pam_su_failedChangement d'utilisateur refusé
pam_account_lockedCompte verrouillé
pam_account_expiredCompte 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
Le plugin Firewall nécessite les privilèges root et 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

  1. Chaque routeur est enrôlé comme une machine DenyGrid à part entière.
  2. Le connecteur lit /log et en extrait les échecs de login (SSH, Winbox, FTP, Telnet, API, web).
  3. DenyGrid décide des bans (réputation, classification, autoban) — la logique serveur est inchangée.
  4. Les bans (IP et plages /24) sont poussés dans l'address-list, avec un timeout égal à la durée du ban.
  5. Le routeur bénéficie ainsi de toute l'intelligence du réseau DenyGrid, pas seulement de ses propres détections.

Prérequis

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.

Le modèle de permissions de RouterOS est par policy, sans ACL par commande. Le moindre privilège est donc obtenu par un groupe restreint, un compte verrouillé sur l'IP du connecteur, et le service API restreint à cette même IP. Ce compte ne peut ni ouvrir de shell, ni gérer les utilisateurs, ni lire les secrets.

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

RootSans root
Dossier/opt/denygrid-mikrotik$HOME/denygrid-mikrotik
Dépendancesenvironnement Python isolé (venv)venv, sinon pip --user
Comptecompte système dédié denygridl'utilisateur courant
Servicesystemdsystemd 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

  1. Chaque routeur apparaît dans Machines, avec la version mikrotik/… comme agent.
  2. Provoquez un échec de connexion SSH sur le routeur : la tentative doit remonter dans Événements en moins d'une minute.
  3. Côté routeur, la liste des bans doit se remplir :
    /ip firewall address-list print count-only where list=denygrid-blocked
  4. 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.

OptionDéfautRôle
poll_interval60Période de relevé des journaux, en secondes.
sync_interval300Intervalle 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_ms5Pause entre deux écritures vers le routeur, pour ne pas le saturer lors d'un gros lot d'ajouts.
timeout_refresh_interval3600Intervalle de rafraîchissement des durées de ban déjà en place.
address_listdenygrid-blockedNom de l'address-list gérée sur le routeur.
service_mapCorrespondance service RouterOS → type d'événement DenyGrid.

Bon à savoir

Téléchargements

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ègleSeuilFenêtreDurée du ban
Brute Force SSH3 events15 min5 jours
CVE HTTP3 events15 min30 jours
Attaques HTTP5 events15 min7 jours
Brute Force FTP5 events30 min1 jour
Brute Force SMTP5 events15 min1 jour
SMTP Scan3 events15 min7 jours
SMTP Relay Abuse5 events30 min2 jours
SMTP Spam / Rate10 events1h7 jours

Options avancées

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

Le dashboard est lent

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
DenyGrid Security Monitor — Retour au siteDashboard