
Automatize o bloqueio de bots maliciosos que tentam acessar seu servidor
Uma TUI, um console web e uma CLI que ajudam você a configurar seu servidor para bloquear bots maliciosos sem se esconder atrás de um CDN.
Funciona em conjunto com o NGINX e seu firewall existente (nftables ou iptables):

O aplicativo faz o possível para não bloquear seu acesso ao servidor, mas você o usa por sua conta e risco. E observe que ele é licenciado sob AGPL, então se você o estiver usando comercialmente, certifique-se de obedecer à licença.
No Debian ou Ubuntu, a partir do repositório APT:
curl -fsSL https://ivankovic.github.io/stop-bots/key.gpg \
| sudo tee /usr/share/keyrings/stop-bots.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/stop-bots.gpg] \
https://ivankovic.github.io/stop-bots stable main" \
| sudo tee /etc/apt/sources.list.d/stop-bots.list
sudo apt update && sudo apt install stop-bots
O pacote traz man stop-bots (e uma página por verbo, como man stop-bots-batch) e
completions para bash, zsh e fish. Ele não instala nenhum serviço e não inicia nada.
Ou a partir do crates.io, com Rust 1.88 ou mais recente:
cargo install stop-bots
Ou baixe um binário estático para Linux x86_64 ou aarch64 a partir das
releases do GitHub.
install recusa um
host que não seja Debian ou um derivado.nft, ou iptables-restore e ip6tables-restore, para o
firewall; nginx para o resto. NGINX em um contêiner também funciona — veja
Executando NGINX em um contêiner.sudo stop-bots inicia a TUI. Ela precisa de root: reescreve /etc/nginx e carrega regras
de firewall.u baixa todas as listas: listas de bots, faixas de IP de crawlers e qualquer feed ou país que você
ativou.1) contém a política de todo o host: quais categorias de bots são bloqueadas,
países e os detectores que leem seus logs. Na tela do NGINX (4), r encontra seus
sites. A tela de Blocks (5) lista cada regra que os detectores ou você adicionou, e por quê.a aplica tudo. Primeiro mostra o que mudaria — os arquivos, as regras adicionadas e
removidas, e o veredito da verificação de lockout (d para o diff) — e pergunta.sudo stop-bots install firewall faz as regras aplicadas sobreviverem a um reboot. Sem isso, um
reboot volta sem nenhuma regra.sudo stop-bots status verifica o kernel, as units e os arquivos, e diz o que está
faltando.sudo stop-bots status
sudo stop-bots batch --dry-run --diff
sudo stop-bots batch --apply
sudo stop-bots install firewall
sudo stop-bots status
batch --dry-run não baixa nem analisa nada: numa instalação nova, mostra os blocos
NGINX da lista de bots incorporada no binário, e ainda nenhuma regra de firewall, porque nada
foi lido dos seus logs. sudo stop-bots batch sem --apply faz os downloads
e as análises e escreve os ficheiros para revisão sem os aplicar. Consulte
Unattended, from cron para saber o que batch faz.
sudo stop-bots uninstall all --dry-run
sudo stop-bots uninstall all
A primeira lista cada passo, a segunda executa-os. Ver Atualizar e desinstalar.
Bots conhecidos, por categoria (scanner / motor de busca / crawler de IA), provenientes das listas
Well-Known Bots da ArcJet,
ai.robots.txt e
NGINX Ultimate Bad Bot Blocker.
Bloquear uma categoria injeta uma regra if ($http_user_agent ...) na configuração NGINX
de cada site.
Demasiados pedidos, através do próprio rate limiting do NGINX.
Educadamente, primeiro — um robots.txt gerado que lista todos os bots que está a bloquear, para os
crawlers que o respeitam, mais o caminho honeypot abaixo.
Exceto onde disser o contrário — isenções de caminhos por site, e endereços e
user agents de confiança (trust), aos quais nenhum bloqueio, lista ou rate limit se aplica.
Pedidos que não parecem um navegador, por site. Seis regras independentes, cada uma com o seu interruptor e todas desligadas por predefinição — um interruptor por regra, para que se algo seu deixar de funcionar, consiga perceber qual regra o fez:
| Regra | Rejeita, além de bots |
|---|---|
| HTTP/1.0 e HTTP/1.1 | crawlers e clientes de API que não falam HTTP/2 |
Sem cabeçalho Accept | alguns clientes de API não enviam nenhum |
Sem Accept-Language | ferramentas de privacidade removem-no |
User-Agent vazio/ausente | scripts e health checks frequentemente omitem-no |
Host é um IP simples | impede aceder ao site por IP |
| TLS 1.0 / 1.1 | apenas clientes muito antigos |
Há sete escolhas:
| Opção | Para que serve |
|---|---|
403 Forbidden (predefinição) | diz que o bloqueio foi deliberado; a única sobre a qual um humano apanhado por engano pode agir |
404 Not Found | esconde que algo foi bloqueado |
410 Gone | pede a crawlers bem-comportados que descartem o URL para sempre — prefira isto ao 403 quando está a rejeitar crawlers em vez de atacantes |
429 Too Many Requests | diz a um cliente educado para recuar e tentar de novo |
418 I'm a teapot | a piada do RFC 2324. Funciona; só não está registado na IANA, e o NGINX envia-o com corpo vazio |
444 close connection | nenhuma resposta; o mais barato, mas indistinguível de o servidor estar em baixo |
Tarpit | responde 403 mas envia o corpo a um byte por segundo, para que o cliente espere em vez de avançar |
O tarpit é a opção mais suave para um falso positivo — um cliente apanhado por engano é abrandado,
não recusado — e a mais dura em custo para um bot, cuja ligação fica inativa. Uma coisa a
saber antes de o escolher: também ocupa uma das suas worker connections durante o mesmo tempo, pelo que
uma inundação de clientes em tarpit compete com visitantes reais por worker_connections.