| REPO | 成为赞助商 |
|---|---|
| 如果您成为赞助商,您的徽标和指向您域名的链接将显示在此处。如果您想赞助此项目,请发送邮件至 [email protected],因为南非目前尚不支持 Github 赞助计划。 | |
| 在 https://ko-fi.com/mitchellkrog 帮助支持我 |
请确保您已订阅 Github 通知,以便在拦截器更新或发生任何重要或关键(可能破坏性)变更时收到通知。
这是我们新的首选安装方法,现在通过一组 shell 脚本完成,这些脚本由 Stuart Cardall @itoffshore 贡献到此仓库并负责维护,他是 Alpine Linux 软件包维护者之一。
以下说明适用于快速且无痛的安装过程,该过程会下载拦截器所需的全部文件,并且脚本包含将所需 include 添加到您的 nginx.conf 和 nginx .vhost 文件中。设置脚本假定您的 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 位置)
运行任何 setup、install 或 update 脚本时,使用 --help 或 -h 查看选项。
请注意:对于使用 Let's Encrypt SSL 证书的用户,首选且 100% 有效的方法是使用 Webroot Authenticator 方法。使用 http challenge 方法似乎存在一些问题,但可以确认 webroot 方法运行完美。我们目前不确定 http-01 challenge 方法是 certbot 还是 nginx 的 bug。
来自 Nginx 的重复网络报告不是 bug,也无法修复,这是拦截器的预期行为。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 会下载所有必需的文件,包括安装和更新脚本。```sh cd /usr/local/sbin sudo ./install-ngxblocker
这将向您展示将要进行的更改的输出结果
**(注意:这仅为试运行,尚未进行任何更改)**```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 参数运行 install 脚本,以从仓库下载所有必要的文件:```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 上正确的文件夹中。
请务必通过运行以下两条命令,将你的设置和更新脚本设置为可执行。在继续执行第 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 文件已经包含了默认的 /etc/nginx/conf.d/* 引入) 据我所知,所有 Nginx 安装在其随各版本分发的 nginx.conf 文件中都包含此默认引入。```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 中。
更多 IP 或 IP 段可以添加到位于 /etc/nginx/bots.d/whitelist-ips.conf 的可自定义 whitelist-ips.conf 文件中。
**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-5.png"/>
现在使用 -x 参数运行 setup 脚本,以便对 nginx.conf 进行所有必要的更改(如果需要),并将所需的 include 添加到所有 vhost 文件中。
此 setup-ngxblocker 脚本假定位于 /etc/nginx/sites-available 中的所有 vhost 文件都以 .vhost 扩展名结尾。让所有 vhost 配置文件都以 .vhost 扩展名结尾是一种良好的实践,但如果你更愿意保留现有的扩展名(例如 .conf),只需使用 `-e` 参数修改运行 setup-ngxblocker 的方式,以指定你用于 vhost 文件的扩展名。
例如,如果你的 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 操作,并且还为您在 whitelist-ips.conf 文件中将您自己的 IP 地址加入了白名单。您可以将更多 IP 或 IP 段添加到位于 /etc/nginx/bots.d/whitelist-ips.conf 的可自定义 whitelist-ips.conf 文件中。
这个设置脚本所做的,只是为您在 .vhost 文件中添加了以下 include 语句,它还会将 /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 的默认白名单。其他默认被列入白名单的机器人也同样适用。
所有包含文件都已添加注释,方便你使用。
(测试是否正常工作)
测试
在另一台 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]
这将自动将文件放入你指定的位置,它会使用你的自定义位置将 include 语句写入你的 vhost 文件中;当 update-ngxblocker 拉取新更新时,它也会自动使用你自己的自定义位置重写 globalblacklist.conf 文件中的“Include”部分。再次感谢 Stuart Cardall @itoffshore 为这些优秀脚本所做的贡献。
Nginx 的重复网络报告并非 bug,也无法修复,这正是拦截器的预期行为。IP 黑名单的每日更新会导致一些知名 IP 和 IP 段被列入黑名单 旧值 "1",随后它们会在 globalblocklist 文件的最末尾(即加载顺序的最后)被列入白名单,从而将我们已知的良好 IP 设置为新的 值 "0",由此将其列入白名单。自拦截器上线第一天起便是如此,今后也将保持这样。这些只是简单的 [警告] 消息,而非 [紧急] 消息,它们绝不会以任何方式影响 Nginx 的运行。
(超过 4000 个恶意引荐来源、垃圾引荐来源、user-agent、恶意机器人、恶意 IP、色情、赌博和点击劫持网站、高利润 SEO 公司、WordPress 主题检测器,且数量还在不断增加)
这个项目倾注了数千小时的编程和测试心血,请给予一些支持
机器人会通过伪装其 user agent 来试图让自己看起来像其他软件或网站。它们的 user agent 名称可能看起来无害,甚至完全合法。
例如,“^Java”,但根据 Project Honeypot 的说法,它实际上是最危险的之一;然而,互联网上有很多合法机器人的 user agent 字符串中包含“Java”,因此许多人采取的拦截“Java”的做法不仅无知,而且还会拦截掉非常合法的爬虫,包括 Google 和 Bing 的一些爬虫,这也让我清楚地看到,那些编写机器人拦截脚本的人很少真正测试过它们。
垃圾引荐来源和垃圾域名使用非常巧妙的技术来跳出你的网站,运行高利润的点击劫持和点击重定向活动,向毫无防备的网页浏览者投放广告,甚至将恶意软件、广告软件或勒索软件植入他们的浏览器,使其随后成为其高利润机器人网络的一部分。
此机器人拦截器包含数百个域名和 IP 地址,这些内容大多数人在其 Nginx 日志中甚至都看不到。这是因为我的所有网站都运行在 SSL 上并使用内容安全策略(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)。
如有关于错误列表条目或任何其他问题,请在问题系统中提交,我们会进行调查,必要时将其移除。我对用户问题的响应非常迅速,并曾连续数天帮助无数用户让他们的机器人拦截器正常工作。你可以说我疯了(这点有争议),但我热爱帮助他人,不会忽视问题或遇到困难的人。
互联网上很多列表会将奇怪的域名放入其 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]`
这会通过电子邮件每天向你发送一份 referer 列表,使用 awk 命令排除 google、bing 和你自己的域名。
##### 用于每日监控 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 更新时同步更新。随着列表的增长,将会创建更多的排除文件。
************************************************
## 按照以下简单可视化指南阻止 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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></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 - Adding Segments to Stop Ghost Spam"/></td>
</tr>
</table>
************************************************
## 使用 GOOGLE SEARCH CONSOLE / WEBMASTER TOOLS 屏蔽垃圾域名
(如何使用 google-disavow.txt 文件)
我添加了一个名为 google-disavow.txt 的 Google Disavow 文本文件的生成功能。此文件可用于 Google 的 Webmaster Tools,以将这些域名全部屏蔽为垃圾或不良链接。请谨慎使用。
************************************************
## 无法使用此完整拦截器?试试 ROBOTS.txt 版本?
许多人受制于他们的托管公司,无法获得其网站后端服务器的 root 访问权限。如果你的情况如此,请查看自动生成的 robots.txt 文件,它将在一定程度上帮助你阻止许多恶意 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 网站)将帮助你阻止此拦截器中的所有垃圾 Referrer 访问你的网站。
这里提到这一点仅仅是因为许多使用 CPanel 系统的用户认为他们使用的是 Nginx 服务器,但实际上他们运行的是 Apache 服务器,位于 Nginx 代理服务器之后。.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="Buy me Coffee" 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 (用于检查活动、非活动和过期域名的优秀脚本)
- 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="Buy me Coffee" width="300"/>](https://ko-fi.com/mitchellkrog)
<img src="https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/.assets/zuko.png"/>
************************************************
# MIT 许可证
## 版权所有 (c) 2017 Mitchell Krog - [email protected]
## https://github.com/mitchellkrogza
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人无限制地处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许向其提供本软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他行为中,由本软件或本软件的使用或其他交易引起、产生或与之相关。