Apache 模块 mod_authz_host

Description:基于主机(名称或 IP 地址)的组授权
Status:Base
Module Identifier:authz_host_module
Source File:mod_authz_host.c
Compatibility:forward-dns提供程序已在 2.4.19 中添加

Summary

mod_authz_host实现的授权提供程序是使用Require指令注册的。可以在<Directory><Files><Location>节以及.htaccess文件中引用该指令,以控制对服务器特定部分的访问。可以根据 Client 端主机名或 IP 地址来控制访问。

通常,访问限制指令适用于所有访问方法(GETPUTPOST等)。在大多数情况下,这是所需的行为。但是,可以通过将指令括在<Limit>节中来限制某些方法,而使其他方法不受限制。

要求指令

在授权阶段使用 Apache 的Require指令来确保允许或拒绝用户访问资源。 mod_authz_host 使用iphostforward-dnslocal扩展授权类型。也可以使用其他授权类型,但可能需要加载其他授权模块。

这些授权提供者影响哪些主机可以访问服务器的区域。可以通过主机名,IP 地址或 IP 地址范围控制访问。

从 v2.4.8 开始,主机 require 指令支持expressions

Require ip

ip提供程序允许根据远程 Client 端的 IP 地址来控制对服务器的访问。指定Require ip ip-address时,如果 IP 地址匹配,则允许访问请求。

完整的 IP 地址:

Require ip 10.1.2.3
Require ip 192.168.1.104 192.168.1.205

主机允许访问的 IP 地址

部分 IP 地址:

Require ip 10.1
Require ip 10 172.20 192.168.2

IP 地址的前 1 到 3 个字节,用于子网限制。

网络/网络掩码对:

Require ip 10.1.0.0/255.255.0.0

网络 a.b.c.d 和网络掩码 w.x.y.z。有关更细粒度的子网限制。

网络/ nnn CIDR 规范:

Require ip 10.1.0.0/16

与前面的情况类似,除了网络掩码由 nnn 个高 1 位组成。

请注意,以上最后三个示例完全匹配同一组主机。

可以如下所示指定 IPv6 地址和 IPv6 子网:

Require ip 2001:db8::a00:20ff:fea7:ccea
Require ip 2001:db8:1:1::a
Require ip 2001:db8:2:1::/64
Require ip 2001:db8:3::/48

注意:由于 IP 地址是在启动时解析的,因此在请求时不会评估表达式。

Require host

host提供程序允许根据远程 Client 端的主机名来控制对服务器的访问。指定Require host host-name时,如果主机名匹配,则允许访问该请求。

一个(部分)域名

Require host example.org
Require host .net example.edu

名称匹配或以该字符串结尾的主机被允许访问。仅匹配完整的组件,因此上面的示例将匹配foo.example.org但不匹配fooexample.org。无论HostnameLookups指令的设置如何,此配置都将导致 Apache 对 Client 端 IP 地址执行双向反向 DNS 查找。它将对 IP 地址进行反向 DNS 查找,以找到关联的主机名,然后对主机名进行正向查找,以确保其与原始 IP 地址匹配。仅当正向和反向 DNS 一致且主机名匹配时,才允许访问。

Require forward-dns

forward-dns提供程序允许基于简单主机名来控制对服务器的访问。指定Require forward-dns host-name时,允许访问与host-name对应的所有 IP 地址。

host提供程序相反,此提供程序不依赖于反向 DNS 查找:它只是查询 DNS 以获取主机名,并允许 Client 端的 IP 匹配。因此,它仅适用于主机名,不适用于域名。但是,由于不使用反向 DNS,因此它将与使用动态 DNS 服务的 Client 端一起使用。

Require forward-dns bla.example.org

从名称bla.example.org解析 IP 的 Client 端将被授予访问权限。

forward-dns提供程序已在 2.4.19 中添加。

Require local

如果满足以下任一条件,则local提供程序允许访问服务器:

  • Client 端地址匹配 127.0.0.0/8

  • Client 地址是:: 1

  • 连接的 Client 端和服务器地址都相同

这提供了一种便捷的方法来匹配源自 localhost 的连接:

Require local

Security Note

如果要将内容代理到服务器,则需要注意,Client 端地址将是代理服务器的地址,而不是 Client 端的地址,因此在这种情况下使用Require指令可能无法实现您的意思。有关此问题的一种可能的解决方案,请参见mod_remoteip