| 仓库 | 成为赞助商 |
|---|---|
| 如果您成为赞助商,您的徽标和您的域名链接将显示在这里。如果您想赞助本项目,请直接发送邮件至 [email protected],因为 Github 赞助计划目前尚不支持南非。 | |
| 帮助支持我,访问 https://ko-fi.com/mitchellkrog |
请确保您已订阅 Github 通知,以便在拦截器更新或发生任何重要或关键(可能造成破坏性)的变更时收到通知。
这是我们新的首选安装方法,目前通过一组由 Stuart Cardall(@itoffshore)贡献并维护的 shell 脚本完成,他是 Alpine Linux 软件包维护者之一。
以下说明适用于快速且无痛的安装过程,该过程会下载拦截器所需的所有文件,并且脚本会向您的 nginx.conf 和 nginx .vhost 文件添加所需的 include。安装脚本假定您的 vhost 配置文件位于 /etc/nginx/sites-available/ 目录下,且每个 vhost 配置文件均以 .vhost 文件扩展名结尾。
手动安装说明请参阅 - 请参阅: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/blob/master/MANUAL-CONFIGURATION.md
setup-ngxblocker、install-ngxblocker 和 update-ngxblocker 均可通过命令行配置自定义安装/更新位置。(请参阅说明中的第 11 步,了解如何使用这些脚本以及非标准 Nginx 位置)
使用 --help 或 -h 运行任意 setup、install 或 update 脚本可查看选项。
请注意: 对于使用 Let's Encrypt SSL 证书的用户,首选且 100% 有效的方法是使用 Webroot Authenticator 方法。使用 http challenge 方法的人似乎会遇到一些问题,但可以确认 webroot 方法运行完美。我们目前不确定 http-01 challenge 方法究竟是 certbot 的 bug 还是 nginx 的 bug。
Nginx 的重复网络报告并不是 bug,也无法修复,这正是拦截器的预期行为。每日更新的 IP 黑名单会导致一些知名 IP 和 IP 段被列入黑名单 old value "1",然后这些 IP 会在 globalblocklist 的最末尾被加入白名单(这是加载顺序决定的),从而使我们已知的良好 IP 被设置为新的 value "0",由此将它们白名单化。自拦截器上线第一天起就是如此,并且将一直如此。这些只是简单的 [WARN] 消息,而非 [EMERG] 消息,它们绝不会以任何方式影响 Nginx 的运行。
将 install-ngxblocker 下载到 /usr/local/sbin/ 目录,并赋予脚本可执行权限。```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
如果你的 Linux 发行版没有 wget,你可以按照以下方式使用 curl 替换上面的 wget 命令:```sh
curl -sL https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/install-ngxblocker -o /usr/local/sbin/install-ngxblocker
安装软件包。```sh pkg install www/nginx-ultimate-bad-bot-blocker
或者,也可以通过 portmaster 安装:```sh
portmaster www/nginx-ultimate-bad-bot-blocker
现在以 DRY-MODE 运行 install-ngxblocker 脚本,它会显示将要进行的更改以及将为你下载的文件。这只是一次 DRY-RUN,尚未进行任何更改。
install-ngxblocker 会下载所有必需文件,包括 setup 和 update 脚本。```sh cd /usr/local/sbin sudo ./install-ngxblocker
这将向您展示将要进行的更改的如下输出
**(注意:这只是一次 DRY-RUN,尚未进行任何更改)**```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 和 update-ngxblocker 都可以通过命令行配置自定义安装/更新位置。
运行任何 setup、install 或 update 脚本时,使用 --help 或 -h 查看选项。
现在使用 -x 参数运行安装脚本,从仓库下载所有必要文件:```sh cd /usr/local/sbin/ sudo ./install-ngxblocker -x
这将给出以下输出:```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
所有必需的文件现已从仓库直接下载到 Nginx 上正确的文件夹中。
请务必通过运行以下两条命令,将你的 setup 和 update 脚本设置为可执行。在继续执行步骤 4 及后续步骤之前,这一点非常重要。```sh sudo chmod +x /usr/local/sbin/setup-ngxblocker sudo chmod +x /usr/local/sbin/update-ngxblocker
**setup-ngxblocker、install-ngxblocker 和 update-ngxblocker 都可以通过命令行配置自定义安装/更新位置。**
**运行任何 setup、install 或 update 脚本时,使用 --help 或 -h 即可查看选项。**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-4.png"/>
现在以 DRY-MODE 模式运行 setup-ngxblocker 脚本,它会显示将要进行的更改以及要为你下载的文件。这只是一次 DRY-RUN,目前不会进行任何更改。```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker
这将给你如下输出(下面的输出假设你的 nginx.conf 文件已经包含了默认的 include:/etc/nginx/conf.d/*) 据我所知,所有 Nginx 安装都在随所有版本分发的 nginx.conf 文件中带有这个默认的 include。```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
此脚本还会将您的 IP 自动加入 whitelist-ips.conf 文件的白名单中。
可以在位于 /etc/nginx/bots.d/whitelist-ips.conf 的可自定义 whitelits-ips.conf 文件中添加更多 IP 或 IP 范围。
**setup-ngxblocker、install-ngxblocker 和 update-ngxblocker 均可通过命令行配置自定义安装/更新位置。**
**使用 --help 或 -h 参数运行任意 setup、install 或 update 脚本,即可查看选项。**
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-5.png"/>
现在,使用 -x 参数运行 setup 脚本,以对您的 nginx.conf 进行所有必要更改(如果需要),并将所需的 include 添加到您所有的 vhost 文件中。
此 setup-ngxblocker 脚本假定位于 /etc/nginx/sites-available 中的所有 vhost 文件均以 .vhost 扩展名结尾。将所有 vhost 配置文件都改为以 .vhost 扩展名结尾是一种良好实践;但如果您更愿意沿用现有的扩展名,例如 .conf,则只需使用 `-e` 参数来指定您用于 vhost 文件的扩展名,然后运行 setup-ngxblocker 即可。
例如,如果您的 vhost 文件以 .conf 结尾,则需要改为使用如下附加命令行参数来执行 setup-ngxblocker:
`sudo ./setup-ngxblocker -x -e conf`
那么现在,让我们运行 setup 脚本,让它完成所有必要更改,使 Bot Blocker 在您的所有站点上生效。```sh
cd /usr/local/sbin/
sudo ./setup-ngxblocker -x
您将看到如下输出:```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
您会注意到,它已在测试服务器上的所有 .vhost 文件中执行了 include,并已为您将您自己的 IP 地址加入白名单到 whitelist-ips.conf 文件中。更多 IP 或 IP 范围可以添加到您的可自定义 whitelits-ips.conf 文件中,该文件位于 /etc/nginx/bots.d/whitelist-ips.conf。
这个安装脚本所做的工作只是为您将以下 include 语句添加到您的 .vhost 文件中,它还会将 /etc/nginx/conf.d/* 添加到 nginx.conf 的 include 中(如果 nginx.conf 中还没有的话),否则,整个脚本将失败。```nginx
# Bad Bot Blocker
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
setup-ngxblocker、install-ngxblocker 和 update-ngxblocker 均可通过命令行配置自定义安装/更新位置。
运行任意 setup、install 或 update 脚本时,使用 --help 或 -h 查看选项。
现在测试你的 nginx 配置
sudo nginx -t
然后你应该会看到```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"/>
现在只需重新加载 / 重启 Nginx,Bot Blocker 将立即生效并保护你的所有网站。
`sudo nginx -t && sudo nginx -s reload`
或
`sudo service nginx restart`
就这样,拦截器现已生效,并保护你的网站免受数千个恶意机器人和域名的侵害。
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-8.png"/>
现在设置 cron,让拦截器每天自动更新,这样你始终拥有最新的防护。
`sudo crontab -e`
在你的 crontab 文件末尾添加以下行。注意,添加 `-e` 命令行参数来指定接收更新报告的电子邮件地址。显然,请将 `[email protected]` 替换为你的真实电子邮件地址,否则脚本更新后你将无法收到邮件。
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
这将在每晚 10 点为你更新拦截器。
如果你希望更频繁地更新(有时我一天会推送 3-4 次更新),可以按如下设置,让 cron 每 8 小时运行一次,尽管每天一次就已经足够了。
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -e [email protected]`
如果你不希望在更新后收到任何电子邮件通知(不建议这样,以防 Nginx 在重新加载时出现 EMERG),则只需按如下方式运行你的 cron。
`00 */8 * * * sudo /usr/local/sbin/update-ngxblocker -n`
如果你更愿意通过 <a href="https://www.mailgun.com/">mailgun</a> 发送电子邮件,则可以这样运行你的 cron:
`00 22 * * * sudo /usr/local/sbin/update-ngxblocker -g [email protected] -d yourdomain.com -a mailgun api key -f [email protected]`
就这样,拦截器将自动保持最新状态,并在下载最新版本的 globalblacklist.conf 文件后重新加载 Nginx。
************************************************
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/step-9.png"/>
你现在可以自定义以下任何文件,以符合你的环境或需求。这些文件在使用上述自动更新脚本期间绝不会被修改,因此你在此所做的任何自定义都不会在更新时被覆盖。```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
假设出于某种“奇怪”的原因,你确实想阻止 GoogleBot 访问你的网站。你只需将其添加到 /etc/nginx/bots.d/blacklist-user-agents.conf 文件中,它就会覆盖 GoogleBot 的默认白名单。这同样适用于默认被列入白名单的任何其他机器人。
所有 include 文件都带有注释,方便你使用。
(测试它是否正常工作)
测试
在另一台 Linux 机器的终端上,针对你自己的域名逐一运行以下命令。
❗ 将下面示例中的 http:// yourdomain.com ❗ 替换为你自己的真实域名 ❗
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
应返回 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
应返回以下任一错误消息:
curl -I http://yourdomain.com -e http://100dollars-seo.com
curl -I http://yourdomain.com -e http://zx6.ru
应返回以下任一错误消息:
Nginx Ultimate Bot Blocker 现在正在正常工作并保护你的网站!!!
❗ 将下面示例中的 http:// yourdomain.com ❗ 替换为你自己的真实域名 ❗
如果你是在使用 Cloudflare CDN / 缓存系统的 Cloudflare 用户,则应始终禁用 Cloudflare CDN(设置为灰色云)。
测试时你将得到如下正确的响应代码结果:
这是设计使然。CDN 正在发挥作用,也就是说,你的服务器首次响应时通过返回 444 或 443 状态码对机器人说“走开”。
Cloudflare 会缓存该响应,因此当你第二次测试时,会收到一条 520 Origin Error 源站错误消息。
在测试屏蔽器时,请禁用 CDN / 缓存系统;当你对测试结果满意后,再在线上环境中重新启用 CDN/缓存,因为你确实希望机器人从 Cloudflare 获得该响应。
大多数其他 CDN 系统可能也会表现出相同行为,因此在测试期间务必禁用 CDN,以排除任何可能干扰测试的因素。测试完成后一定要记得重新启用 CDN!!
启用 Cloudflare CDN 后,请再次测试。
测试时,你会得到
这意味着 CDN 正在正常工作。
将屏蔽器安装到非标准 Nginx 文件夹位置
有些人自行编译 Nginx,最终没有使用 /etc/nginx 这一标准 nginx 文件夹位置。
对于这类用户,你可以在命令行中指定文件夹位置来运行 install-ngxblocker、setup-ngxblocker 和 update-ngxblocker,如下所示。
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]
这将自动把文件放入你指定的位置,并使用你自定义的位置在你的 vhost 中完成 include;当 update-ngxblocker 拉取新更新时,它还会自动重写 globalblacklist.conf 文件中的“Include”部分为你自己的自定义位置。再次感谢 Stuart Cardall @itoffshore 为这些优秀脚本所做的贡献。
来自 Nginx 的重复网络报告并不是 bug,也无法修复,这正是屏蔽器的预期行为。IP 黑名单的每日更新会导致一些知名 IP 和网段被列入黑名单 old value "1",随后它们又会在 globalblocklist 的最末尾(即加载顺序的最后)被白名单化,将我们已知良好的 IP 设置为新的 value "0",从而将其加入白名单。自屏蔽器诞生第一天起就是这样,将来也会保持这样。这些只是简单的 [WARN] 消息而不是 [EMERG] 消息,它们无论如何都不会影响 Nginx 的运行。
(超过 4000 个恶意引荐来源、垃圾引荐来源、User-Agent、坏机器人、恶意 IP、色情、赌博和点击劫持网站、高利润 SEO 公司、WordPress 主题检测器,而且还在不断增加)
这个项目倾注了数千小时的编程和测试心血,来表达一点爱吧。
机器人会通过伪装其 User-Agent 试图让自己看起来像其他软件或网站。它们的 User-Agent 名称可能看起来无害,甚至完全合法。
例如,“^Java”根据 Project Honeypot 的说法,实际上是最危险的之一,但网上许多合法机器人的 User-Agent 字符串中都含有“Java”,因此许多人屏蔽“Java”的做法不仅无知,还会屏蔽掉非常合法的爬虫,包括 Google 和 Bing 的一些爬虫,这也让我很清楚,那些编写机器人屏蔽脚本的人很少真正测试它们。
垃圾引荐来源和垃圾域名使用非常狡猾的技术从你的网站跳转,运行高利润的点击劫持和点击重定向活动,向毫无戒心的网页浏览者投放广告,甚至将恶意软件、广告软件或勒索软件植入他们的浏览器,使其成为他们高利润机器人网络的一部分。
这个机器人屏蔽器包含数百个域名和 IP 地址,大多数人甚至不会在自己的 Nginx 日志中看到它们。这是因为我的所有网站都运行 SSL 并使用 Content-Security-Policy (CSP),它能在请求到达 Nginx 之前就将其拦截,而我已经发现并将继续发现一些最恶劣的域名和机器人。
该屏蔽脚本还屏蔽了大量色情、赌博和虚假新闻网站,且其规模正在快速增长。
不幸的是,目前大多数机器人屏蔽脚本只是从其他人的脚本中复制粘贴,然后装成自己的作品。这个项目受到了 https://github.com/mariusv 所创建项目的启发,我曾为该贡献过,但后来转向了一种全新布局,对其进行了大幅清理,并从零开始。现在它已经完全是一个独立的项目。它干净、有效,并且经过了充分测试。
这个 nginx 坏机器人屏蔽列表被设计为一个全局 Nginx include 文件,并使用 Nginx 的 map $http_user_agent、map $http_referer 和 geo $validate_client 指令。
这样,.conf 文件会被 Nginx 一次性加载到内存中,并可供你运营的所有网站使用。你只需在 Nginx vhost 配置文件中使用一个 Include 语句即可。
其妙处在于,它是由你所有网站共用的一个中央文件。这意味着只需要在一个地方进行修改,例如添加你在日志文件中发现的新机器人。在简单执行“sudo service nginx reload”之后,任何更改都会立即应用到所有网站。当然,在重新加载之前,始终要执行 sudo nginx -t 来测试任何配置更改。
这个文件体积很小。在撰写本文及首次公开提交时,包括所有注释(Nginx 会忽略)在内的文件大小目前仅为 185 kb,并且已经包含超过 5000 个恶意域名、坏机器人和恶意 IP 地址。它非常轻量,Nginx 甚至感觉不到它的存在。它已包含数千条条目——总数在本 README 顶部更新。
与许多其他 Nginx 和 Apache 的坏机器人屏蔽器不同——那些只是简单地从别人那里复制粘贴列表——这个列表是从零开始构建并经过彻底测试的,我的意思是彻底测试了 10 多个多月。它来自每日监控的真实服务器日志,几乎每天都会有至少 3-10 条新条目加入该文件。
它还经过了数月持续而规律的日志文件测试和监控,来彻底测试误报。
所有列入恶意引荐来源的网站都会在添加前逐一检查。仅仅把日志文件中看起来可疑的内容复制下来,然后在没有真正先看清它是什么的情况下就添加到这样的屏蔽器中……至少可以说这是愚蠢的。
Nginx 有一个可爱的错误码 444,它会直接断开连接。所有这些规则都会返回 444 响应,因此一旦规则匹配,请求方的 IP 根本不会收到响应,对他们来说你的服务器就像不存在或处于离线状态。
使用 /conf.d/globalblacklist.conf 文件中记录的测试命令行之一,用 curl 进行测试,会得到简单的“curl: (52) Empty reply from server”,而这正是恶意引荐来源和机器人得到的响应。
对于你仍然希望允许但想限制其访问频率的机器人或蜘蛛,你可以使用我内置的速率限制功能。该文件全文都有大量注释,你应该能看懂;如果遇到问题,直接给我留言即可。
或者想贡献你自己的恶意引荐来源、机器人,或对任何被错误屏蔽的机器人或域名进行更正,请 fork 本仓库的副本,并在位于此处的各个文件上发送拉取请求,然后提交一个拉取请求(PR)。
若发现错误列表或任何其他问题,请在 issues 系统中提交,并将会进行调查,如有必要将予以移除。我对用户的问题响应非常迅速,并曾连续数天帮助无数用户让他们的机器人屏蔽器正常工作。你可以说我疯了(这有争议),但我喜欢帮助别人,不会忽视问题或那些在让其正常工作时遇到困难的人。
很多列表会把一些奇怪的域名放入 hosts 文件。你的 hosts 文件和 DNS 无法理解这些。本列表使用转换后的域名,这些域名采用正确的 DNS 格式,任何操作系统都能理解。避免使用那些没有在列表中放入正确格式化域名结构的列表。
例如 域名:
lifehacĸer.com(注意 K)
实际上转换为:
xn--lifehacer-1rb.com
你可以在任何操作系统上执行 nslookup,它都会正确解析。
`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.
- 查看:https://www.charset.org/punycode 以获取更多相关信息。
************************************************
## 始终监控你的操作:
**实施此方案后,请务必监控你的网站日志**。我建议你先将其加载到某一个网站上,监控是否有任何可能的误报,然后再将其投入到所有网站的生产环境中。
不要像鸵鸟一样把头埋进沙子里。作为负责任的服务器运营者和网站所有者,你必须经常监控日志。你们中许多人最初之所以会来到这里,正是因为你们在 Nginx 日志文件中看到了令人讨厌的东西。
此外,还要每天监控日志,查找你想要屏蔽的新恶意 referer 和 user-agent 字符串。扩充此列表的最佳来源是你自己的服务器日志,而不是我的。
欢迎通过发送 Pull Request (PR),将你自己日志中的恶意 referer 贡献给本项目。当然,你也可以依赖这份列表来阻挡 99% 的恶意访客。
************************************************
## 如何每日监控日志(简易方式):
**衷心感谢**
https://blog.nexcess.net/2011/01/21/one-liners-for-apache-log-files/
要每日监控某个网站日志文件中的热门 referer,请使用以下简单的 cron 作业,它们每天早晨都会将特定网站日志文件中的热门 referer / user agent 列表通过电子邮件发送给你。这只是一个站点、一个 cron 作业的示例。为你想要监控的每个站点分别设置多个这样的作业。
下面是一个每天早晨 8 点运行、并将精简后的 referer 日志发送到我邮箱的 cron。所谓精简,是指从结果中剔除站点域名以及 Google、Bing 等其他 referer。当然,你必须在下面的示例中修改日志文件名、域名和你的电子邮件地址。第二个用于收集 User agent 的 cron 不会剔除任何 referer,但如果你愿意,可以复制第一个示例中的 awk 语句 !~ 来添加该功能。
##### 用于每日监控 Nginx 上 Referer 的 Cron
`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]`
这会使用 awk 命令排除 google、bing 以及你自己的域名等,每天通过电子邮件向你发送一份 referer 列表。
##### 用于每日监控 Nginx 上 User Agent 的 Cron
`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]`
这会通过电子邮件向你发送一份过去 24 小时内访问你网站的热门 User-Agent 列表,有助于发现任何恶意或可疑的 User-Agent 字符串。
************************************************
## 使用 FAIL2BAN 在防火墙级别阻止攻击性机器人:
我添加了一个自定义的 Fail2Ban 过滤器和动作,用于监控你的 Nginx 日志,查找生成大量 444 错误的机器人。这个自定义的 Fail2Ban jail 会扫描一周内的日志,并对违规者封禁 24 小时。
它在阻止一些屡犯者、防止他们用 444 错误填满你的日志文件方面帮助很大。
有关为 Nginx Bad Bot Blocker 配置这一出色附加组件的说明,请参阅 Fail2Ban 文件夹。
************************************************
## 阻止 GOOGLE ANALYTICS 的“幽灵”垃圾流量:
仅仅使用 Nginx 拦截器并不能阻止 Google Analytics 的幽灵引荐垃圾流量,因为它们直接访问的是 Analytics,而不一定会触及你的网站。
你应该在 Analytics 中使用正则表达式过滤器来防止幽灵引荐垃圾流量。
为此,我们为你准备了多个 google-exclude-0*.txt 文件,它们会在 Nginx Blocker 更新时同步更新。随着列表的增长,将会创建更多的 exclude 文件。
************************************************
## 要阻止 GOOGLE ANALYTICS 上的“幽灵”垃圾流量,请按照以下简单可视化指南操作
按照下面的分步可视化说明,将这些 google-exclude 文件作为细分添加到你的网站。
<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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></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 - 添加细分以阻止幽灵垃圾流量"/></td>
</tr>
</table>
************************************************
## 使用 GOOGLE SEARCH CONSOLE / WEBMASTER TOOLS 屏蔽垃圾域名
(如何使用 google-disavow.txt 文件)
我已增加生成名为 google-disavow.txt 的 Google Disavow 文本文件的功能。该文件可用于 Google 的 Webmaster Tools,将所有这些域名作为垃圾或恶意链接屏蔽。请谨慎使用。
************************************************
## 为无法使用此完整拦截器的人准备的 ROBOTS.txt 版本?
许多人的处境受制于他们的托管公司,无法获得网站后端服务器的 root 访问权限。如果你是这种情况,请查看自动生成的 robots.txt 文件,它会在一定程度上帮助你阻止大量 Bad Bot 和 User-Agent 访问你的网站。
************************************************
## 为无法使用此完整拦截器的人准备的 .htaccess 版本?
许多人的处境受制于他们的托管公司,无法获得网站后端服务器的 root 访问权限。
如果你是这种情况,请查看自动生成的 Spam Referrer Blocker 的 .htaccess 版本,它们可以在<a href="https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/tree/master/.htaccess">此仓库</a>中找到。这种 .htaccess 方法(仅适用于 APACHE 网站)将帮助你屏蔽此拦截器中的所有垃圾引荐来源,使其无法进入你的网站。
这里之所以提及这一点,是因为许多使用 CPanel 系统的人以为自己的网站运行在 Nginx 服务器后面,但实际上他们运行在位于 Nginx 代理服务器后面的 Apache 服务器上。.htaccess 在 Nginx 网站上不生效。
不使用 Nginx Web 服务器?请查看 [](https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker)
************************************************
# 它真的特么管用!!!
************************************************
## 现在,尽情享受 Nginx Bad Bot Blocker 能为你和你的网站所做的一切吧。
### 并帮助支持本项目
这个项目倾注了数千小时的编程和测试心血,请表达一些爱意吧
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="请我喝咖啡" width="300"/>](https://ko-fi.com/mitchellkrog)
************************************************
# 你的网站被黑客入侵过吗?
[](mailto:[email protected]) 来帮助你清理并保护你的网站。
************************************************
### 其他一些很棒的免费项目
- 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
************************************************
### 另请查看新版被入侵恶意软件与 WORDPRESS 网站大列表
此仓库包含一份我遇到的所有被恶意软件入侵的网站的列表。
大多数网站所有者并不知道他们的网站已被入侵,并被用来植入恶意软件。
在此查看:https://github.com/mitchellkrogza/The-Big-List-of-Hacked-Malware-Web-Sites
************************************************
### 对摄影感兴趣?
欢迎来 [mitchellkrog.com](https://mitchellkrog.com) 或 [Facebook](https://www.facebook.com/MitchellKrogPhotography) 拜访我,或在 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>
************************************************
### 致谢与贡献者:
非常感谢所有为本项目做出贡献的人。
本项目后台运行的生成器脚本和代码的许多部分改编自数百个来源的代码片段。
事实上,很难一一列举所有人,但这里列出几位关键人物,他们的小代码片段一直帮助我不断引入新功能。请向他们表达一些爱意,并顺便看看他们的一些项目。
- Konstantin Goretzki @konstantingoretzki https://github.com/konstantingoretzki (改进了 Fail2Ban 过滤器上的正则表达式)
- Stuart Cardall - https://github.com/itoffshore (安装、更新和设置脚本及 Alpine Linux 软件包维护者)
- Mike van Eckendonk - https://github.com/Eckybrazzz
- Nissar Chababy @funilrys - https://github.com/funilrys/PyFunceble (用于检查 ACTIVE、INACTIVE 和 EXPIRED 域名的出色脚本)
- 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 (在 Travis 构建标记和提交方面提供帮助)
- StackOverflow - http://stackoverflow.com/ (来自数百个问答的 bash 脚本)
- SuperUser - http://superuser.com/ (来自各种问答的代码片段)
如果你认为自己的名字应该出现在这里,请给我留言。
************************************************
### 编写这样的代码需要花费大量时间!!
这个项目倾注了数千小时的编程和测试心血,请表达一些爱意吧
[<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/kofi4.png" alt="请我喝咖啡" width="300"/>](https://ko-fi.com/mitchellkrog)
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/zuko.png"/>
************************************************
# MIT 许可证
## Copyright (c) 2017 Mitchell Krog - [email protected]
## https://github.com/mitchellkrogza
特此免费授予任何获得本软件和相关文档文件(以下简称“软件”)副本的人不受限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许向其提供本软件的人这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“AS IS”提供,不作任何明示或暗示的担保,包括但不限于对适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对任何索赔、损害赔偿或其他责任承担责任,无论是因合同、侵权或其他方式引起,还是因本软件或与本软件的使用或其他交易相关而产生。