
Bloqueio de bots maliciosos no Nginx, bloqueador de referrers de spam, scanners de vulnerabilidades, user-agents, malware, adware, ransomware, sites maliciosos, com anti-DDOS, bloqueio do WordPress Theme Detector e jail do Fail2Ban para reincidentes.
| REPO | TORNE-SE UM PATROCINADOR |
|---|---|
| Seu logotipo e link para o seu domínio aparecerão aqui se você se tornar um patrocinador. Basta me enviar um e-mail para [email protected] se quiser patrocinar este projeto, pois a África do Sul ainda não é suportada no programa de patrocinadores do Github. | |
| Ajude a me apoiar em https://ko-fi.com/mitchellkrog |
Por favor, certifique-se de que você está inscrito nas Notificações do Github para ser notificado quando o bloqueador for atualizado ou quando mudanças importantes ou críticas (potencialmente prejudiciais) possam ocorrer.
Este é o nosso novo método preferido de instalação, que agora é feito por meio de um conjunto de scripts shell contribuídos para este repositório e mantidos por Stuart Cardall @itoffshore, que é um dos mantenedores de pacotes do Alpine Linux.
As instruções abaixo são para um processo de instalação rápido e sem complicações, que baixa todos os arquivos necessários para o bloqueador, e os scripts incluem a adição dos includes necessários aos seus arquivos nginx.conf e nginx .vhost. O script de configuração pressupõe que seus arquivos de configuração de vhost estejam localizados em /etc/nginx/sites-available/ e que cada arquivo de configuração de vhost termine com uma extensão de arquivo .vhost
Para instruções de instalação manual, consulte - Consulte: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/blob/master/MANUAL-CONFIGURATION.md
setup-ngxblocker, install-ngxblocker e update-ngxblocker podem ser configurados com locais personalizados de instalação/atualização pela linha de comando. (Veja o Passo 11 das instruções para saber como usar esses scripts e locais não padronizados do Nginx)
Execute qualquer um dos scripts de configuração, instalação ou atualização com --help ou -h para ver as opções.
OBSERVAÇÃO: Para aqueles que usam Certificados SSL Let's Encrypt, o método preferido e 100% funcional é usar o Método do Autenticador Webroot. Parece haver alguns problemas com pessoas usando o método de desafio http, mas podemos confirmar que o webroot funciona perfeitamente. Não temos certeza neste momento se o método de desafio http-01 é um bug do certbot ou do nginx.
Os relatórios de rede duplicados do Nginx NÃO são um bug nem podem ser corrigidos; este é o comportamento desejado do bloqueador. As atualizações diárias das listas negras de IP fazem com que alguns IPs e faixas conhecidos sejam colocados na lista negra old value "1", e depois eles são colocados na lista branca bem no final de globalblocklist, que é a ordem de carregamento, que então define os IPs que sabemos serem bons para seu novo value "0", colocando-os assim na lista branca. Tem sido assim desde o primeiro dia do bloqueador e continuará assim. Estas são simples mensagens [WARN], não mensagens [EMERG], e elas não afetam a operação do Nginx de forma alguma.
Baixe o install-ngxblocker para o seu diretório /usr/local/sbin/ e torne o script executável.```sh sudo wget https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -O /usr/local/sbin/install-ngxblocker sudo chmod +x /usr/local/sbin/install-ngxblocker
Se a sua distribuição Linux não tiver o wget, você pode substituir o comando wget acima usando o curl da seguinte forma:```sh
curl -sL https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -o /usr/local/sbin/install-ngxblocker
Instale o pacote.```sh pkg install www/nginx-ultimate-bad-bot-blocker
Alternativamente, instale via portmaster:```sh
portmaster www/nginx-ultimate-bad-bot-blocker
Agora execute o script install-ngxblocker em MODO DRY (DRY-MODE), que mostrará quais alterações ele fará e quais arquivos baixará para você. Isso é apenas um DRY-RUN, portanto nenhuma alteração está sendo feita ainda.
O install-ngxblocker baixa todos os arquivos necessários, incluindo os scripts de configuração e atualização.```sh cd /usr/local/sbin sudo ./install-ngxblocker
Isto mostrará o output das alterações que serão feitas
**(NOTA: isto é apenas um DRY-RUN, nenhuma alteração foi feita)**```text
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
** Dry Run ** | not updating files | run as 'install-ngxblocker -x' to install files.
Creating directory: /etc/nginx/bots.d
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/conf.d/globalblacklist.conf [TO]=> /etc/nginx/conf.d/globalblacklist.conf
Downloading [FROM]=> [REPO]/conf.d/botblocker-nginx-settings.conf [TO]=> /etc/nginx/conf.d/botblocker-nginx-settings.conf
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/bots.d/blockbots.conf [TO]=> /etc/nginx/bots.d/blockbots.conf
Downloading [FROM]=> [REPO]/bots.d/ddos.conf [TO]=> /etc/nginx/bots.d/ddos.conf
Downloading [FROM]=> [REPO]/bots.d/whitelist-ips.conf [TO]=> /etc/nginx/bots.d/whitelist-ips.conf
Downloading [FROM]=> [REPO]/bots.d/whitelist-domains.conf [TO]=> /etc/nginx/bots.d/whitelist-domains.conf
Downloading [FROM]=> [REPO]/bots.d/blacklist-user-agents.conf [TO]=> /etc/nginx/bots.d/blacklist-user-agents.conf
Downloading [FROM]=> [REPO]/bots.d/blacklist-ips.conf [TO]=> /etc/nginx/bots.d/blacklist-ips.conf
Downloading [FROM]=> [REPO]/bots.d/bad-referrer-words.conf [TO]=> /etc/nginx/bots.d/bad-referrer-words.conf
Downloading [FROM]=> [REPO]/bots.d/custom-bad-referrers.conf [TO]=> /etc/nginx/bots.d/custom-bad-referrers.conf
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/setup-ngxblocker [TO]=> /usr/local/sbin/setup-ngxblocker
Downloading [FROM]=> [REPO]/update-ngxblocker [TO]=> /usr/local/sbin/update-ngxblocker
setup-ngxblocker, install-ngxblocker e update-ngxblocker podem ser configurados com locais personalizados de instalação/atualização a partir da linha de comandos.
Execute qualquer um dos scripts de configuração, instalação ou atualização com --help ou -h para ver as opções.
Agora execute o script de instalação com o parâmetro -x para descarregar todos os ficheiros necessários do repositório:```sh cd /usr/local/sbin/ sudo ./install-ngxblocker -x
Isso lhe dará a seguinte saída:```text
Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
Creating directory: /etc/nginx/bots.d
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/conf.d/globalblacklist.conf [TO]=> /etc/nginx/conf.d/globalblacklist.conf...OK
Downloading [FROM]=> [REPO]/conf.d/botblocker-nginx-settings.conf [TO]=> /etc/nginx/conf.d/botblocker-nginx-settings.conf...OK
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/bots.d/blockbots.conf [TO]=> /etc/nginx/bots.d/blockbots.conf...OK
Downloading [FROM]=> [REPO]/bots.d/ddos.conf [TO]=> /etc/nginx/bots.d/ddos.conf...OK
Downloading [FROM]=> [REPO]/bots.d/whitelist-ips.conf [TO]=> /etc/nginx/bots.d/whitelist-ips.conf...OK
Downloading [FROM]=> [REPO]/bots.d/whitelist-domains.conf [TO]=> /etc/nginx/bots.d/whitelist-domains.conf...OK
Downloading [FROM]=> [REPO]/bots.d/blacklist-user-agents.conf [TO]=> /etc/nginx/bots.d/blacklist-user-agents.conf...OK
Downloading [FROM]=> [REPO]/bots.d/blacklist-ips.conf [TO]=> /etc/nginx/bots.d/blacklist-ips.conf...OK
Downloading [FROM]=> [REPO]/bots.d/bad-referrer-words.conf [TO]=> /etc/nginx/bots.d/bad-referrer-words.conf...OK
Downloading [FROM]=> [REPO]/bots.d/custom-bad-referrers.conf [TO]=> /etc/nginx/bots.d/custom-bad-referrers.conf...OK
REPO = https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master
Downloading [FROM]=> [REPO]/setup-ngxblocker [TO]=> /usr/local/sbin/setup-ngxblocker...OK
Downloading [FROM]=> [REPO]/update-ngxblocker [TO]=> /usr/local/sbin/update-ngxblocker...OK
Todos os arquivos necessários foram agora baixados para as pastas corretas no Nginx para você diretamente do repositório.
CERTIFIQUE-SE de definir seus scripts de configuração e atualização como executáveis executando os dois comandos a seguir. Isso é importante antes de continuar com o Passo 4 em diante.```sh sudo chmod +x /usr/local/sbin/setup-ngxblocker sudo chmod +x /usr/local/sbin/update-ngxblocker
**setup-ngxblocker, install-ngxblocker e update-ngxblocker podem todos ser configurados com locais personalizados de instalação / atualização a partir da linha de comando.**
**Execute qualquer um dos scripts setup, install ou update com --help ou -h para ver as opções.**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-4.png"/>
Agora execute o script setup-ngxblocker em DRY-MODE, que mostrará quais alterações ele fará e quais arquivos ele baixará para você. Este é apenas um DRY-RUN, portanto nenhuma alteração está sendo feita ainda.```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker
Isso lhe dará a seguinte saída (a saída abaixo pressupõe que seu arquivo nginx.conf já tenha a inclusão padrão de /etc/nginx/conf.d/*) Todas as instalações do Nginx que conheço têm essa inclusão padrão no arquivo nginx.conf distribuído com todas as versões.```text Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
** Dry Run ** | not updating files | run as 'setup-ngxblocker -x' to setup files.
INFO: /etc/nginx/conf.d/* detected => /etc/nginx/nginx.conf inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain1.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain1.com.vhost
Whitelisting ip: x.x.x.x => /etc/nginx/bots.d/whitelist-ips.conf
Este script também adiciona seu IP à lista de permissões no arquivo whitelist-ips.conf para você.
Mais IPs ou faixas de IP podem ser adicionados ao seu arquivo personalizável whitelits-ips.conf localizado em /etc/nginx/bots.d/whitelist-ips.conf.
**setup-ngxblocker, install-ngxblocker e update-ngxblocker podem ser configurados com locais personalizados de instalação / atualização pela linha de comando.**
**Execute qualquer um dos scripts de configuração, instalação ou atualização com --help ou -h para ver as opções.**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-5.png"/>
Agora execute o script de configuração com o parâmetro -x para fazer todas as alterações necessárias no seu nginx.conf (se necessário) e também adicionar os includes necessários a todos os seus arquivos vhost.
Este script setup-ngxblocker pressupõe que todos os seus arquivos vhost localizados em /etc/nginx/sites-available terminam com uma extensão .vhost. É uma boa prática fazer com que todos os seus arquivos de configuração vhost terminem com uma extensão .vhost, mas se você preferir manter o que já tem, por exemplo .conf, basta modificar a execução do setup-ngxblocker usando o parâmetro `-e` para especificar a extensão usada nos seus arquivos vhost.
Por exemplo, se seus arquivos vhost terminam em .conf, você executará o setup-ngxblocker com um parâmetro adicional de linha de comando da seguinte forma:
`sudo ./setup-ngxblocker -x -e conf`
Então, agora vamos executar o script de configuração e deixá-lo fazer todas as alterações necessárias para ativar o Bot Blocker em todos os seus sites.```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker -x
Você verá a saída da seguinte forma:```text Checking url: https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/include_filelist.txt
INFO: /etc/nginx/conf.d/* detected => /etc/nginx/nginx.conf inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain2.com.vhost inserting: include /etc/nginx/bots.d/blockbots.conf; => /etc/nginx/sites-available/mydomain1.com.vhost inserting: include /etc/nginx/bots.d/ddos.conf; => /etc/nginx/sites-available/mydomain1.com.vhost
Whitelisting ip: x.x.x.x => /etc/nginx/bots.d/whitelist-ips.conf
Você notará que ele fez os includes em todos os arquivos .vhost no meu servidor de teste e também incluiu seu próprio endereço IP na lista de permissões no arquivo whitelist-ips.conf para você. Outros IPs ou faixas de IP podem ser adicionados ao seu arquivo whitelits-ips.conf personalizável localizado em /etc/nginx/bots.d/whitelist-ips.conf.
O que este script de configuração fez foi simplesmente adicionar as seguintes declarações include aos seus arquivos .vhost para você; ele também adiciona /etc/nginx/conf.d/* aos includes em nginx.conf (se ainda não estiver no nginx.conf), caso contrário, todo o script falhará.```nginx
# Bad Bot Blocker
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
setup-ngxblocker, install-ngxblocker e update-ngxblocker podem ser todos configurados com locais personalizados de instalação / atualização a partir da linha de comando.
Execute qualquer um dos scripts de configuração, instalação ou atualização com --help ou -h para ver as opções.
Agora teste sua configuração do nginx
sudo nginx -t
e você deve ver```text nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-7.png"/>
Agora basta recarregar / reiniciar o Nginx e o Bot Blocker ficará imediatamente ativo e protegerá todos os seus sites.
`sudo nginx -t && sudo nginx -s reload`
ou
`sudo service nginx restart`
É isso, o bloqueador está agora ativo e protegendo seus sites de milhares de bots e domínios maliciosos.
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-8.png"/>
Agora configure o cron para atualizar automaticamente o bloqueador todos os dias, para que você tenha sempre a proteção mais atualizada.
`sudo crontab -e`
Adicione a seguinte linha no final do seu arquivo crontab. Observe que o parâmetro de linha de comando `-e` especifica o seu endereço de e-mail para onde o relatório de atualização é enviado. Obviamente, substitua `[email protected]` pelo seu endereço de e-mail real, caso contrário você não receberá o e-mail quando o script for atualizado.
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
Isso atualizará o bloqueador todas as noites para você às 22h.
Se você quiser que ele atualize com mais frequência (pois às vezes eu publico 3 a 4 atualizações por dia), você pode configurá-lo da seguinte forma para executar o cron a cada 8 horas, embora apenas uma vez por dia seja mais do que suficiente.
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
Se você não quiser nenhuma notificação por e-mail após uma atualização (não é aconselhável caso o Nginx apresente algum EMERG ao recarregar), então simplesmente execute seu cron da seguinte forma.
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -n`
Se você preferir enviar e-mail via <a href="https://www.mailgun.com/">mailgun</a>, execute seu cron da seguinte forma:
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -g [email protected] -d yourdomain.com -a mailgun api key -f [email protected]`
É isso, o bloqueador se manterá automaticamente atualizado e também recarregará o Nginx assim que baixar a versão mais recente do arquivo globalblacklist.conf.
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-9.png"/>
Você agora pode personalizar qualquer um dos arquivos abaixo para adequá-los ao seu ambiente ou requisitos. Esses arquivos nunca são modificados durante uma atualização usando o script de atualização automática acima, portanto, quaisquer personalizações que você fizer aqui nunca serão sobrescritas durante uma atualização.```text
/etc/nginx/bots.d/whitelist-ips.conf
/etc/nginx/bots.d/whitelist-domains.conf
/etc/nginx/bots.d/blockbots.conf
/etc/nginx/bots.d/blacklist-domains.conf
/etc/nginx/bots.d/blacklist-user-agents.conf
/etc/nginx/bots.d/blacklist-ips.conf
/etc/nginx/bots.d/bad-referrer-words.conf
/etc/nginx/bots.d/custom-bad-referrers.conf
/etc/nginx/bots.d/ddos.conf
Digamos que, por alguma razão "obscura", você realmente queira bloquear o GoogleBot de acessar seu site. Basta adicioná-lo ao arquivo /etc/nginx/bots.d/blacklist-user-agents.conf e isso substituirá a lista de permissões padrão para o GoogleBot. O mesmo se aplica a qualquer outro bot que esteja na lista de permissões por padrão.
Todos os arquivos de inclusão estão comentados para sua conveniência.
(TESTE SE ESTÁ FUNCIONANDO)
TESTES
Execute os seguintes comandos, um por um, a partir de um terminal em outra máquina Linux, contra o seu próprio nome de domínio.
❗ substitua http:// yourdomain.com ❗ nos exemplos abaixo pelo seu PRÓPRIO nome de domínio REAL ❗
curl -A "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" -I http://yourdomain.com
curl -A "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" -I http://yourdomain.com
Deve responder com 200 OK
curl -A "Xenu Link Sleuth/1.3.8" -I http://yourdomain.com
curl -A "Mozilla/5.0 (compatible; AhrefsBot/5.2; +http://ahrefs.com/robot/)" -I http://yourdomain.com
Deve responder com uma das seguintes mensagens de erro:
curl -I http://yourdomain.com -e http://100dollars-seo.com
curl -I http://yourdomain.com -e http://zx6.ru
Deve responder com uma das seguintes mensagens de erro:
O Nginx Ultimate Bot Blocker agora está FUNCIONANDO e PROTEGENDO seus sites !!!
❗ substitua http:// yourdomain.com ❗ nos exemplos abaixo pelo seu PRÓPRIO nome de domínio REAL ❗
Se você é um usuário do Cloudflare que está usando a CDN / sistema de cache do Cloudflare, você deve sempre desabilitar a CDN do Cloudflare (coloque a nuvem cinza)
Ao testar, você obterá os resultados com os códigos de resposta corretos, como abaixo:
Isso é proposital. A CDN está fazendo seu trabalho, ou seja, a primeira resposta do seu servidor disse ao bot "vá embora" emitindo respostas 444 ou 443.
O Cloudflare armazena em cache essa resposta e, portanto, na segunda vez que você testar, receberá uma mensagem de erro de origem 520 Origin Error.
Ao testar o bloqueador, desabilite a CDN / sistema de cache e, quando estiver satisfeito com seus testes, reabilite a CDN/Cache em seu ambiente de produção, pois você deseja que os bots recebam essa resposta do Cloudflare.
A maioria dos outros sistemas de CDN provavelmente apresentará o mesmo comportamento, então sempre desabilite uma CDN durante os testes para descartar qualquer coisa que interfira nos seus testes. Sempre certifique-se de reabilitar a CDN quando terminar os testes !!
Depois de habilitar a CDN do Cloudflare, teste novamente.
Ao testar, você obtém
Isso significa que a CDN está funcionando.
INSTALANDO O BLOQUEADOR EM LOCAIS DE PASTA NÃO PADRÃO DO NGINX
Algumas pessoas compilam o Nginx por conta própria e acabam não tendo os locais padrão das pastas do nginx em /etc/nginx
Para usuários assim, você pode executar o install-ngxblocker, setup-ngxblocker e update-ngxblocker especificando o local da sua pasta nas linhas de comando da seguinte forma.
sudo ./install-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./setup-ngxblocker -x -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d
sudo ./update-ngxblocker -c /usr/local/nginx/conf.d -b /usr/local/nginx/bots.d -e [email protected]
Isso colocará automaticamente os arquivos nos locais que você especificar, fará as inclusões em seus vhosts usando seus locais personalizados e, quando o update-ngxblocker baixar uma nova atualização, também reescreverá automaticamente as seções "Include" dentro do arquivo globalblacklist.conf com seus próprios locais personalizados. Agradecemos novamente a Stuart Cardall @itoffshore por suas contribuições com esses excelentes scripts.
Os relatórios de rede duplicados do Nginx NÃO são um bug nem podem ser corrigidos; este é o comportamento desejado do bloqueador. Atualizações diárias das listas negras de IP fazem com que alguns IPs e faixas conhecidos sejam colocados na lista negra old value "1" e, em seguida, eles são colocados na lista de permissões no final do globalblocklist, que é a ordem de carregamento, o que define os IPs que sabemos serem bons para seu novo value "0", colocando-os assim na lista de permissões. É assim desde o primeiro dia do bloqueador e continuará sendo. Estas são simples mensagens [WARN], não mensagens [EMERG], e não afetam a operação do Nginx de forma alguma.
(Mais de 4000 referenciadores ruins, referenciadores de spam, user-agents, bots ruins, IPs ruins, sites de pornografia, jogos de azar e clickjacking, empresas lucrativas de SEO, detectores de temas do WordPress e contando)
Milhares de horas de programação e testes foram investidas neste projeto, mostre um pouco de amor
Os bots tentam se passar por outros softwares ou sites disfarçando seu user agent. Os nomes de seus user agents podem parecer inofensivos, até perfeitamente legítimos.
Por exemplo, "^Java", mas de acordo com o Project Honeypot, na verdade é um dos mais perigosos, MAS muitos bots legítimos por aí têm "Java" em sua string de user agent, então a abordagem adotada por muitos para bloquear "Java" não é apenas ignorante, mas também bloqueia rastreadores muito legítimos, incluindo alguns do Google e do Bing, e deixa muito claro para mim que aqueles que escrevem scripts de bloqueio de bots raramente os testam.
Spam Referrers e nomes de domínio de spam usam técnicas muito inteligentes para sair dos seus sites executando campanhas muito lucrativas de click-jacking e click-redirect, que exibem anúncios para pessoas desavisadas navegando na web ou até mesmo plantam malware, adware ou ransomware em seus navegadores, que então se tornam parte de sua lucrativa rede de bots.
Este bloqueador de bots inclui centenas de nomes de domínio e endereços IP que a maioria das pessoas não verá nem mesmo em seus logs do Nginx. Isso é resultado de todos os meus sites usando SSL e Content-Security-Policy (CSP), que bloqueia as coisas antes mesmo de chegarem ao Nginx, e eu captei e continuo captando alguns dos piores domínios e bots que existem.
Uma quantidade enorme de sites de pornografia, jogos de azar e notícias falsas também é bloqueada neste script de bloqueio, que também cresce em ritmo acelerado.
Infelizmente, a maioria dos scripts de bloqueio de bots por aí são simplesmente copiados e colados dos scripts de outras pessoas e feitos para parecerem trabalho próprio. Este foi inspirado naquele criado por https://github.com/mariusv, e eu contribuí com esse projeto, mas segui para um layout totalmente novo, limpei bastante e comecei do zero. Agora é um projeto completamente independente. É limpo, funciona e foi exaustivamente testado.
Esta lista de bloqueio de bots ruins do nginx é projetada para ser um arquivo de inclusão global do Nginx e usa as diretivas map $http_user_agent, map $http_referer e geo $validate_client do Nginx.
Dessa forma, o arquivo .conf é carregado uma vez na memória pelo Nginx e fica disponível para todos os sites que você opera. Você simplesmente precisa usar uma instrução Include em um arquivo de configuração de vhost do Nginx.
A beleza disso é que é um único arquivo central usado por todos os seus sites. Isso significa que há apenas um lugar para fazer alterações, ou seja, adicionar novos bots que você descobrir em seus arquivos de log. Quaisquer alterações são aplicadas imediatamente a todos os sites após um simples "sudo service nginx reload". Mas, é claro, sempre execute sudo nginx -t para testar qualquer alteração de configuração antes de recarregar.
O arquivo é minúsculo em tamanho. No momento em que escrevo isto e no primeiro commit público, o tamanho do arquivo, incluindo todos os comentários "que o nginx ignora", está atualmente em apenas 185 kb e já contém mais de 5000 domínios ruins, bots ruins e endereços IP ruins. É tão leve que o Nginx nem percebe que ele existe. Já contém milhares de entradas - total atualizado no topo deste README.
Diferente de muitos outros bloqueadores de bots ruins para Nginx e Apache, onde as pessoas simplesmente copiam e colam listas de outros, esta lista foi construída do zero e testada minuciosamente, e quero dizer minuciosamente, por mais de 10 meses. Ela vem de logs de servidor reais que são monitorados diariamente e há pelo menos 3 a 10 novas adições a este arquivo quase todos os dias.
Também foi exaustivamente testado contra falsos positivos, usando meses de testes constantes e regulares e monitoramento de arquivos de log.
Todos os sites listados nos referenciadores ruins são verificados um a um antes mesmo de serem adicionados. Simplesmente copiar qualquer coisa suspeita do seu arquivo de log e adicioná-la a um bloqueador como este sem realmente ver o que é primeiro .... bem, é no mínimo insensato.
O Nginx tem um erro adorável chamado 444 que literalmente derruba a conexão. Todas essas regras emitem uma resposta 444, então, se uma regra corresponder, o IP solicitante simplesmente não recebe resposta e pareceria que seu servidor não existe para ele ou parece estar offline.
Um teste com curl usando uma das linhas de comando de teste documentadas no arquivo /conf.d/globalblacklist.conf dará um simples "curl: (52) Empty reply from server" e é essa a resposta que os referenciadores ruins e bots recebem.
Para bots ou spiders que você ainda deseja permitir, mas deseja limitar a taxa de visitas, você pode usar as funções de limitação de taxa integradas que incluí. O arquivo é extensivamente comentado, então você deve descobrir; caso contrário, é só me enviar uma mensagem se estiver com problemas.
ou para contribuir com seus próprios referenciadores ruins, bots ou para fazer correções em quaisquer bots ou domínios bloqueados incorretamente, por favor, faça um fork de uma cópia deste repositório e envie pull requests nos arquivos individuais localizados aqui e depois envie um pull request (PR).
em relação a listagens incorretas ou qualquer outro problema no sistema de issues, e elas serão investigadas e removidas se necessário. Eu respondo muito rapidamente aos problemas dos usuários e ajudei inúmeros usuários durante dias a fazer seu bloqueador de bots funcionar. Pode-se dizer que sou maluco (discutível), mas adoro ajudar pessoas e não ignoro issues ou pessoas com problemas para fazer isso funcionar.
Muitas listas por aí colocam domínios estranhos em seu arquivo hosts. Seu arquivo hosts e DNS não entenderão isso. Esta lista usa domínios convertidos, que estão no formato DNS correto para serem compreendidos por qualquer sistema operacional. Evite usar listas que não colocam a estrutura de domínio formatada corretamente em suas listas.
Por exemplo O domínio:
lifehacĸer.com (observe o K)
na verdade, converte-se para:
xn--lifehacer-1rb.com
Você pode fazer um nslookup em qualquer sistema operacional e ele será resolvido corretamente.
`nslookup xn--lifehacer-1rb.com````xn--lifehacer-1rb.com origin = dns1.yandex.net mail addr = iskalko.yandex.ru serial = 2016120703 refresh = 14400 retry = 900 expire = 1209600 minimum = 14400 xn--lifehacer-1rb.com mail exchanger = 10 mx.yandex.net. Name: xn--lifehacer-1rb.com Address: 78.110.60.230 xn--lifehacer-1rb.com nameserver = dns2.yandex.net. xn--lifehacer-1rb.com text = "v=spf1 redirect=_spf.yandex.net" xn--lifehacer-1rb.com nameserver = dns1.yandex.net.
- Veja: https://www.charset.org/punycode para mais informações sobre isso.
************************************************
## MONITORE SEMPRE O QUE VOCÊ ESTÁ FAZENDO:
**CERTIFIQUE-SE de monitorar os logs do seu site** após implementar isto. Sugiro que você primeiro carregue isto em um site e monitore-o em busca de possíveis falsos positivos antes de colocar em produção em todos os seus sites.
Não fique como um avestruz com a cabeça na areia; ser um operador de servidor responsável e proprietário de site significa que você deve monitorar seus logs com frequência. Uma razão pela qual muitos de vocês vieram parar aqui em primeiro lugar é porque viram coisas estranhas nos seus arquivos de log do Nginx.
Monitore também seus logs diariamente em busca de novos referers maliciosos e strings de user-agent que você queira bloquear. Sua melhor fonte para adicionar a esta lista são os logs do seu próprio servidor, não os meus.
Sinta-se à vontade para contribuir com referers maliciosos dos seus próprios logs para este projeto enviando um Pull Request (PR). Você pode, no entanto, contar com esta lista para manter 99% dos invasores lá fora afastados.
************************************************
## COMO MONITORAR SEUS LOGS DIARIAMENTE (Do Jeito Fácil):
**Com muitos agradecimentos e reconhecimento a**
https://blog.nexcess.net/2011/01/21/one-liners-for-apache-log-files/
Para monitorar diariamente os principais referers dos arquivos de log de um site, use os seguintes cron jobs simples, que enviarão por e-mail todas as manhãs uma lista dos principais referers / user agents de um determinado site. Este é um exemplo de apenas um cron job para um site. Configure vários para cada um que deseja monitorar. Aqui está um cron que roda às 8h todas as manhãs e me envia o log de referers reduzido. Quando digo reduzido, o domínio do site e outros referers, como Google e Bing, são removidos dos resultados. É claro que você deve alterar o nome do arquivo de log, o nome do domínio e seu endereço de e-mail nos exemplos abaixo. O segundo cron para coletar User agents não remove nenhum referer, mas você pode adicionar essa funcionalidade se quiser, copiando a declaração awk !~ do primeiro exemplo.
##### Cron para Monitorar Referers Diariamente no Nginx
`00 08 * * * tail -10000 /var/log/nginx/mydomain-access.log | awk '$11 !~ /google|bing|yahoo|yandex|mywebsite.com/' | awk '{print $11}' | tr -d '"' | sort | uniq -c | sort -rn | head -1000 | mail -s "Top 1000 Referers for Mydomain.com" [email protected]`
Isso envia por e-mail uma lista diária de referers usando um comando awk para excluir domínios como google, bing e o nome do seu próprio domínio.
##### Cron para Monitorar User Agents Diariamente no Nginx
`00 08 * * * tail -50000 /var/log/nginx/mydomain-access.log | awk '{print $12}' | tr -d '"' | sort | uniq -c | sort -rn | head -1000 | mail -s "Top 1000 Agents for Mydomain.com" [email protected]`
Isso envia por e-mail uma lista dos principais User-Agents que visitaram seu site nas últimas 24 horas, útil para identificar quaisquer strings de User-Agents suspeitas ou maliciosas.
************************************************
## BLOQUEIE BOTS AGRESSIVOS NO NÍVEL DO FIREWALL USANDO FAIL2BAN:
Adicionei um filtro e uma ação personalizados de Fail2Ban que escrevi e que monitoram seus logs do Nginx em busca de bots que geram um grande número de erros 444. Esta jail personalizada para Fail2Ban examinará os logs por um período de 1 semana e banirá o infrator por 24 horas.
Isso ajuda muito a manter alguns reincidentes afastados e a impedi-los de encher seus arquivos de log com erros 444.
Veja a pasta Fail2Ban para obter instruções sobre como configurar este ótimo complemento para o Nginx Bad Bot Blocker.
************************************************
## PARANDO O SPAM "FANTASMA" DO GOOGLE ANALYTICS:
Apenas usar o bloqueador Nginx não impede o spam de referência fantasma do Google Analytics, porque eles atingem o Analytics diretamente e nem sempre tocam necessariamente no seu site.
Você deve usar filtros de regex no Analytics para impedir o spam de referência fantasma.
Para isso, existem vários arquivos google-exclude-0*.txt que foram criados para você e são atualizados ao mesmo tempo em que o Bloqueador Nginx é atualizado. Conforme a lista cresce, mais arquivos de exclusão serão criados.
************************************************
## PARA PARAR O SPAM "FANTASMA" NO GOOGLE ANALYTICS, SIGA O SIMPLES GUIA VISUAL ABAIXO
Siga as instruções visuais passo a passo abaixo para adicionar esses arquivos google-exclude como segmentos ao seu site.
<table style="width:100%;margin:0;">
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-01.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-02.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-03.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-04.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-05.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-06.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
<tr>
<td align="left"><img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/google-analytics-ghost-spam-07.jpg" alt="Google Analytics - Adicionando Segmentos para Parar o Spam Fantasma"/></td>
</tr>
</table>
************************************************
## BLOQUEANDO DOMÍNIOS DE SPAM COM O GOOGLE SEARCH CONSOLE / FERRAMENTAS PARA WEBMASTERS
(Como usar o arquivo google-disavow.txt)
Adicionei a criação de um arquivo de texto Google Disavow chamado google-disavow.txt. Este arquivo pode ser usado nas Ferramentas do Google para Webmasters para bloquear todos esses domínios como links de spam ou ruins. Use com cautela.
************************************************
## VERSÃO ROBOTS.txt PARA AQUELES QUE NÃO PODEM USAR ESTE BLOQUEADOR COMPLETO?
Muitas pessoas estão à mercê de sua empresa de hospedagem e não têm acesso root ao servidor que opera por trás de seu site. Se essa é a sua situação, confira o arquivo robots.txt gerado automaticamente, que ajudará até certo ponto a manter muitos Bad Bots e User-Agents fora de seus sites.
************************************************
## VERSÕES .htaccess PARA AQUELES QUE NÃO PODEM USAR ESTE BLOQUEADOR COMPLETO?
Muitas pessoas estão à mercê de sua empresa de hospedagem e não têm acesso root ao servidor que opera por trás de seu site.
Se essa é a sua situação, confira as versões .htaccess geradas automaticamente do Spam Referrer Blocker, que podem ser encontradas em <a href="https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/tree/master/.htaccess">este repositório</a>. Este método .htaccess (SOMENTE PARA SITES APACHE) ajudará a manter todos os Spam Referrers deste bloqueador fora do seu site.
Isso é mencionado aqui apenas porque muitas pessoas que usam sistemas CPanel pensam que estão atrás de um servidor Nginx, mas na realidade estão executando um Servidor Apache atrás de um Servidor Proxy Nginx. .htaccess não funciona em sites Nginx.
Não está usando o servidor web Nginx? Veja o [](https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker)
************************************************
# FUNCIONA, PORRA!!!
************************************************
## Agora é só aproveitar o que o Nginx Bad Bot Blocker pode fazer por você e seus sites.
### E Ajude a Apoiar Este Projeto
Milhares de horas de programação e testes foram investidas neste projeto, mostre algum amor
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="Pague-me um café" width="300"/>](https://ko-fi.com/mitchellkrog)
************************************************
# SEU SITE FOI HACKEADO?
[](mailto:[email protected]) para ajudar você a limpar e proteger seu site.
************************************************
### OUTROS PROJETOS GRATUITOS INCRÍVEIS
- https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
- https://github.com/mitchellkrogza/Badd-Boyz-Hosts
- https://github.com/mitchellkrogza/Ultimate.Hosts.Blacklist
- https://github.com/mitchellkrogza/Stop.Google.Analytics.Ghost.Spam.HOWTO
- https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
- https://github.com/mitchellkrogza/fail2ban-useful-scripts
- https://github.com/mitchellkrogza/linux-server-administration-scripts
- https://github.com/mitchellkrogza/Travis-CI-Nginx-for-Testing-Nginx-Configuration
- https://github.com/mitchellkrogza/Travis-CI-for-Apache-For-Testing-Apache-and-PHP-Configurations
- https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning
- https://github.com/funilrys/PyFunceble
- https://github.com/funilrys/dead-hosts
- https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
- https://github.com/mitchellkrogza/Suspicious.Snooping.Sniffing.Hacking.IP.Addresses
- https://github.com/mitchellkrogza/Fail2Ban.WebExploits
************************************************
### CONFIRA TAMBÉM A NOVA GRANDE LISTA DE SITES HACKEADOS COM MALWARE E WORDPRESS
Este repositório contém uma lista de todos os sites que encontro e que estão hackeados com malware.
A maioria dos proprietários de sites não sabe que seus sites foram hackeados e estão sendo usados para plantar malware.
Confira em: https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
************************************************
### GOSTA DE FOTOGRAFIA?
Passe por aqui e me visite em [mitchellkrog.com](https://mitchellkrog.com) ou no [Facebook](https://www.facebook.com/MitchellKrogPhotography) ou siga-me no Twitter <a href='https://twitter.com/MitchellKrog'><img src="https://img.shields.io/twitter/follow/MitchellKrog.svg?style=social&label=Follow" alt='Follow @MitchellKrog'></a>
************************************************
### AGRADECIMENTOS E COLABORADORES:
Muitos agradecimentos àqueles que contribuem para este projeto.
Muitas partes dos scripts geradores e do código que operam por trás deste projeto foram adaptadas de trechos de centenas de fontes.
Na verdade, é tão difícil mencionar todos, mas aqui estão algumas pessoas-chave cujos pequenos trechos de código me ajudaram a introduzir novos recursos o tempo todo. Mostre-lhes algum amor e confira também alguns de seus projetos.
- Konstantin Goretzki @konstantingoretzki https://github.com/konstantingoretzki (Regex melhorado no filtro Fail2Ban)
- Stuart Cardall - https://github.com/itoffshore (Scripts de Instalação, Atualização e Configuração & Mantenedor de Pacotes Alpine Linux)
- Mike van Eckendonk - https://github.com/Eckybrazzz
- Nissar Chababy @funilrys - https://github.com/funilrys/PyFunceble (Excelente script para verificar nomes de domínio ATIVOS, INATIVOS e EXPIRADOS)
- Marius Voila https://github.com/mariusv
- Cătălin Mariș https://github.com/alrra
- deformhead https://github.com/deformhead
- bluedragonz https://github.com/bluedragonz
- Alexander https://github.com/shoonois
- Steven Black https://github.com/StevenBlack
- Fail2Ban - https://github.com/fail2ban
- Stevie-Ray Hartog https://github.com/Stevie-Ray
- Sir Athos from StackOverFlow - http://stackoverflow.com/users/2245910/sir-athos (ajuda com tagging e commit no Travis Build)
- StackOverflow - http://stackoverflow.com/ (scripts bash de centenas de perguntas e respostas)
- SuperUser - http://superuser.com/ (trechos de várias perguntas e respostas)
Se você acha que seu nome deveria estar aqui, me avise.
************************************************
### Escrever código assim leva muito tempo!!
Milhares de horas de programação e testes foram investidas neste projeto, mostre algum amor
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="Pague-me um café" width="300"/>](https://ko-fi.com/mitchellkrog)
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/zuko.png"/>
************************************************
# Licença MIT
## Copyright (c) 2017 Mitchell Krog - [email protected]
## https://github.com/mitchellkrogza
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia
deste software e dos arquivos de documentação associados (o "Software"), para lidar
com o Software sem restrição, incluindo, sem limitação, os direitos
de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender
cópias do Software, e de permitir que as pessoas a quem o Software é
fornecido façam o mesmo, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas
as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU
IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIABILIDADE,
ADEQUAÇÃO A UM FIM ESPECÍFICO E NÃO VIOLAÇÃO. EM NENHUM CASO OS
AUTORES OU TITULARES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA
RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE,
FORA DE OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO
SOFTWARE.