You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess有效封禁恶意IP?常规拦截规则失效解决方法

Apache环境下IP封禁失效原因及可靠封禁方案

原有规则失效的核心原因

  • 第一条Require not ip 46.161.11.规则失效:要么是Apache 2.4版本下访问控制规则顺序错误,没有用<RequireAll>包裹导致允许规则覆盖了拒绝规则;要么是站点前置了CDN/反向代理,Apache拿到的REMOTE_ADDR是代理节点IP而非真实访客IP;还有可能是目录配置没开AllowOverride All,.htaccess文件根本没被加载。
  • 第二条Rewrite规则失效:一方面正则存在冗余设计,虽然理论上能覆盖0-299的地址,但如果Apache没加载mod_rewrite模块、没开AllowOverride,规则本身不会执行;另一方面如果存在代理,匹配到的IP本身就是错的。另外如果恶意访客IP是46.161.11.段内带IPv6映射的地址,原正则也会匹配失败。

按可靠性排序的封禁方案

1. 网络层封禁(无绕过可能,性能最优)

优先在服务器防火墙层面拦截恶意IP段,流量在到达Apache之前就会被丢弃,完全不受Apache配置影响:

  • firewalld(CentOS/RHEL 7+默认防火墙)执行以下命令封禁整个C段:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="46.161.11.0/24" drop'
firewall-cmd --reload
  • iptables执行以下命令:
iptables -I INPUT -s 46.161.11.0/24 -j DROP
service iptables save

2. Apache原生访问控制规则(适合无服务器操作权限场景)

如果只能用.htaccess配置,先确认两个前提:一是站点目录的Apache配置已设置AllowOverride All,.htaccess可正常生效;二是如果前置了CDN/反代,已经配置mod_remoteip模块获取到了真实访客IP,否则所有IP规则都无效。
确认前提后,用Apache 2.4官方推荐的访问控制语法,不要用Rewrite做IP拦截(性能差、易出错):

<RequireAll>
    Require all granted
    Require not ip 46.161.11.0/24
</RequireAll>

注意:必须用<RequireAll>标签包裹规则,确保“允许所有合法访问、拒绝指定IP段”的逻辑按顺序执行,避免单条Require not ip被全局允许规则覆盖。IP段直接用标准CIDR格式书写,不要只写前缀,兼容所有Apache 2.4版本。
如果环境特殊必须用Rewrite规则,简化正则避免漏匹配,同时确认mod_rewrite模块已加载:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^46\.161\.11\.
RewriteRule ^ - [F,L]

3. 代理/CDN场景适配

如果站点前置了CDN、反向代理,必须先配置Apache信任代理节点,将REMOTE_ADDR替换为真实访客IP字段(比如Cloudflare对应CF-Connecting-IP、Nginx反代对应X-Forwarded-For),之后再写上述封禁规则,否则拦截的永远是代理节点IP,无法命中真实恶意访客。


内容的提问来源于stack exchange,提问作者josefus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:36:15