apache需用require指令封ip,放于virtualhost或directory块并设默认策略;注意真实ip识别(启用mod_remoteip);推荐独立文件+include管理黑名单。

Apache 本身不自动识别恶意 IP,但能通过配置直接拒绝指定 IP 或网段的访问。关键在于用对指令、放对位置、确认真实 IP 来源——否则封了代理 IP,等于白忙。
用 Require 指令写黑名单(Apache 2.4 推荐)
Apache 2.4 废弃了旧版 Order/Allow/Deny,必须用 Require 系列指令。规则要放在 <virtualhost></virtualhost> 或 <directory></directory> 块里,并显式声明默认策略:
- 先加
Require all granted(默认允许),再加Require not ip 192.168.5.100封单个 IP - 封整个网段:写成
Require not ip 203.0.113.0/24,IPv6 要带前缀长度,如Require not ip 2001:db8::/32 - 多个规则用
<requireall></requireall>包裹,避免逻辑冲突;不要在同一个RequireAll里混写Require ip和Require not ip - 修改后运行
apachectl configtest确认语法正确,再systemctl reload apache2
用独立文件管理大量黑名单 IP
手动改主配置不便于维护,推荐把所有封禁规则抽到单独文件,用 Include 引入:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 新建
/etc/apache2/conf-available/blocked_ips.conf,内容如:Require not ip 1.2.3.4Require not ip 203.0.113.0/24 - 在
<virtualhost></virtualhost>内加入:Include /etc/apache2/conf-available/blocked_ips.conf - 这样后续增删 IP 只需编辑该文件 + reload,不碰主配置,也方便脚本自动更新
注意真实 IP 问题(尤其用了 CDN 或反代)
如果网站前面有 Nginx、Cloudflare 或其他代理,%h 日志变量和 Require not ip 匹配的都是代理 IP,不是访客真实 IP:
- 启用
mod_remoteip模块,设置RemoteIPHeader X-Forwarded-For - 添加可信代理 IP:
RemoteIPInternalProxy 192.168.0.0/16(填你自己的反代网段) - 日志格式中改用
%{X-Forwarded-For}i记录真实 IP,封禁时也得基于这个值做判断(Require 不支持直接读请求头,需配合 mod_security 或 fail2ban)
慎用 .htaccess 方式
虽然能在网站目录下建 .htaccess 文件快速封 IP,但有明显短板:
- 必须开启
AllowOverride AuthConfig,否则规则无效 - 每次请求都要解析该文件,高并发下增加开销
- 只对当前目录及子目录生效,无法全局控制
- Apache 2.4 下仍可用旧语法(
Order allow,deny),但不推荐新项目使用
不复杂但容易忽略。核心就三点:用对 Require、管好真实 IP、别让规则互相打架。










