我如何要求一个IP范围而不是1个IP?


20

我的IP更改使用了不同的D类,因此我想设置一个范围:

123.123.123.xxx,其中最后一个段可以是0-255。

现在,Apache说:

<RequireAny>
   Require ip 127.0.0.1
   Require ip ::1
</RequireAny>

Answers:


22

首先,我假设您的意思是Apache 2.4,尽管带有“ apache-2.2”标签,因为您发布的语法来自2.4。

从Apache文档中:

ip.address是IP地址,部分IP地址,网络/网络掩码对或网络/ nnn CIDR规范。

我假设您的意思是您希望允许/ 24,因为D类是多播地址,而有类网络在90年代就死了。要允许/ 24,可以使用以下任意一种:

Require ip 123.123.123
Require ip 123.123.123.0/255.255.255.0
Require ip 123.123.123.0/24

就个人而言,我发现最后一个没有第一个模糊,并且比第二个更易于阅读。

您可能会发现文档的这一部分很有用:http : //httpd.apache.org/docs/2.4/howto/access.html#host


所以这在Apache 2.2上不起作用?phpMyAdmin可以在2.2和2.4上运行,我只是检查了一下该服务器正在运行的是2.2版本
user281497 2015年

除非向后移植某些东西以启用它,否则我从未在2.2配置文件中看到该语法。
fukawi2 2015年

@ fukawi2-是的,您当然是对的。对于user281497:虽然Require在Apache 2.2中支持有限,但是Apache 2.2不支持Require ip<RequireAny>。如Apache HTTP Server 2.4的新功能概述中所述,“现在可以使用Require指令和相关的容器指令(例如)来指定高级授权逻辑<RequireAll>。” 前者是对Apache 2.4进行的改进。
马驹

14

在Apache 2.2及更低版本中,您可以使用:

Order deny,allow
Deny from all
Allow from 24.18    # allow access from home
Allow from 162.12   # allow access from work

在您的.htacess中,直接在基本级别上(不在任何内<directive>)。

从Apache 2.4及更高版本开始,您可以执行以下操作:

<RequireAny>
    #IPv4 range at my work
    Require ip 207.100
    #IPv4 range I usually get through my mobile provider
    Require ip 29.11
    #IPv6 from home
    Require ip 2a02:4126:2aa4::/48  
</RequireAny>

(所有数字都是虚构的,不用担心;-)。

我已经使用了很多年,以保护我的后端文件夹免受99%的潜在用户的侵害。(工作得很好,除非您在旅行时是一个狂热的博客作者。如果您是Gmail用户:“上次帐户活动”,最底部的链接是找出您自己的“ IP习惯”的便捷方法)。


Require ip 2a02:4126:2aa4::/48和之间有什么区别Require ip 2a02:4126:2aa4::?两者都不会为我产生语法错误,而只有前者可以。
Geremia

3
是因为2a02:4126:2aa4 :: = 2a02:4126:2aa4:0000:0000:0000:0000:0000,而2a02:4126:2aa4 :: / 48匹配所有以2a02:4126:2aa4开头的地址?
Geremia

1

注意到您现在已经确认使用Apache 2.2,Apache 2.2不支持Require ip<RequireAny>。如Apache HTTP Server 2.4的新功能概述中所述,“现在可以使用Require指令和相关的容器指令(例如)来指定高级授权逻辑<RequireAll>。” 前者是对Apache 2.4进行的改进。

要在Apache 2.2中处理此问题,您可能需要执行以下操作:

Order allow,deny
Allow from 123.123.123    

这将获得指定的整个范围。


1

注意:我将其保留在此处,因为其他人可能会从中受益。这不是问题的直接答案。

例如:

要求IP 192.168.100.0/22

工作,而

要求IP 192.168.100.0/22 #localnetwork

失败!

重新启动httpd输出:

由于控制进程退出并显示错误代码,因此httpd.service的作业失败。有关详细信息,请参见“ systemctl状态httpd.service”和“ journalctl -xe”。

因此,似乎该行上没有评论


1
禁止在配置行内的任何位置添加注释,请参阅httpd.apache.org/docs/2.4/configuring.html:“以井号字符“#”开头的行被视为注释,将被忽略。注释可能不包含在与配置指令相同。”
Patrick Mevzek

0

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

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

从v2.4.8开始,主机require指令支持表达式。需要ip

ip提供程序允许根据远程客户端的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

网络abcd和网络掩码wxyz用于更细粒度的子网限制。

网络/ 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地址是在启动时解析的,因此表达式不会在请求时求值。

来源:https : //httpd.apache.org/docs/trunk/mod/mod_authz_host.html


5
请不要只复制并粘贴其他人的作品。这被称为窃。
Gerald Schneider
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.