O 8G Firewall no Nginx bloqueia requisições maliciosas no próprio servidor web, antes de o PHP, o WordPress ou o banco de dados serem carregados. Neste tutorial você instala a adaptação nG-SetEnvIf, baixa os dois arquivos de configuração e ativa o include dentro do bloco server.
O que é o 8G Firewall
O 8G Firewall é um conjunto de regras criado por Jeff Starr, do Perishable Press. Ele analisa cada pedido HTTP e compara User-Agent, query string, URI, referer, cookies e método da requisição com padrões de ataque.
Se houver correspondência, o servidor responde 403 Forbidden e o restante da stack nem entra em ação. Isso reduz carga de PHP, MySQL e plugins de segurança que só rodam depois que a aplicação já foi iniciada.
A versão original foi pensada para Apache (.htaccess e mod_rewrite). No Nginx não existe .htaccess, então a forma correta é usar dois includes: um no contexto http e outro no contexto server.
O 8G é leve (cerca de 17 KB), modular e gratuito. Ele serve para qualquer site no Nginx, não só WordPress.
⚠️ Importante — Não use o 7G e o 8G ao mesmo tempo: Se você já tinha configurado o firewall anteriormente pelo nosso tutorial do 7G Firewall no Nginx (Proteja o Nginx de Ataques), saiba que não é permitido usar as duas versões juntas. Antes de instalar o 8G, remova completamente os arquivos e os includes da versão antiga (
7g-firewall.confe7g.conf) para evitar duplicidade de processamento e conflitos de regras no servidor.
Por que usar a versão nG-SetEnvIf
A adaptação recomendada para Nginx é o projeto nG-SetEnvIf, um fork das regras oficiais. No Apache esse fork troca mod_rewrite por SetEnvIf. No Nginx ele usa map no contexto http e if/return no contexto server.
Essa divisão é obrigatória. Diretivas map só podem existir dentro de http { }. Os testes que devolvem 403 precisam ficar dentro de server { }.
O arquivo 8g-firewall.conf define os mapas (as regras). O arquivo 8g.conf aplica o bloqueio no virtual host. Se você colocar o segundo arquivo em conf.d/, o Nginx recusa a configuração no nginx -t.
O 8G não substitui firewall de sistema (nftables, ufw) nem o firewall do roteador. Ele atua só na camada HTTP.
Como instalar o 8G Firewall no Nginx
Este passo a passo assume um Nginx no layout Debian/Ubuntu, com prefixo em /etc/nginx e o nginx.conf já incluindo conf.d/*.conf no bloco http. Confirme isso antes de baixar os arquivos:
grep -n "conf.d" /etc/nginx/nginx.conf
Você deve ver uma linha parecida com include /etc/nginx/conf.d/*.conf; dentro de http { }. Se essa linha não existir, será preciso incluir 8g-firewall.conf manualmente no contexto http.
Crie o diretório common, que não vem criado por padrão:
mkdir -p /etc/nginx/common
Baixe o arquivo de regras para conf.d/ (contexto http):
wget -q -O /etc/nginx/conf.d/8g-firewall.conf https://github.com/t18d/nG-SetEnvIf/raw/refs/heads/develop/8g-firewall.conf
Baixe o arquivo de bloqueio para common/ (contexto server):
wget -q -O /etc/nginx/common/8g.conf https://github.com/t18d/nG-SetEnvIf/raw/refs/heads/develop/8g.conf
Não coloque 8g.conf em conf.d/. Esse diretório entra no http e as diretivas de retorno 403 não pertencem a esse contexto.
A documentação do próprio nG-SetEnvIf resume a instalação assim: no contexto http, include /path/to/8g-firewall.conf;. No server relevante, include /path/to/8g.conf;. Com os caminhos acima, o primeiro include já acontece pelo glob de conf.d.
Como incluir o 8G no bloco server
Abra o virtual host do site (em geral em /etc/nginx/sites-available/ ou num arquivo de conf.d que contenha server { }). Dentro de cada server que deve ficar protegido, adicione:
include common/8g.conf;
O caminho relativo common/8g.conf vale quando o prefixo do Nginx é /etc/nginx. Se preferir não depender disso, use o caminho absoluto /etc/nginx/common/8g.conf.
Exemplo mínimo:
server {
listen 443 ssl;
http2 on;
server_name exemplo.com www.exemplo.com;
root /var/www/exemplo.com/public;
index index.php index.html;
include common/8g.conf;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
Repita o include nos blocos server de HTTP e HTTPS se os dois atenderem o mesmo site. Sem o include no server, as regras de 8g-firewall.conf são carregadas, mas ninguém aplica o return 403.
Teste a sintaxe e recarregue:
nginx -t && systemctl reload nginx
Se o nginx -t falhar falando de map no lugar errado, o 8g-firewall.conf entrou num server. Se falhar falando de if ou return no contexto http, o 8g.conf foi parar no conf.d.
Documentação oficial do 8G Firewall
Como testar se o firewall está ativo
O 8G não mostra painel. O teste é provocar um padrão que as regras bloqueiam. Um exemplo usado pelo próprio autor é três vírgulas na URI:
curl -I "https://exemplo.com/teste,,,/"
A resposta esperada é 403. Se voltar 200, o include do 8g.conf não está no server certo ou o Nginx não foi recarregado.
Teste também uma página normal (/, um post, o checkout, o wp-admin). Firewall de aplicação erra para os dois lados: ou deixa ataque passar, ou bloqueia ferramenta legítima.
Nos logs de acesso do Nginx, os bloqueios aparecem com status 403. Vale filtrar depois de ativar:
grep ' 403 ' /var/log/nginx/access.log | tail
Falsos positivos e ajustes
O 8G é modular: cada bloco de regras pode ser comentado ou editado no 8g-firewall.conf. Sempre teste em staging antes de produção.
Pontos que costumam gerar bloqueio indevido:
- Bot da Ahrefs, se você depende desse crawler
- Plugins que usam
phpinfona query string - WebP Express, se a regra de URI com
envinterferir - Busca exata da biblioteca de mídia do WordPress com aspas (
%22) - Algumas telas de plugins de segurança no
wp-admin
Nesses casos, não desligue o firewall inteiro. Abra 8g-firewall.conf, localize o padrão no map correspondente (User-Agent, query string ou URI) e remova só aquele trecho. Depois rode nginx -t e reload de novo.
Mantenha as duas linhas de crédito no arquivo, exigência da licença:
# 8G FIREWALL
# https://perishablepress.com/8g-firewall/
O 8G complementa plugin de segurança, WAF de borda e firewall de sistema. Ele não substitui atualização de CMS, senha forte nem backup. Use só uma geração nG por site e atualize os dois arquivos quando o branch develop do nG-SetEnvIf receber regras novas.
Com 8g-firewall.conf no http, 8g.conf no server e um nginx -t limpo, o 8G Firewall no Nginx passa a barrar scans e injeções na porta da frente, sem plugin e sem .htaccess.
