# Variables d'environnement de l'émetteur Django et des scripts associés. # # Copié une seule fois vers .env par install.sh (jamais committé, cf. # .gitignore) — jamais régénéré automatiquement ensuite pour ne pas écraser # des valeurs déjà personnalisées ; DJANGO_SECRET_KEY est généré aléatoirement # à la création, FAIL2BAN_CLIENT_PATH est résolu et mis à jour à chaque # exécution de install.sh. # # Lu par systemd (EnvironmentFile=.env dans generic/emitter/*.service) ET # directement par Django via python-dotenv (config/settings/base.py), pour # que `manage.py ...` en dev/CLI lise les mêmes valeurs sans avoir à les # exporter manuellement. DJANGO_SECRET_KEY=changeme # Domaine public du tableau de bord derrière nginx (reverse proxy TLS) — # laisser vide si le dashboard n'est accessible qu'en local/VPN, sans nginx # devant. "sudo make install-nginx" lit cette valeur pour déployer le # vhost, obtenir le certificat Let's Encrypt, et met à jour # DJANGO_ALLOWED_HOSTS/DJANGO_CSRF_TRUSTED_ORIGINS/DJANGO_SECURE_SSL # ci-dessous automatiquement — ne pas les éditer à la main si vous # utilisez cette commande, elle les écrase à chaque exécution. DASHBOARD_DOMAIN= # Page publique /communaute/ (master uniquement, désactivée par défaut) : # formulaire de demande d'inscription à la communauté, jamais de jeton # émis sans validation manuelle dans /admin/. Nécessite DEFAULT_FROM_EMAIL # ci-dessous pour que l'email de validation puisse partir. COMMUNITY_ENROLLMENT_ENABLED=false DEFAULT_FROM_EMAIL= # Optionnel : reçoit une notification (mail_admins) à chaque nouvelle # demande d'inscription, en plus de sa visibilité dans /admin/. Vide = # pas de notification envoyée (la demande reste quand même visible). ADMIN_EMAIL= DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost # Domaines complets (avec schéma) à autoriser en CSRF derrière un reverse # proxy TLS (ex. nginx, voir generic/nginx/) — ex. https://dashboard.example.org DJANGO_CSRF_TRUSTED_ORIGINS= # Base de données : "sqlite" (défaut), "mariadb" (voir "sudo ./install.sh # install-mariadb") ou "postgresql" (provisionnement manuel du serveur/de # la base pour l'instant, pas de sous-commande install.sh dédiée — driver # emitter/requirements-postgresql.txt à installer à la main dans le venv). # DB_* n'a d'effet qu'avec DB_ENGINE=mariadb ou postgresql. DB_PORT par # défaut ci-dessous (3306) est celui de mariadb : à changer en 5432 pour # postgresql (ou laisser vide, config/settings/production.py retombe déjà # sur 5432 si DB_PORT est absent). DB_ENGINE=sqlite DB_NAME=fail2ban_emitter DB_USER=fail2ban_emitter DB_PASSWORD=banishing DB_HOST=127.0.0.1 DB_PORT=3306 MQTT_BROKER_HOST=127.0.0.1 MQTT_BROKER_PORT=1883 MQTT_BROKER_USERNAME=emitter MQTT_BROKER_PASSWORD=banishing # IP du second listener mosquitto local (en plus de 127.0.0.1), sur le # réseau VPN de confiance de CE VPS — permet le développement/test de # l'émetteur depuis un poste distant connecté au même VPN. Propre à chaque # noeud (chaque VPS a sa propre IP VPN, ex. tun0) : jamais une valeur # partagée entre noeuds. Laisser vide si ce VPS n'a pas de VPN ou si l'accès # distant au broker local n'est pas souhaité : install.sh (deploy_mosquitto) # désactive alors ce second listener (loopback seul) au lieu de deviner une # IP ou de planter au démarrage de mosquitto. MQTT_VPN_LISTENER_IP= REDIS_HOST=127.0.0.1 REDIS_PORT=6379 # À passer à "true" une fois le reverse proxy TLS en place (voir # generic/nginx/fail2ban-emitter.example.conf) — le forcer sans proxy TLS # devant l'émetteur casserait tout (boucle de redirection, cookies rejetés). DJANGO_SECURE_SSL=false # Résolu automatiquement par install.sh (command -v fail2ban-client) ; doit # rester cohérent avec le chemin réel de fail2ban-client sur ce système. FAIL2BAN_CLIENT_PATH=/usr/bin/fail2ban-client # Interface réseau WAN de CE noeud (generic/firewall/firewall-launcher.sh, # lu par firewall.service via EnvironmentFile=) — ajouté une seule fois par # install.sh (détection : interface de la route par défaut), jamais # réécrit ensuite. Corriger ici si erroné (ip -o link show), en particulier # sur une interface au nommage prévisible (enp1s0, ens18...) plutôt que # l'ancien défaut historique "eth0". ETH_IF=eth0 # À définir UNIQUEMENT si ce noeud est directement sur un réseau local # (ex. derrière une box résidentielle, ETH_IF = aussi l'interface LAN) — # exempte ce sous-réseau du filtre anti-spoof de firewall-launcher.sh, # qui sinon droppe silencieusement le trafic local légitime (NAT # loopback/hairpin de la box, autre appareil du LAN) en le confondant # avec une IP source usurpée. Laisser vide sur un VPS à IP publique # dédiée (comportement inchangé). LAN_NET= # AbuseIPDB (REPORT_ABUSE, Phase 4, manage.py publish_command REPORT_ABUSE # , master uniquement) — laisser ABUSEIPDB_ENABLED=false (défaut) ou # ABUSEIPDB_API_KEY vide tant que vous ne voulez pas soumettre de vrais # rapports publics : la commande tombe alors en dry-run, journalise ce # qu'elle aurait envoyé sans rien transmettre. Clé obtenue sur # https://www.abuseipdb.com/account/api. ABUSEIPDB_ENABLED=false ABUSEIPDB_API_KEY= # Relais vers le broker master (Phase 2.b/4, mTLS) — voir # scripts/generate-node-cert.sh. MQTT_MASTER_CLIENT_CERT/KEY et # MQTT_MASTER_LISTENER_CERT/KEY ont des valeurs par défaut dans # config/settings/base.py (emitter/master-tls/*.{crt,key}) ; les redéfinir # ici seulement si les certificats vivent ailleurs. MQTT_MASTER_HOST=mqtt.domain.net MQTT_MASTER_PORT=8883 MQTT_MASTER_NODE_NAME= # Lien vers le dashboard du master, affiché dans la sidebar de CE noeud # (ex. https://banishing.domain.net, sans slash final) — laisser vide sur # le master lui-même. Un seul lien hiérarchique (client -> master), pas de # liens croisés entre noeuds (essayé puis abandonné, ne passe pas à # l'échelle avec beaucoup de clients abonnés). MASTER_DASHBOARD_URL= # Largeur de la sidebar du dashboard (CSS, ex. "220px" ou "16rem") — à # élargir si le roster (Phase 3) fait grandir le bloc "Noeuds" au point # que les libellés/alias soient tronqués. Laisser vide pour garder la # valeur par défaut du CSS (--sidebar-w, main.css). DASHBOARD_SIDEBAR_WIDTH=