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.conf e 7g.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 phpinfo na query string
  • WebP Express, se a regra de URI com env interferir
  • 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.