船说 CMS 防止后台暴力破解怎么做
学完这篇,你能把船说 CMS 的后台从"任何人挂着脚本都能试密码"的状态,改成"试错成本高到不值得试"的状态,而且不影响你自己正常登录。
暴力破解后台的本质是:攻击者用脚本反复 POST 登录接口,试弱口令。所以防线要分层——别让他找到入口、找到也别让他试、试了就把 IP 封掉。下面按顺序做。
第一步:先看清自己的后台入口和登录日志
这一步是搞清楚现状:入口文件叫什么、有没有人已经在试。
登录服务器,看站点访问日志里对后台的请求:
grep -i "admin" /www/wwwlogs/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
如果某几个 IP 出现几百上千次,说明已经在被爆破。同时记下你的后台入口路径(船说 CMS 常见是 /admin/ 目录或 /admin.php,具体看你安装时设的名字),后面所有配置都要用这个真实路径。
注意:日志路径随面板和系统不同,宝塔面板通常是
/www/wwwlogs/,LNMP 一键包是/home/wwwlogs/,原生 Nginx 在/var/log/nginx/。别抄错路径,否则 grep 出来是空的,容易误判成"没人攻击"。
第二步:改掉后台入口路径
目标是让扫描器扫不到后台,这能挡掉 80% 的低成本扫描。
用面板的"文件管理"或 SSH 操作:
cd /www/wwwroot/你的站点目录
mv admin mypanel_8x3k
顺手把默认管理员账号从 admin 改成别的名字。
注意:改完目录名后,后台里如果有写死的跳转链接或配置项指向
admin,需要同步改。改之前先备份整个站点目录(tar -zcvf site_backup.tar.gz 站点目录)。改完立刻用新地址登录一次确认没问题,再关掉旧地址。
第三步:给后台套一层 HTTP Basic 认证(最狠的一招)
这一步做完的效果是:打开后台地址,先弹出一个浏览器原生的账号密码框,输入正确后才看到船说 CMS 的登录页。攻击者连登录页都摸不到。
生成密码文件(需要 apache2-utils 或 httpd-tools):
htpasswd -c /etc/nginx/.htpasswd adminuser
然后编辑站点的 Nginx 配置文件,在 server { } 里加:
location ^~ /mypanel_8x3k/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
保存后 nginx -t 测试配置,无报错再 nginx -s reload。
注意:Basic 认证的账号密码在传输时只是 Base64,不是加密。所以你的站点必须已经启用 HTTPS,否则这个密码等于明文传输。如果还没上 HTTPS,先申请证书再回来做这一步。
第四步:限制来源 IP
如果你只在自己公司或家里登录,直接白名单:
location ^~ /mypanel_8x3k/ {
allow 你的公网IP;
deny all;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
你的公网IP 直接百度"IP 查询"就能看到。动态 IP 的话跳过这一步,用下面的 fail2ban。
第五步:开启船说 CMS 自带的登录保护
登录后台,进「系统」→「安全设置」(部分版本叫「全局配置」或「安全中心」,找带"验证码""登录失败""锁定"字样的页面),做三件事:
- 开启登录验证码;
- 登录失败次数上限设为 5 次,锁定时长设为 30 分钟;
- 把管理员密码改成 16 位以上、大小写字母加数字加符号的随机串,用密码管理器存。
注意:很多这类页面的设置依赖 PHP 的 session 或缓存,改完记得清一次后台缓存,否则可能看着开了其实没生效——退出登录,故意输错 6 次密码验证一下会不会被锁。
第六步:用 fail2ban 自动封 IP
前面的手段挡不住分布式爆破,fail2ban 负责"试几次就把 IP 拉黑"。
apt install fail2ban -y # Debian/Ubuntu
因为第三步已经加了 Basic 认证,认证失败会记 401,直接用内置规则即可。新建 /etc/fail2ban/jail.d/nginx-auth.conf:
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
findtime = 600
bantime = 86400
bantime = 86400 表示封 24 小时。重启生效:systemctl restart fail2ban。查看封禁名单:fail2ban-client status nginx-http-auth。
第七步:每周花两分钟看一眼
fail2ban-client status nginx-http-auth
tail -50 /www/wwwlogs/access.log | grep -i admin
顺手把站点目录和数据库做一份异地备份,万一真被攻破也不至于丢数据。
小结
- 核心思路是分层:藏入口、加前置认证、限 IP、CMS 自带锁定、fail2ban 自动封禁,五层叠起来才有效。
- 最快见效的两招是改后台目录名和Nginx Basic 认证,十分钟能搞定。
- Basic 认证必须配合 HTTPS,否则等于白做。
- 管理员账号名和密码要一起换,只换密码不换账号名效果打折。
- 改任何配置前先备份,改完先
nginx -t再 reload,别把自己关在后台外面。 - 所有操作做完后,务必自己退出登录、输错几次密码,验证锁定和验证码真的生效了。
原文链接:https://www.gj0.com/thread-940.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。