Apache 2.4 使用 Require 指令实现IP黑白名单,须配合 RequireAll/RequireAny,禁用旧 Order/Allow/Deny;应置于 VirtualHost 或 Directory 块中并显式设默认策略,启用调试日志定位 403 原因,动态封禁需借助 mod_evasive 或日志分析脚本。

Apache 2.4 中用 Require 指令实现 IP 黑白名单
Apache 2.4 彻底弃用了 Order/Allow/Deny 语法,改用基于 Require 的授权引擎。直接套用旧配置会导致 500 错误,且日志里只显示 “AH01630: client denied by server configuration”。必须用 Require ip 或 Require not ip 配合 RequireAll/RequireAny 组合逻辑。
实操建议:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 黑白名单不能混写在同一个
<RequireAll>块里——比如既Require ip 192.168.1.0/24又Require not ip 192.168.1.100会因逻辑冲突导致全部拒绝 - 白名单优先级更高:想“只允许 A 段 + 拒绝 A 段中某几个 IP”,应把
Require not ip放在RequireAll内,外层再包一层RequireAny包含白名单段和例外规则 - IPv6 要写成
Require ip 2001:db8::/32,不能省略前缀长度,否则不生效
如何在虚拟主机或目录块中安全启用访问控制
把访问规则写在全局 httpd.conf 顶层,容易误杀整个服务;写在 .htaccess 则依赖 AllowOverride AuthConfig,且性能较差。最稳妥的方式是嵌入到具体 <VirtualHost> 或 <Directory> 块中,并显式声明授权引擎启用状态。
实操建议:
- 必须在规则前加
Require all denied(默认拒绝)或Require all granted(默认允许),否则 Apache 会忽略后续Require指令 - 若使用
<Directory "/var/www/html/admin">,路径末尾不要加斜杠,否则匹配失败 - 修改后必须运行
apachectl configtest,确认输出 “Syntax OK” 才能systemctl reload httpd,硬重启可能中断连接
常见错误:403 Forbidden 却查不到拒绝原因
Apache 不会在错误日志中默认记录被 Require 拒绝的具体 IP 和规则,只记 “client denied by server configuration”。没有开启详细日志,就无法判断是规则写错、IP 匹配失败,还是客户端真实 IP 被代理覆盖了。
实操建议:
- 临时启用调试日志:在
httpd.conf加LogLevel authz_core:debug,重启后看error_log里每条请求的匹配过程 - 如果前端有 Nginx 或 CDN,
%a日志变量记录的是代理 IP,需用%{X-Forwarded-For}i并配合RemoteIPHeader X-Forwarded-For和RemoteIPInternalProxy模块还原真实 IP - 测试时用
curl -v --interface 192.168.1.50 http://yoursite.com指定源 IP,比改本机 hosts 更可靠
动态黑名单:用 mod_evasive 或自定义日志+脚本联动封禁
静态 IP 名单适合长期策略,但对暴力扫描、CC 攻击无效。Apache 自身不提供自动封禁能力,需借助模块或外部工具。
实操建议:
-
mod_evasive可拦截高频请求,但只能返回 403,不能写入 iptables;启用后务必调大DosPageCount和DosSiteCount,否则正常用户刷新页面就触发 - 更可控的做法:用
awk解析access_log,提取 5 分钟内超 100 次 404 的 IP,写入临时黑名单文件,再通过Include /etc/httpd/conf/blacklist.conf动态加载(需定期systemctl reload httpd) - 注意 SELinux 上下文:如果黑名单文件放在非标准路径(如
/opt/apache-blacklist.conf),要执行chcon -t httpd_config_t /opt/apache-blacklist.conf

















