织梦ip访问限制设置方法

织梦站点遭受恶意攻击、垃圾注册、恶意采集时,IP 访问限制是最直接有效的拦截手段。本文从服务器层面到程序层面,系统讲解织梦 IP 访问限制的多种配置方法。

一、IP 限制的应用场景

1. 拦截恶意攻击源

识别到持续暴力破解后台或注入攻击的 IP,直接封禁访问。

2. 限制非目标地区访问

本地化服务站点屏蔽非服务地区 IP,减少无效流量和安全隐患。

3. 后台仅限白名单访问

织梦后台 /dede/ 目录仅允许管理员 IP 访问,极大提升安全性。

二、Nginx 层面 IP 限制

1. 黑名单方式封禁 IP

# nginx.conf
location / {
  # 封禁单个IP
  deny 192.168.1.100;
  # 封禁IP段
  deny 192.168.1.0/24;
  # 允许其他
  allow all;
}

2. 白名单方式保护后台

# 仅允许指定IP访问织梦后台
location /dede/ {
  allow 203.0.113.10;     # 管理员IP
  allow 203.0.113.0/24;  # 管理网段
  deny all;
  
  try_files $uri $uri/ /index.php?$query_string;
}

3. 使用地图变量批量管理

http {
  # 定义黑名单IP列表
  geo $blocked_ip {
    default 0;
    192.168.1.100 1;
    10.0.0.0/8 1;
  }
  server {
    if ($blocked_ip) {
      return 403;
    }
  }
}
Nginx 配置修改后需执行 nginx -t 测试语法,确认无误后执行 nginx -s reload 平滑重载,避免中断现有连接。

三、Apache 层面 IP 限制

1. 通过 .htaccess 配置

# .htaccess 文件
Order deny,allow
Deny from 192.168.1.100
Deny from 10.0.0.0/8
Allow from all

# 后台白名单保护
<Directory /dede>
  Order deny,allow
  Deny from all
  Allow from 203.0.113.10
</Directory>

2. Apache 主配置方式

<Directory "/var/www/html/dede">
  Require ip 203.0.113.10
  Require ip 203.0.113.0/24
</Directory>

四、织梦程序层面 IP 限制

1. 通过 common.inc.php 全局拦截

在织梦公共文件中添加 IP 检查,全站生效:

// /data/common.inc.php 末尾添加
$blocked_ips=array(
  '192.168.1.100',
  '10.0.0.0/8'
);
$visitor_ip=GetIP();

foreach($blocked_ips as $ip){
  if(strpos($ip, '/') !==false){
    // CIDR网段匹配
    list($subnet, $mask)=explode('/', $ip);
    if((ip2long($visitor_ip) & ~((1 << (32 - $mask)) - 1))==(ip2long($subnet) & ~((1 << (32 - $mask)) - 1))){
      header('HTTP/1.1 403 Forbidden');
      exit('访问被拒绝');
    }
  } else {
    if($visitor_ip==$ip){
      header('HTTP/1.1 403 Forbidden');
      exit('访问被拒绝');
    }
  }
}

2. 后台访问 IP 白名单

// /dede/config.php 顶部添加
$admin_ips=array('203.0.113.10', '203.0.113.11');
if(!in_array(GetIP(), $admin_ips)){
  ShowMsg('禁止访问', '../index.php');
  exit();
}

3. 结合数据库动态管理

// 建立IP黑名单表
CREATE TABLE dede_ip_blocklist(
  id INT AUTO_INCREMENT PRIMARY KEY,
  ip VARCHAR(45) NOT NULL,
  reason VARCHAR(255),
  create_time INT
);

// 封禁时写入数据库
$dsql->ExecuteNoneQuery(
  "INSERT INTO dede_ip_blocklist(ip,reason,create_time) 
   VALUES('$visitor_ip','频繁提交',".time().")"
);

// 访问时检查
$row=$dsql->GetOne(
  "SELECT * FROM dede_ip_blocklist WHERE ip='$visitor_ip'"
);
if($row){
  header('HTTP/1.1 403 Forbidden');
  exit('您的IP已被限制访问');
}

五、自动封禁配置

1. 基于访问频率自动封禁

# 使用 fail2ban 自动封禁高频访问IP
# /etc/fail2ban/jail.conf
[dede-protect]
enabled=true
port=http,https
filter=dede-filter
logpath=/var/log/nginx/access.log
maxretry=50
findtime=60
bantime=3600

# /etc/fail2ban/filter.d/dede-filter.conf
[Definition]
failregex=^<HOST> -.*"(GET|POST).*"
ignoreregex=

2. 使用宝塔面板可视化配置

宝塔面板「安全」-「SSH端口」下方提供 IP 规则管理界面,支持图形化添加黑白名单,适合不熟悉命令行的站长使用。

六、注意事项

IP 限制需保留搜索引擎蜘蛛 IP 的访问权限,否则会影响收录。CDN 环境下获取的可能是 CDN 节点 IP 而非真实访客 IP,需配置 X-Forwarded-For 头获取真实 IP。封禁时间建议设置过期机制,避免长期误封正常用户。定期审查黑名单,及时解封已无威胁的 IP。

IP 限制是织梦站点安全防护的基础措施,建议与防火墙、WAF、验证码等手段配合构建纵深防御。日常运营中持续监控访问日志,及时发现异常 IP 并建立封禁规则库。在保障安全的同时注意不要过度限制,平衡防护强度与正常访问体验,让站点在开放服务的同时保持坚实的安全边界。