宝塔面板IP黑白名单仅限制首页和登录页,无法防护API接口及WebSocket连接;需结合云服务器安全组(TCP层拦截)和Nginx反代层IP校验(覆盖全路径)才能实现有效防护。

宝塔面板的“IP黑白名单”模块只能限制面板首页和登录页,对API接口、WebSocket连接(如终端、文件管理器实时刷新)不生效。 这是多数人配置后仍被扫描或暴力破解的根本原因。
为什么在宝塔安全页添加白名单后还是能被扫到
宝塔的“IP黑白名单”本质是 Web 层中间件逻辑,仅作用于 /、/login、/static 等 HTTP 路由,但以下请求完全绕过该机制:
-
/socket.io/(终端、监控图表实时推送) -
/api/下所有接口(包括登录验证、密码重置、插件调用) - 直接访问
:8888端口的非 HTML 请求(如 curl -I http://x.x.x.x:8888/api/get_system_info)
换句话说:白名单开了,攻击者依然能发 1000 次 /api/login 爆破密码——面板根本不会拦截。
必须配合云服务器安全组才真正有效
云平台安全组是在 TCP 连接建立前就丢包,比任何应用层逻辑都早。只要没放行,连 SYN 包都进不来。
- 阿里云/腾讯云/华为云控制台中,找到对应 ECS 实例的安全组
- 入方向规则只保留一条:
协议类型:TCP,端口范围:8888(或你改过的面板端口),源 IP:你的办公IP/32或192.168.10.0/24 - 删掉默认的
0.0.0.0/0入方向规则——这是最常被忽略的一步 - 保存后立即生效,无需重启宝塔或服务器
此时哪怕宝塔白名单关闭、面板密码是 123456,外部 IP 连 telnet your-server-ip 8888 都会超时。
想用域名访问面板?Nginx 反代层加 IP 校验更可靠
如果你已用 bt.example.com 域名反代宝塔(即 Nginx listen 443 → proxy_pass http://127.0.0.1:8888),那就在 Nginx 的 server 块里加校验,比宝塔内置白名单覆盖更全。
在站点配置文件的 location / { 上方插入:
if ($remote_addr !~ ^(203\.123\.45\.67|192\.168\.10\.\d+|172\.16\.0\.[0-9]{1,3})$) {
return 403;
}
- 正则中的
\.是转义点号,\d+匹配 1–3 位数字,适合常见内网段 - 不要用
allow/deny指令——它在 location 内才生效,而 /socket.io 是独立 location,容易漏 - 这个 if 作用于整个 server,包括所有子路径和 WebSocket 升级请求
真正的防护不是“让非法请求进来再拒绝”,而是让它连连接都建不起来。安全组是第一道门,Nginx 是第二道,宝塔白名单只是第三道装饰性门槛——别把它当主力。











