Fail2ban 必须与宝塔协同使用,因其能实时解析日志并封禁异常IP,弥补面板防火墙对低频扫描的防御盲区;改宝塔端口后须同步更新系统及云平台防火墙规则;动态CC模式比静态规则更精准有效;发现waf_sc=5889647726等特征需立即排查Nginx挂马。

Fail2ban 必须和宝塔一起用,光靠面板防火墙拦不住低频扫描
宝塔自带的 Nginx 防火墙对 CC 和高频爆破确实有效,但它依赖“请求次数阈值”触发,而真实攻击者早学会放慢节奏——比如每分钟只扫 3 次 /wp-login.php 或 /admin.php,几天内试遍弱密码,面板根本不会报警。Fail2ban 不同,它直接盯 /var/log/auth.log(SSH)和 /www/wwwlogs/your-site.log(Web),用正则实时匹配“失败登录”“404 后台路径”等行为,IP 一异常就调 iptables 封禁,反应快、不依赖访问频率。
- 安装 Fail2ban 后必须手动启用 jail:编辑
/etc/fail2ban/jail.local,取消[sshd]和[nginx-http-auth]前的注释,并设enabled = true - Web 日志过滤要自定义:宝塔默认不监控网站日志,需在
[nginx-http-auth]下加logpath = /www/wwwlogs/*.log,再配对应filter - 封禁时间别设太短:
bantime = 3600(1小时)是底线,攻击者换 IP 成本极低,封 10 分钟等于白干
改宝塔端口后防火墙规则漏加,等于裸奔
很多人执行了 echo '32456' > /www/server/panel/data/port.pl,却忘了同步放开新端口,结果面板登不上,又不敢关防火墙——最后只能重装。这不是操作失误,是安全逻辑断层:端口改了,但 firewalld 或云厂商安全组仍只放行旧端口(如 8888),所有流量被掐死。
- 改完端口立刻执行:
firewall-cmd --zone=public --add-port=32456/tcp --permanent && firewall-cmd --reload - 腾讯云/阿里云用户必须额外进控制台,在“安全组”里放行新端口,宝塔改不了云平台规则
- 改端口后测试前,先留着 SSH 连接别断——万一失败,还能用
bt 14重置入口或回滚端口
CC 防御开动态模式,静态规则反而容易被绕过
宝塔 WAF 的“静态 CC 规则”(比如“单 IP 每秒超 10 次即封”)在真实场景中误杀率高:正常用户刷页面、前端重试、CDN 回源都可能触发;而攻击者用分布式代理池,每个 IP 只发 2–3 次,规则完全无效。动态 CC 模式会学习你站点的自然访问基线(比如首页平均 QPS 是 8),自动浮动阈值,既压住恶意流量,又不卡真实用户。
- 开启路径:宝塔面板 → 网站 → 对应站点 → 防火墙 → CC 防御 → 开启“动态 CC 防御”
- 首次启用后观察 24 小时,看拦截日志里是否大量出现“正常用户被限速”,若有,进“高级设置”调高
min_request_rate(默认 5,可试 8–12) - 别同时开“人机验证”和动态 CC——前者会打断首屏加载,后者已足够应对大多数脚本攻击
WAF 日志里看到“waf_sc=5889647726”,说明 Nginx 已被挂马
这个 cookie 值是典型 Nginx 挂马特征,攻击者利用未更新的 Nginx 模块或宝塔插件漏洞,向响应头注入 JS,强制用户加载远程广告脚本。它不走网站文件,而是直接篡改 Nginx 输出流,所以查源码、删木马文件都找不到痕迹。
- 立即检查:
nginx -V 2>&1 | grep -o 'configure arguments.*',确认是否含可疑模块(如--add-module=/tmp/xxx) - 重装纯净 Nginx:
bt 8卸载当前 Nginx,再用宝塔重新安装官方版本(勿勾选“编译安装”) - 检查定时任务:
crontab -l和/etc/cron.d/下是否有异常条目,挂马常靠定时任务持久化
挂马不是配置问题,是权限失控的结果。一旦发生,别只清日志——得查进程、查计划任务、查模块签名,否则修完两天又复发。

















