宽带建站危险分析与防御🤓👆

从日志异象到自动加固实录

By: Cloud | 2026.04

偶然的异象 🤖

在查看 Nginx 访问日志时,一些“熟悉又陌生”的访客开始出现:

👀 这些请求看起来很“不正常”,事实上也如此,它们的身份是: LLM 爬虫

不一定会攻击你,但会悄悄读取你的一切公开内容,然后奉献给使用它的用户,或者用作训练llm模型。

危险信号:激增的扫描 🚩

接下来,日志开始变得“不对劲”——

⚠️ 这些请求是在高强度,系统性地扫描敏感文件

  • .env → 可能泄露数据库密码 / API Key
  • config.json → 暴露系统配置结构
  • phpinfo / php_info.php → 泄露服务器环境信息

这位站长,你也不想你的api被薅完,倒欠云服务厂商💰吧

防御一:君子协定 🤝

既然 Bot 还会先看 robots.txt说明它们“尚存良知”。

User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /

拦得住循规蹈矩的君子,但防不住心怀鬼胎的小人。

防御二:上点手段 👊

面对自动化扫描,仅靠 robots.txt 显然不够——

👉 直接在 Nginx 层“物理断连”

# --- UA 黑名单(第一刀:识别身份) --- if ($http_user_agent ~* (GPTBot|ClaudeBot|CCBot|ChatGPT-User)) { return 403; } # --- 敏感文件封杀(第二刀:封资源) --- location ~* \.(env|php|sql|bak|config|log|yaml|yml|ini)$ { return 444; } # --- 恶意路径封杀(第三刀:封入口) --- location ~* ^/(application|_profiler|backup|config|web-console|admin|wp-includes|wp-admin|wp-content) { return 444; } # --- 隐藏文件保护(第四刀:补盲区) --- location ~ /\.(?!well-known) { deny all; access_log off; log_not_found off; }
  • 🧾 UA 层:识别“谁在访问”(Bot 指纹)
  • 📁 资源层:保护敏感文件(.env / config)
  • 🚪 路径层:封堵已知漏洞入口
  • 🕳 隐藏层:防止漏网之鱼(.git / .env 等)

实战验证:让它蒸发 💨

手动构造恶意请求测试效果:

> curl -I https://ai.tianhua.xyz/.env
curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR
> tail -f access.log
"HEAD /.env HTTP/2.0" 444 0 "-" "curl/8.14.1"

出现 444 状态码,证明非法连接已在瞬间被物理切断。

拒绝调戏:自动化加固 🛡️

手动写规则只是开始,真正的防御应该是:自动化 + 社区情报 + 持续进化

  • ⚙️ 自研脚本:一键备份 + 自动注入 Nginx 防护规则
  • 🧠 威胁情报:引入社区维护的恶意 IP / Bot 指纹库
  • 🔄 持续更新:自动同步最新规则,防御“新型脚本小子”

🚀 开源增强方案(强烈推荐)


🧩 最终形态:

Nginx 静态规则拦截 → BadBot 黑名单过滤 → CrowdSec 行为封禁

✔ 从“被动挨打”进化为“主动狩猎”

我的自动化脚本(即将开源)🚧
让普通站长也能拥有企业级防护
特别感谢柴特寄屁踢以及Windows表情面板对本网页制作的鼎力支持