海洋 CMS 如何设置 IP 访问黑名单

juming
juming 初级会员超兽战士
发布于 2026-10-08 22:49 ·1 浏览 ·0 回复

结论先行:海洋 CMS 本身没有面向全站访问的「IP 黑名单」菜单,真正可靠的封禁位置是 Web 服务器(Nginx / Apache)或 CDN、防火墙层——一条 deny 规则加上 nginx -s reload,几秒钟就能让指定 IP 打不开站点;后台若提供登录 IP 限制,那也只管后台登录,管不到前台访客。

为什么封 IP 要在 Nginx / Apache 层做,而不是在海洋 CMS 后台?

原因很直接:海洋 CMS 是 PHP 应用,等请求走到 PHP 时,恶意爬虫、扫描器、CC 攻击流量已经消耗了带宽和 PHP-FPM 进程。在 Nginx 层拒绝,请求连 index.php 都不会进,服务器开销最小。

结论:能拦截在 Nginx 层的 IP,就不要放到 PHP 层拦。

另外,海洋 CMS 的后台安全设置主要针对后台登录验证(验证码、登录失败次数等),它不是全站黑名单管理系统。所以运维上一律按「服务器层封禁 + 必要时 CDN 层封禁」来处理。

Nginx 怎么给海洋 CMS 加 IP 黑名单?

最推荐的是「独立黑名单文件 + include」的写法,方便长期维护,不用每次改配置文件。

第一步,新建黑名单文件,例如 /www/server/nginx/conf/blockip.conf:

deny 203.0.113.10;
deny 203.0.113.0/24;

(203.0.113.0/24 表示封掉整个 C 段,共 256 个地址;这是文档示例网段,请换成你实际要封的 IP。)

第二步,在海洋 CMS 站点的 server { } 块里引用,注意 deny 必须写在 allow all 之前:

server {
    listen 80;
    server_name www.example.com;
    include /www/server/nginx/conf/blockip.conf;
    allow all;
    root /www/wwwroot/seacms;
    # ... 其余 PHP 配置
}

Nginx 的 allow/deny 是按出现顺序匹配、第一条命中就生效,顺序写反会导致黑名单失效,这是最常见的踩坑点。

第三步,测试语法并平滑重载:

nginx -t && nginx -s reload

用 reload 而不是 restart,重载期间老连接不中断,海洋 CMS 前台的播放页不会掉线。

第四步,验证:在别的机器上 curl -I http://你的域名/,被封的 IP 应返回 403 Forbidden。

如果只想「静默丢弃」不给任何响应头,可以把 deny 换成 return 444;,这样对方连 403 都收不到,能省一点带宽。

Apache / .htaccess 怎么写?

Apache 2.4 写法(多数虚拟主机环境):

Require all granted
Require not ip 203.0.113.10
Require not ip 203.0.113.0/24

Apache 2.2 老写法:

Order Allow,Deny
Allow from all
Deny from 203.0.113.10
Deny from 203.0.113.0/24

把这段放进海洋 CMS 根目录的 .htaccess 即可,无需重启服务。注意:如果服务器是 Nginx + Apache 组合,或者在宝塔面板里用了「Nginx 反向代理」,加在 .htaccess 里的规则不生效,必须加在 Nginx 侧。

用了 CDN 或面板,封禁要怎么做?

服务器前面挂了 CDN(如 Cloudflare、又拍云)时,$remote_addr 取到的是 CDN 节点 IP,不是真实访客 IP。结论:这种架构下必须在 CDN 控制台封 IP,而不是在源站 Nginx 上封。

  • Cloudflare:Security → WAF → Tools → IP Access Rules,填入 IP 后选 Block,立即生效。
  • 宝塔面板用户:面板的「Nginx 防火墙」相当于把上面的 deny 规则可视化,添加后同样要重载。
  • 阿里云/腾讯云:直接用安全组入方向规则拒绝该 IP,作用在机器最外层,最彻底。

如果确实想在源站 Nginx 上识别真实 IP,需要配置 ngx_http_realip_module 的 set_real_ip_from 与 real_ip_header X-Forwarded-For,否则你封的会是 CDN 节点地址,可能连带把正常用户一起封掉。

封禁前后必须检查哪几件事?

第一,先确认自己的公网 IP 再动手。打开浏览器搜索「我的 IP」或执行 curl ip.sb,把结果单独记下来,避免把自己或者公司出口 IP 写进黑名单。

第二,IPv6 要单独写一条。deny 203.0.113.10; 只封 IPv4,同一台机器的 IPv6 地址仍然能访问,写成 CIDR(如 2400:cb00::/32)才完整。

第三,每次改完都要跑 nginx -t。语法错误会让 reload 失败甚至影响其它站点,测试通过再重载。

第四,封段位要谨慎。封 /24 以上(例如 /16)会影响大量真实用户,尤其是移动网络出口 IP 集中的场景,建议优先按单个 IP 或 /32 处理,观察效果再扩大范围。

总结一下:给海洋 CMS 加 IP 黑名单,正确姿势是在 Nginx 里用 deny(或 return 444)写在 allow all 之前、放独立文件 include、改完 nginx -t 再 -s reload;用 CDN 的就在 CDN 控制台封;Apache 环境用 Require not ip。海洋 CMS 后台的登录限制只管后台,别指望它拦前台流量。

版权声明:本文来自 GJ站长论坛《海洋 CMS 如何设置 IP 访问黑名单》
原文链接:https://www.gj0.com/thread-1236.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~