# Installation ## Prérequis - VPS **Debian 13**, accès root (ou un compte avec `sudo`). - Le dépôt cloné dans le `$HOME` d'un utilisateur **non-root** dédié à ce projet (ex. `banisher`) — `install.sh`/`make install` déterminent cet utilisateur à partir du propriétaire réel du dépôt (`stat -c '%U' `), jamais codé en dur. Contrepartie assumée : l'utilisateur reçoit un accès `sudo` complet (`NOPASSWD:ALL`), à réserver à un compte strictement dédié à ce projet. ```sh git clone ~/Fail2banMqttActionBanisher cd ~/Fail2banMqttActionBanisher ``` ## Développement (sans fail2ban/iptables réels) Nécessite un Redis accessible (channel layer Django Channels), par exemple `docker run -p 6379:6379 redis`. ```sh make run # tableau de bord + carte, http://127.0.0.1:8000/ make mqtt # dans un second terminal : ingestion MQTT make worker # dans un troisième terminal : géolocalisation asynchrone ``` Ces cibles créent automatiquement le venv Python (`emitter/.venv`) et installent les dépendances au premier lancement. Variables d'environnement (`MQTT_BROKER_HOST`, `MQTT_BROKER_USERNAME`, `MQTT_BROKER_PASSWORD`, `REDIS_HOST`, `REDIS_PORT`, ...) : copier `.env.example` vers `.env` à la racine du dépôt et l'éditer — chargé automatiquement par Django (`python-dotenv`), rien à exporter à la main. ## Premier noeud en production !!! warning "À adapter impérativement avant `make install`" `generic/firewall/firewall-filters.conf` et les fichiers de `generic/fail2ban/jail.d/` proviennent du serveur de référence (`miraceti-vps1`, un master) et contiennent des règles qui lui sont propres (OpenVPN, Coturn, WireGuard, Portainer, IP publique codée en dur, `DOCKER-USER`...). Sur un simple noeud, ne garder que ce qui est réellement exposé (typiquement SSH + 80/443) — les sections superflues réfèrent des interfaces (`$VPN_IF`, `$WG_IF`) absentes d'un noeud, ce qui produit des erreurs `iptables` silencieuses (le script continue, mais la règle voulue n'est jamais posée). Vérifier aussi `ETH_IF` dans `generic/firewall/firewall-launcher.sh` (nom réel de l'interface : `ip -o link show`) et désactiver `ufw` s'il est présent (coexister avec les règles `iptables` posées ici casserait l'un des deux jeux de règles de façon imprévisible). ```sh sudo make install sudo make status ``` Déploie et active : paquets système (fail2ban, iptables, mosquitto, Redis), pare-feu, jails fail2ban personnalisées, broker Mosquitto local, et les quatre services de l'émetteur Django (web, ingestion MQTT, worker Celery, relais vers le master). Idempotent : relancer `sudo make install` après un `git pull` réapplique dépendances/migrations et redémarre les services concernés. Éditer `/etc/fail2ban/mqtt.conf` (identifiants MQTT réels, copié depuis `generic/fail2ban/mqtt.conf.example` s'il n'existe pas encore) avant le premier déploiement. Un noeud fraîchement installé fonctionne déjà en autonome (détection et ban locaux) ; le relais vers un master (`fail2ban-emitter-master-client`) tentera de se connecter en boucle tant qu'aucun certificat de noeud n'a été obtenu — voir [Déploiement en production](deployment.md) pour la suite.