给 Nginx 加一道自动防护——WardenNet 一键部署记录
背景
自己维护的博客服务器,每天被各种自动化扫描器扫几千甚至上万次。访问日志里 /.env、/wp-login.php、/admin 的 404 请求刷屏,而博客本身的真实访问量才 2000 UV 左右。
试过几个方案:
- Nginx rate_limit:扫描器把 QPS 压到 2-5 就绕过去了
- fail2ban:正则匹配容易误封搜索引擎爬虫,关了
- 手动 ipset add:每周花 20 分钟手动操作,太累
发现 WardenNet
在搜索解决方案时看到了 WardenNet:Go 编写,基线自学习评分引擎,内核级拦截,还有个亮点是 deploy.sh 一键部署脚本。
一键部署(3 步)
服务器:阿里云轻量应用服务器 2C4G / Ubuntu 22.04 / Nginx
Step 1:下载
# 下载官方打包好的压缩包
wget https://github.com/wardennet/wardennet/releases/download/v1.0.0/wardennet.zip
unzip wardennet.zip
# 文件清单
ls -lh
# wardennet_linux # Go 二进制,5.8MB
# deploy.sh # 部署脚本
# wardennet.production.yaml
# AGENT_OPS.md
Step 2:执行部署
sudo bash deploy.sh
脚本自动检测:
[INFO] 检测系统基础信息...
[INFO] 检测 Web 服务器...
[INFO] 检测认证日志...
+---------------------------------------------------------+
| 服务器环境检测结果 |
+---------------------------------------------------------+
操作系统: ubuntu 22.04
架构: amd64
Init: systemd
Web 服务器: nginx
日志源:
- nginx_access /var/log/nginx/access.log
+---------------------------------------------------------+
自动生成配置 -> 安装二进制 -> 注册 systemd service -> 启动成功。
整个过程不到 2 分钟。
Step 3:验证
wardennet status # CLI 自检
systemctl status wardennet-agent # 服务状态
ipset list wardennet_blacklist # ipset 集合
iptables -S INPUT | grep wardennet # DROP 规则
效果
运行一周,数据对比:

| 指标 | 部署前 | 部署后 |
|---|---|---|
| 独立扫描 IP | 1247 | 89 |
| 4xx 占比 | 37% | 5% |
| 扫描请求 | 53210 | 1230 |
| 误报 | - | 0 |
| 内存 | - | 16MB |
扫描请求下降 97.7%,Nginx 响应时间从 128ms 降到 94ms。
运维小贴士
- CLI 命令:
wardennet status、wardennet blocklist status、wardennet blocklist add/del <ip> - 配置热重载:改
/etc/wardennet/config.yaml后 5 秒自动生效,不用重启 - 首次上线建议 report 模式:改
mode: report观察 24 小时再切mode: block - 白名单别忘了内网:
10.0.0.0/8、192.168.0.0/16加进ipset.whitelist
工作原理

核心链路:tail 采集 Nginx access log -> 基线自学习评分 -> 决策引擎 -> 评分 >= 50 写入 ipset -> iptables DROP 内核级拦截。
总结
deploy.sh 脚本做得比我预期的好很多——自动检测环境、自动发现日志路径、自动注册服务。加上 WardenNet 基线自学习的防误杀机制,对中小站点来说是个省心的选择。
GitHub:github.com/wardennet/wardennet
下载:wardennet.zip
许可:AGPLv3

浙公网安备 33010602011771号