船说 CMS 防止后台暴力破解怎么做

liulian
liulian 初级会员超兽战士
发布于 2026-10-08 12:04 ·1 浏览 ·0 回复

学完这篇,你能把船说 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 自带的登录保护

登录后台,进「系统」→「安全设置」(部分版本叫「全局配置」或「安全中心」,找带"验证码""登录失败""锁定"字样的页面),做三件事:

  1. 开启登录验证码;
  2. 登录失败次数上限设为 5 次,锁定时长设为 30 分钟;
  3. 把管理员密码改成 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,别把自己关在后台外面。
  • 所有操作做完后,务必自己退出登录、输错几次密码,验证锁定和验证码真的生效了。
版权声明:本文来自 GJ站长论坛《船说 CMS 防止后台暴力破解怎么做》
原文链接:https://www.gj0.com/thread-940.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~