Apache 2.4+ 通过 mod_authz_host 模块及 Require ip/not ip 指令实现 IP 访问控制,需置于 <Directory> 等作用域内,支持 IPv4/IPv6、CIDR 和范围格式,并依赖 <RequireAll> 组合黑白名单。

Apache 通过 httpd.conf(或站点配置文件)中的 <RequireAll>、Require ip、Require not ip 等指令实现 IP 访问控制,核心依赖 mod_authz_host 模块(Apache 2.4+ 默认启用)。注意:2.2 用 Order/Allow/Deny 语法,已弃用,本文仅针对 2.4+ 版本。
启用并确认模块加载
确保 mod_authz_host 已启用(通常默认开启):
- 检查
httpd.conf中是否存在类似行:LoadModule authz_host_module modules/mod_authz_host.so - 若被注释(开头有
#),请取消注释并重启 Apache - 运行
httpd -M | grep authz_host或apache2ctl -M | grep authz_host验证是否已加载
在目录或位置块中配置访问规则
IP 控制必须放在作用域内,如 <Directory>、<Location> 或 <Files> 块中。推荐在虚拟主机或站点根目录配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 白名单(仅允许指定 IP 访问):
<Directory "/var/www/html/admin"><br> Require ip 192.168.1.100<br> Require ip 2001:db8::1<br></Directory>
- 黑名单(拒绝特定 IP,其余放行):
<Directory "/var/www/html"><br> Require all granted<br> Require not ip 192.168.5.20<br> Require not ip 203.0.113.0/24<br></Directory>
- 组合黑白名单(例如:允许公司网段 + 某个远程运维 IP,拒绝已知攻击段):
<Directory "/var/www/html"><br> <RequireAll><br> Require ip 10.0.0.0/8<br> Require ip 203.0.113.42<br> Require not ip 198.51.100.0/24<br> </RequireAll><br></Directory>
⚠️ 注意:Require all granted 是默认放行;一旦使用 Require 指令,Apache 会自动隐式应用“默认拒绝”策略(即未显式允许的请求将被拒),因此黑白混用时需明确逻辑顺序和嵌套结构。
支持的 IP 表达方式
Apache 支持多种格式,兼容 IPv4 和 IPv6:
- 单个 IPv4:
192.168.1.5 - IPv4 CIDR 网段:
172.16.0.0/12 - IPv4 范围(用连字符):
192.168.1.10-192.168.1.20 - 单个 IPv6:
2001:db8::1 - IPv6 网段:
2001:db8::/32 - 主机名(不推荐,因 DNS 查询可能失败或延迟):
example.com或.trusted-domain.org(末尾点表示子域通配)
验证与调试技巧
配置后务必测试,避免锁死自身访问:
- 先用
httpd -t(或apache2ctl configtest)检查语法是否正确 - 重启服务:
systemctl restart httpd(CentOS/RHEL)或systemctl restart apache2(Debian/Ubuntu) - 查看错误日志定位问题:
tail -f /var/log/httpd/error_log或/var/log/apache2/error.log - 在日志中搜索
client denied by server configuration可确认拦截生效 - 临时加一条
Require ip YOUR_CURRENT_IP并配合Require all denied测试封锁效果(切勿在线上直接操作)

















