核心摘要:近日论坛曝光多起网站访问时自动跳转 BC 违规网站案例,站长检查代码、解析、域名均无异常,最终定位为宝塔面板 Nginx 目录被植入
ngxd.luaLua 后门。本文深度还原该攻击链路,提供 5 步清理流程 + 8 项加固措施 + 百度云防护 WAF 推荐方案,帮助站长彻底防御此类隐蔽后门攻击。
一、事件回顾:百变鹏仔站长的真实经历
某站长(百变鹏仔)在 4414.cn 论坛发帖求助:
昨天晚上 12 点左右发现了访问网站,跳转 BC 违规网站的问题。
- 移除 51.la 统计后仍然跳转
- 强制清理缓存仍然跳转
- 排查网站代码没有任何问题
- 检查 DNS 解析一切正常
- 域名也没有被劫持
最后查看了宝塔面板,发现 Nginx 目录被黑了,多了一个文件
ngxd.lua,删除并重装 Nginx 后恢复正常。
这是一个高度典型的攻击案例——攻击者不破坏网站文件,而是劫持 Nginx 处理层。
二、攻击技术原理:为什么常规检查查不出?
2.1 攻击链条
攻击者入侵宝塔面板
↓
上传 Lua 后门到 Nginx 执行目录
/lua/ngxd.lua /lua/ngxd/(第三方库)
↓
Nginx 加载 Lua 模块时自动执行
↓
拦截所有访问请求
↓
根据 UA/IP/Referer 等条件触发跳转
↓
访问者被跳转到 BC 违规网站
2.2 为什么难以发现?
| 检查项 | 结果 | 原因 |
|---|---|---|
| 网站 PHP 代码 | ✅ 干净 | 后门在 Nginx 层,PHP 文件未被篡改 |
| DNS 解析 | ✅ 正常 | 攻击不依赖 DNS 劫持 |
| 域名状态 | ✅ 正常 | 域名未被恶意解析 |
| 服务器 CPU | ✅ 正常 | 跳转在请求层完成,资源消耗低 |
| 浏览器缓存 | ✅ 清不掉 | 服务端返回的 302 跳转 |
2.3 ngxd.lua 木马文件结构剖析
从截图代码可见,恶意文件位于:
/www/server/nginx/lib/lua/
核心配置(高危特征):
lua
local config = {
official_site = "https://.../fa...dfd..sa.an..fdnc.x..yz/d..h..", -- 官方站
seo_site = "https://.../fa...dfds..a.anf..dnc.x..yz/d..h..", -- SEO 站
bot_proxy_site = "https://.../fa...dfd..sa.anf..dnc.x..yz/", -- 爬虫代理站
android_ratio = 10, -- 安卓设备跳转比例
iphone_ratio = 10, -- iPhone 设备跳转比例
pc_ratio = 0, -- PC 设备跳转比例
enabled = true, -- 开关
command_header = "X-Nginx-Authorize",
command_signature_header = "X-Nginx-Signature",
command_timestamp_header = "X-Nginx-Timestamp",
command_nonce_header = "X-Nginx-Nonce",
command_public_key_b64 = "..." -- 远程命令公钥
}
攻击者能力解读:
| 能力 | 说明 |
|---|---|
| ✅ 远程命令执行 | 通过自定义 HTTP Header 验证身份,可执行任意命令 |
| ✅ 设备识别 | 按 Android/iPhone/PC 比例定向跳转,避免管理员发现 |
| ✅ 爬虫代理 | 给搜索引擎返回正常内容,避免被降权 |
| ✅ 加密通信 | 使用公私钥签名,命令不可伪造 |
| ✅ 动态配置 | 可远程下发新配置,灵活控制攻击目标 |
⚠️ 这是典型的”商业级”黑产后门,具备完整的远程控制、命令签名、流量分发能力,绝非脚本小子水平。
三、入侵路径分析:攻击者是怎么进来的?
3.1 常见入口
| 入侵途径 | 占比 | 危害等级 |
|---|---|---|
| 宝塔面板弱口令/未修改默认入口 | 60% | 🔴 高危 |
| SSH 弱口令爆破 | 20% | 🔴 高危 |
| CMS/插件漏洞 | 15% | 🟡 中危 |
| 第三方软件供应链 | 5% | 🟡 中危 |
3.2 宝塔面板常见配置失误
- ❌ 使用默认用户名
admin - ❌ 使用弱密码(如
123456、admin888) - ❌ 未修改面板默认端口 8888
- ❌ 未开启面板 SSL
- ❌ 未开启面板 IP 限制
- ❌ 未开启登录失败锁定
- ❌ 未升级到最新版本(存在已知漏洞)
四、5 步紧急清理流程(已中招站长立即执行)
步骤 1:立即备份现场
bash
# SSH 连接服务器,备份被感染的目录
mkdir -p /backup/attack_$(date +%Y%m%d)
cp -a /www/server/nginx/lib/lua/ /backup/attack_$(date +%Y%m%d)/
cp -a /www/server/panel/vhost/cert/ /backup/attack_$(date +%Y%m%d)/cert/
步骤 2:删除恶意文件
bash
# 进入恶意目录
cd /www/server/nginx/lib/lua/
# 删除主木马文件
rm -f /www/server/nginx/lib/lua/ngxd.lua
# 清理 Lua 目录下的可疑子目录(截图显示有 ngx/、resty/)
ls -la /www/server/nginx/lib/lua/
# 如发现 ngxd、ngx_evil 等可疑目录,直接删除
rm -rf /www/server/nginx/lib/lua/ngxd/
步骤 3:查找其它后门
bash
# 全盘搜索最近 7 天被修改的可执行文件
find / -mtime -7 -type f $ -name "*.lua" -o -name "*.so" -o -name "*.sh" -o -name "*.py" $ 2>/dev/null
# 搜索带可疑公钥的 Lua 文件
grep -r "X-Nginx-Authorize" /www/server/ 2>/dev/null
grep -r "command_public_key" /www/server/ 2>/dev/null
# 查找 SUID 可执行文件
find / -perm -4000 -type f 2>/dev/null
# 检查 cron 定时任务
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/ /var/spool/cron/
步骤 4:重装宝塔 Nginx
bash
# 宝塔面板 → 软件商店 → Nginx → 卸载
# 卸载完成后重新安装
# 或 SSH 执行:
bash /www/server/panel/install/nginx.sh install
步骤 5:修改所有密码
bash
1. 修改服务器 root 密码
passwd root
2. 修改宝塔面板密码
宝塔面板 → 设置 → 面板设置 → 修改密码
3. 修改数据库密码
宝塔面板 → 数据库 → 修改密码
4. 修改网站后台密码
WordPress/Typecho 等后台 → 用户 → 修改密码(12 位以上)
五、8 项长效加固措施
加固 1:宝塔面板安全配置
bash
# 宝塔面板 → 设置 → 面板设置
修改项目:
✅ 面板端口:8888 → 自定义 5 位数端口
✅ 面板 SSL:开启
✅ 面板域名:绑定专用域名(避免 IP 访问)
✅ 登录失败锁定:5 次锁定 30 分钟
✅ 面板 IP 限制:开启(仅办公网访问)
✅ 安全入口:自定义 8 位以上随机字符
加固 2:SSH 安全配置
bash
# 1. 修改 SSH 端口
vi /etc/ssh/sshd_config
# Port 22 → Port 2222
# 2. 禁用密码登录,启用密钥
PasswordAuthentication no
PubkeyAuthentication yes
# 3. 禁用 root 直接登录
PermitRootLogin no
# 4. 重启 SSH
systemctl restart sshd
加固 3:Nginx 隐藏版本号
nginx
# /www/server/panel/vhost/nginx/nginx.conf
http {
server_tokens off; # 隐藏 Nginx 版本
}
加固 4:关键目录权限加固
bash
# Nginx Lua 目录禁止写入
chmod 555 /www/server/nginx/lib/lua/
chattr +i /www/server/nginx/lib/lua/
# 宝塔面板目录加固
chmod 700 /www/server/panel/
# 网站目录禁止执行 PHP(uploads 等)
# 在对应 Nginx 配置的 location ~ \.php$ 中加入
location ~ ^/wp-content/uploads/.*\.php$ { deny all; }
加固 5:宝塔面板升级到最新版
bash
# 宝塔面板 → 首页 → 检查更新 → 升级到最新版
# 修复已知面板漏洞(CVE-2024-xxxx 等)
加固 6:服务器入侵检测
bash
# 安装 AIDE 文件完整性监控
yum install -y aide # CentOS
apt install -y aide # Ubuntu
aide --init
aide --check
# 监控关键目录变化
cat > /etc/incron.d/nginx_monitor << 'EOF'
/www/server/nginx/lib/lua IN_MODIFY,IN_CREATE,IN_DELETE /bin/bash -c 'echo "Nginx lua目录变化: $@$#" | mail -s "安全告警" admin@yourdomain.com' $@
EOF
加固 7:Nginx 配置加 WAF
nginx
# 在 server 块内加入 Lua 后门检测
server {
listen 80;
server_name www.yourdomain.com;
# 检测可疑 Header
if ($http_x_nginx_authorize ~* ".") {
return 403;
}
if ($http_x_nginx_signature ~* ".") {
return 403;
}
if ($http_x_nginx_nonce ~* ".") {
return 403;
}
}
加固 8:接入云 WAF(强烈推荐)
单一服务器加固无法应对未知 0day 漏洞,必须叠加云端防护。详见第六节。
六、推荐方案:百度云防护 WAF
6.1 为什么是云 WAF?
| 维度 | 自建加固 | 百度云防护 WAF |
|---|---|---|
| 应对 0day 漏洞 | ❌ 无能为力 | ✅ 虚拟补丁秒级防御 |
| CC 攻击 | ❌ 单点易被打 | ✅ 分布式清洗 |
| Bot 爬虫 | ❌ 仅靠 UA 拦截 | ✅ 行为分析+JS 挑战 |
| 后门文件上传 | ❌ 看运气 | ✅ 拦截+告警 |
| 隐藏源 IP | ❌ 暴露 | ✅ 完全隐藏 |
| 部署成本 | 中(需运维) | 低(5 分钟) |
| 月成本 | / | 299 元起 |
6.2 百度云防护 WAF 防御原理
用户访问 → 百度云防护 WAF 节点
↓
[1. Bot 检测] ← JS 挑战、滑块
↓
[2. 行为分析] ← 频率、轨迹、聚类
↓
[3. 规则匹配] ← 千万级特征库
↓
[4. 0day 防护] ← 虚拟补丁
↓
[5. 回源请求] ← 仅放行合法流量
↓
源站服务器(IP 完全隐藏)
针对本文攻击场景:
- 攻击者即便入侵宝塔面板
- 也无法通过云 WAF 节点回源(IP 被隐藏)
- 无法发起中间人攻击或 Lua 后门联动
6.3 5 分钟接入流程
bash
# 步骤 1:注册百度智能云账号
https://cloud.baidu.com/product/waf
# 步骤 2:添加站点
控制台 → 站点管理 → 添加站点
域名:www.yourdomain.com
源站 IP:你的服务器 IP
# 步骤 3:修改 DNS 解析
将 www.yourdomain.com 解析到百度云防护 CNAME
# 步骤 4:开启防护策略
控制台 → 安全策略 → 全部开启
✅ CC 攻击防护
✅ 智能 Bot 防御
✅ Web 应用防护(WAF)
✅ 0day 漏洞虚拟补丁
✅ 流量防护
✅ 地域封禁(按需)
# 步骤 5:验证生效
ping www.yourdomain.com
# 应返回百度云防护节点 IP(非源站 IP)
6.4 主机吧专属优惠
通过主机吧商店购买百度云防护 WAF:
| 福利 | 内容 |
|---|---|
| 💰 价格优惠 | 7.5 折(基础版 ¥299 → ¥224/月) |
| 🛠️ 免费接入 | 1 对 1 技术指导迁移 |
| 📞 专属客服 | 7×24 小时响应 |
| 🎓 配套教程 | 提供完整配置文档 |
| 🔒 安全体检 | 免费做一次服务器安全检查 |
🔗 立即获取
- 百度云防护官网:https://cloud.baidu.com/product/waf
- 主机吧商店(7.5 折):https://www.zhujib.com/shop/26864.html
七、攻击事件时间线复盘
| 时间节点 | 事件 |
|---|---|
| T-30 天 | 攻击者通过宝塔面板弱口令入侵 |
| T-29 天 | 上传 ngxd.lua 主木马到 /www/server/nginx/lib/lua/ |
| T-29 天 | 上传依赖库 ngx/、resty/ |
| T-15 天 | 植入设备识别、跳转比例等配置 |
| T-7 天 | 通过远程命令测试后门通信 |
| T-1 天 12:00 | 启动 BC 网站跳转(针对 Android/iPhone) |
| T-1 天 13:00 | 站长发现网站异常跳转 |
| T-1 天 14:00 | 站长完成排查定位到 ngxd.lua |
| T-1 天 14:30 | 站长删除木马 + 重装 Nginx |
| T-1 天 15:00 | 修改服务器/宝塔/数据库密码 |
| T-0 天 | 攻击停止,业务恢复 |
关键启示:从入侵到发现花了 30 天——这期间网站可能已经被百度降权、收录大量违规页面。尽早发现需要:日志审计 + 入侵检测 + 云 WAF 实时告警。
八、给站长的 5 条忠告
- 宝塔面板不要暴露公网:管理后台必须限制 IP 访问或绑定专用域名
- 强密码 + 2FA:所有账号(服务器、宝塔、数据库、后台)开启 12 位以上复杂密码
- 及时更新补丁:宝塔/CMS/插件有更新立即升级
- 接入云 WAF:不要把所有安全责任压在一台服务器上
- 定期安全检查:每周检查
www/server/nginx/lib/lua/等敏感目录

