# Como corrigir as regras de firewall que não aplicam no All in One Security

No All in One Security (AIOS), as regras de firewall deixam de aplicar quando o servidor não carrega o arquivo aios-bootstrap.php ou ignora o .htaccess. É comum em Nginx, LiteSpeed mal configurado e ambientes atrás de proxy ou CDN.

## O que é firewall do AIOS que não funciona?

O firewall do All in One Security tem duas camadas. A camada moderna roda como PHP através do arquivo aios-bootstrap.php, carregado antes do WordPress por uma diretiva auto_prepend_file gravada no .htaccess (Apache) ou no .user.ini (PHP-FPM). A camada legada grava regras diretamente no .htaccess, entre os marcadores que começam com BEGIN All In One WP Security. Bloqueio de país, proteção contra força bruta por cookie e bloqueio de bots dependem dessas regras estarem ativas a cada requisição. Quando o servidor não executa o bootstrap ou ignora o .htaccess, o painel mostra o firewall como ligado, mas nenhuma regra é aplicada de fato.

## Como identificar

- No painel, AIOS -> Firewall mostra as proteções marcadas como ativas, mas IPs e países bloqueados continuam acessando o site normalmente.
- O painel exibe o aviso 'The firewall is not currently set up' ou 'AIOS could not write to the configuration file', indicando que o bootstrap não foi instalado.
- O bloqueio de país (geoblocking) não barra visitantes da região configurada e o teste com VPN passa direto.
- Em servidor Nginx, nenhuma regra do firewall surte efeito, porque o Nginx não lê arquivos .htaccess.
- A linha auto_prepend_file referente ao aios-bootstrap.php está ausente no .htaccess ou no .user.ini, ou aponta para um caminho que não existe.

**Antes de começar:** Antes de editar .htaccess, .user.ini, php.ini ou wp-config.php, faça backup do arquivo original. Um erro de sintaxe em qualquer um deles pode derrubar o site inteiro com erro 500, e a diretiva auto_prepend_file apontando para um caminho inexistente impede o PHP de carregar qualquer página.

## Como prevenir

- Depois de configurar o firewall, sempre teste o bloqueio na prática (com VPN ou outro IP), nunca confie só no status do painel.
- Em Nginx e LiteSpeed, registre a diretiva auto_prepend_file diretamente na configuração do PHP, já que o .htaccess não é lido nessas pilhas.
- Mantenha a pasta wp-content/uploads/aios/firewall-rules com permissão de escrita para o usuário do servidor web, para o AIOS conseguir regravar o bootstrap a cada atualização.
- Atrás de proxy ou CDN, configure o AIOS para ler o IP real do visitante (cabeçalho encaminhado), senão as regras bloqueiam o IP errado.
- Após qualquer atualização de servidor ou troca de plugin de cache, confira se a linha do auto_prepend_file continua presente no .htaccess ou no .user.ini.

## Causa

- O site roda em Nginx (ou OpenLiteSpeed sem compatibilidade .htaccess), que ignora o .htaccess onde o AIOS grava a diretiva do firewall e as regras legadas.
- A diretiva auto_prepend_file que aponta para wp-content/uploads/aios/firewall-rules/aios-bootstrap.php foi removida do .htaccess ou do .user.ini por outro plugin de cache ou por uma atualização de servidor.
- A pasta wp-content/uploads/aios/firewall-rules não tem permissão de escrita (precisa de 0755 na pasta e 0644 nos arquivos), então o AIOS não consegue gerar nem atualizar o aios-bootstrap.php.
- O PHP-FPM está configurado para ignorar arquivos .user.ini locais (user_ini.filename vazio), impedindo o carregamento do bootstrap nessa pilha.
- Um plugin de cache em nível de página (como WP Super Cache ou um CDN de página inteira) serve HTML estático antes do PHP rodar, então o firewall PHP nunca é executado para o visitante.
- O site está atrás de um proxy ou CDN e o AIOS lê o IP errado (o IP do proxy em vez do IP real do visitante), de modo que as regras de bloqueio nunca casam com o visitante certo.

## Como resolver

1. Confirme o tipo de servidor: Antes de tudo, descubra se o site roda em Apache ou Nginx, porque a correção muda completamente. No painel do WordPress, vá em Ferramentas -> Saúde do site -> Informações e procure a seção de servidor, ou rode o comando abaixo via terminal. Se for Nginx puro, o firewall por .htaccess nunca vai aplicar e você precisa do passo 5.

```
wp eval 'echo $_SERVER["SERVER_SOFTWARE"];'
curl -sI https://seudominio.com.br | grep -i server
```

2. Verifique se o bootstrap do firewall foi gravado: O firewall moderno do AIOS só funciona se o arquivo de bootstrap existir e for carregado antes do WordPress. Confira se o arquivo está no lugar e se a diretiva que o carrega está presente no .htaccess ou no .user.ini. Se o arquivo não existir, o AIOS não conseguiu escrevê-lo.

```
ls -la wp-content/uploads/aios/firewall-rules/aios-bootstrap.php
grep -n 'auto_prepend_file' .htaccess
grep -n 'auto_prepend_file' .user.ini
```

3. Corrija as permissões da pasta do firewall: Se o arquivo de bootstrap não existe ou não atualiza, quase sempre é permissão. Ajuste a pasta para permitir escrita do AIOS e depois reinstale o firewall pelo painel. Aplique as permissões abaixo via FTP ou terminal.

```
chmod 0755 wp-content/uploads/aios/firewall-rules
chmod 0644 wp-content/uploads/aios/firewall-rules/settings.php
```

