如何在Apache中配置IP黑白名单实现访问控制?

来源:TypeScript教程作者:郭世昌头衔:网络博主
导读:本期聚焦于郭世昌创作的《如何在Apache中配置IP黑白名单实现访问控制?》,敬请观看详情。服务器被恶意爬虫或异常流量刷接口,往往源于缺少网络层准入控制。Apache自带的模块能基于客户端地址做精确放行与拦截。核心思路是用Require指令配合ip匹配,白名单放行可信网段,黑名单拒绝已知攻击源。相比在应用代码里判断远程地址,Web服务器前置过滤更省资源,也不会穿透到后端逻辑。配置时需注意指令作用域,放在虚拟主机或目录块中才生效,且黑名单优先级常通过逻辑容器调整。理清allow deny旧指令与Require新语法的区别,可避免规则互相覆盖导致全站无法访问。

在企业内网对外提供服务或公开站点承受扫描攻击时,运维人员经常需要在Web服务器层面限制哪些IP可以访问、哪些IP必须阻断。Apache作为主流HTTP服务器,提供了非常成熟且灵活的访问控制机制,能够直接根据客户端IP地址执行白名单放行与黑名单拒绝。理解这套机制不仅有助于提升安全性,也能在遭遇突发流量时快速响应。

如何在Apache中配置IP黑白名单实现访问控制?

Apache访问控制指令的演进与基础语法

早期Apache 2.2版本使用OrderAllowDeny指令来做IP控制,例如Order Deny,Allow配合Deny from 192.168.1.5。但从Apache 2.4开始,官方推荐使用基于Require的授权指令,旧指令虽可通过兼容模块使用,但容易在新版本中出现配置语义混淆。新语法将访问控制统一纳入授权阶段,逻辑更清晰,也支持与身份验证等其他限制组合。

在2.4中,最核心的指令是Require ipRequire not ip。前者表示允许指定地址,后者表示拒绝。它们通常放在<Directory><Location>或虚拟主机配置块内。需要特别注意的是,当多条Require同时出现时,默认是“满足任一即授权”,若想表达“必须满足全部条件”,要使用RequireAll容器。很多站点配置后不生效,就是因为没理解这个默认逻辑。

下面是一段最小可运行的Apache 2.4配置示例,展示如何拒绝单个IP并允许内网段:

<Directory "/var/www/html">
    RequireAll
    Require ip 10.0.0.0/8
    Require not ip 10.0.0.50
</Directory>

上述配置中,RequireAll保证内部条件都要满足,即来源必须在10大网段内,且不能是10.0.0.50这台主机。若去掉RequireAll直接写两条Require,Apache会认为只要满足其中一条就通过,黑名单就失效了。

白名单与黑名单的典型配置方案

白名单模式适用于后台管理、内部接口等只允许少数IP访问的场景。思路是先拒绝所有,再显式放行。Apache中可以用RequireAll包含Require all denied与若干Require ip来实现。这种写法比逐条拒绝未知地址更可控,也避免遗漏。

例如公司运维后台仅允许办公网出口IP与跳板机访问,配置如下:

<Location "/admin">
    RequireAll
    Require all denied
    Require ip 203.0.113.10
    Require ip 198.51.100.0/24
</Location>

黑名单则常用于公开站点,正常用户都能访问,仅封锁骚扰者。此时不需要Require all denied,直接写Require not ip即可,其余请求由默认放行承接。如果全局默认是放行的,那么下面这段就能单独屏蔽两个恶意爬虫IP:

<Directory "/var/www/html">
    Require not ip 45.83.22.11
    Require not ip 91.214.124.0/23
</Directory>

当黑白名单需要并存时,建议把黑名单放在RequireAll内配合白名单使用,或者用RequireAnyRequireAll嵌套表达复杂逻辑。切忌在无意中用相互矛盾的指令导致合法用户被挡在门外,上线前应使用apachectl configtest检查语法并用curl从外部IP验证。

基于.htaccess与模块扩展的灵活实践

若没有服务器主配置权限,比如租用共享虚拟主机,可以把规则写入站点根目录的.htaccess文件。只要主配置中对应目录设置了AllowOverride AuthConfig或更高权限,.htaccess里的Require指令就会生效。这种方式修改无需重启Apache,适合频繁调整封锁列表的运营人员。

一个.htaccess黑名单示例:

Require all granted
Require not ip 103.224.182.0/24
Require not ip 141.98.10.20

对于超大规模IP库,纯文本指令会让配置臃肿,可借助mod_rewrite结合外部文件,或编译mod_security做更高效的CIDR匹配。另外,若前端有CDN或负载均衡,Apache看到的远程地址会是上层设备IP,此时要先还原真实客户端IP,例如使用mod_remoteip并设置RemoteIPHeader X-Forwarded-For,否则黑白名单会误伤中转节点。掌握这些细节,才能让Apache的IP访问控制真正贴合业务拓扑。

ApacheIP_whitelistIP_blacklist修改时间:2026-08-19 01:24:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。