4. Reinstale o firewall pelo painel: Com as permissões corretas, force o AIOS a regravar o bootstrap e as regras. No menu do plugin, abra a área de firewall e use a opção de reinstalar ou reativar as regras. Em seguida, salve a configuração para que o plugin reescreva a diretiva no .htaccess e no .user.ini.

```
WP Security -> Firewall -> PHP Rules -> Reinstall / Re-activate
```

5. Em Nginx, carregue o bootstrap pelo php.ini ou pool do PHP-FPM: Como o Nginx ignora o .htaccess, a diretiva que carrega o firewall precisa ir para a configuração do PHP. Adicione o auto_prepend_file no php.ini ou no arquivo de pool do PHP-FPM apontando para o caminho real do bootstrap, e reinicie o serviço. Ajuste o caminho absoluto para o seu site.

```
auto_prepend_file = /var/www/seusite/wp-content/uploads/aios/firewall-rules/aios-bootstrap.php
sudo systemctl restart php8.2-fpm
sudo systemctl reload nginx
```

6. Teste o bloqueio e recupere o acesso se travar: Valide o firewall criando uma regra temporária (por exemplo, bloqueio de um país) e testando com VPN. Se você mesmo for bloqueado e ficar sem acesso ao painel, adicione a constante de emergência ao wp-config.php para desligar a prevenção por cookie e recuperar o login, conforme a documentação oficial. Coloque a linha antes do comentário That is all, stop editing do arquivo.

```
define('AIOS_DISABLE_COOKIE_BRUTE_FORCE_PREVENTION', true);
```


## Código

```apache
# BEGIN All In One WP Security
# Carrega o firewall PHP do AIOS antes do WordPress
<IfModule mod_php.c>
  php_value auto_prepend_file '/var/www/seusite/wp-content/uploads/aios/firewall-rules/aios-bootstrap.php'
</IfModule>
# Variante para PHP-FPM via .user.ini (mesma pasta do site):
# auto_prepend_file = /var/www/seusite/wp-content/uploads/aios/firewall-rules/aios-bootstrap.php
# END All In One WP Security
```

## Perguntas frequentes

### Por que o firewall do AIOS aparece ativo mas não bloqueia ninguém

Porque o painel mostra apenas a configuração salva, não se o servidor está executando as regras. Se o arquivo aios-bootstrap.php não é carregado pelo auto_prepend_file, ou se o servidor é Nginx e ignora o .htaccess, as regras existem mas nunca rodam na requisição. Teste sempre o bloqueio na prática.

### O firewall do All in One Security funciona em Nginx

Funciona, mas não automaticamente. O Nginx ignora arquivos .htaccess, onde o AIOS grava a diretiva do firewall e as regras legadas. Você precisa registrar a diretiva auto_prepend_file apontando para o aios-bootstrap.php diretamente no php.ini ou no pool do PHP-FPM, e reiniciar o serviço.

### O que é o arquivo aios-bootstrap.php

É o coração do firewall moderno do AIOS. Ele fica em wp-content/uploads/aios/firewall-rules e é carregado antes do WordPress por uma diretiva auto_prepend_file. Esse carregamento prévio permite barrar requisições maliciosas antes do PHP do WordPress iniciar. Se ele não existe ou não é carregado, o firewall PHP não aplica nada.

### Por que o bloqueio de país do AIOS não está barrando visitantes

O bloqueio de país depende das regras de firewall estarem ativas a cada requisição. Se o bootstrap não carrega, ou se um cache de página inteira serve HTML estático antes do PHP rodar, o visitante nunca passa pela checagem de geolocalização. Confirme o carregamento do firewall e exclua páginas sensíveis do cache.

### Atualizei o servidor e o firewall parou de aplicar, o que houve

Atualizações de servidor ou troca de plugin de cache costumam reescrever ou apagar o .htaccess, removendo a diretiva auto_prepend_file do AIOS. Sem ela, o bootstrap não carrega. Verifique se a linha ainda está presente no .htaccess ou no .user.ini e reinstale o firewall pelo painel do plugin.

### Como recupero o acesso se o firewall do AIOS me trancou para fora

Edite o wp-config.php via FTP e adicione a constante AIOS_DISABLE_COOKIE_BRUTE_FORCE_PREVENTION com valor verdadeiro antes da linha que diz para parar de editar. Isso desliga a prevenção por cookie e devolve o login. Em versões antigas, apagar o settings.php em wp-content/uploads/aios/firewall-rules também recupera o acesso.

### Permissão de pasta atrapalha o firewall do AIOS

Sim. Se a pasta wp-content/uploads/aios/firewall-rules não tem permissão de escrita, o AIOS não consegue gerar nem atualizar o aios-bootstrap.php, e o painel mostra o erro de que não pôde escrever a configuração. Ajuste a pasta para 0755 e os arquivos para 0644, e reinstale o firewall.

### Preciso do firewall avançado do AIOS para o básico funcionar

Não. Os níveis de firewall do AIOS são incrementais e todos dependem da mesma base: o carregamento do bootstrap e a gravação das regras. Se o nível básico já não aplica, o problema é de infraestrutura (servidor, permissão ou cache), não do nível escolhido. Resolva a base antes de subir o nível.

**Fonte:** [All in One Security — Por que estou sendo redirecionado para 127.0.0.1](https://teamupdraft.com/documentation/all-in-one-security/troubleshooting/why-am-i-being-redirected-to-127-0-0-1/)
