Apache:限制对虚拟主机内特定源 IP 的访问

Posted

技术标签:

【中文标题】Apache:限制对虚拟主机内特定源 IP 的访问【英文标题】:Apache: Restrict access to specific source IP inside virtual host 【发布时间】:2013-11-11 18:22:39 【问题描述】:

我在同一个 apache 服务器上有几个命名的虚拟主机,对于其中一个虚拟主机,我需要确保只允许访问一组特定的 IP 地址。

请建议最好的方法来做到这一点。我查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内完成。

【问题讨论】:

【参考方案1】:

mod_authz_host 指令需要在 <Location><Directory> 块内,但我在 <VirtualHost> 中使用了前者,就像 Apache 2.2 一样:

<VirtualHost *:8080>
    <Location />
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    </Location>

    ...
</VirtualHost>

参考:https://askubuntu.com/questions/262981/how-to-install-mod-authz-host-in-apache

【讨论】:

【参考方案2】:

对于 Apache 2.4,您可以使用 Require IP directive。所以只允许来自 192.168.0.0/24 网络的机器(范围 192.168.0.0 - 192.168.0.255)

<VirtualHost *:80>
    <Location />
      Require ip 192.168.0.0/24
    </Location>
    ...
</VirtualHost>

如果你只是想让 localhost 机器能够访问,那么有一个特殊的Require local directive。

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

客户端地址匹配127.0.0.0/8 客户端地址是::1 连接的客户端和服务器地址都相同

这提供了一种方便的方式来匹配源自本地主机的连接:

<VirtualHost *:80>
    <Location />
      Require local
    </Location>
    ...
</VirtualHost>

【讨论】:

现在对于 ip4/6 的 localhost,您可以根据文档编写 Require local 谢谢@AlexeiMartianov 我已经根据您的见解修改了我的答案。 需要本地应该是答案,因为它使您能够在以下所有三个主机上获取您的机器:localhost127.0.0.1ServerAlias 在您的虚拟主机中设置(加上 ipv6如果启用)。 @pydoge 谢谢!是的,它仅对 一个 特定 IP 地址 (localhost) 非常有用,但 OP 在技术上要求“特定的 一组 IP 地址”。你是对的,很多人(包括我自己)在搜索如何将其限制为本地主机时发现了这个页面——就像你指出的那样 不起作用!在 docker 容器中运行可能是问题所在。我打算使用反向代理并需要阻止直接访问,但我无法让它工作。【参考方案3】:

如果您在虚拟主机中使用 apache 2.2,则应添加以下指令 (mod_authz_host):

Order deny,allow
Deny from all
Allow from 10.0.0.1

您甚至可以指定子网

Allow from 10.0.0

Apache 2.4 的配置看起来有点不同。 也许你最好指定你使用的是哪个版本的 apache。

【讨论】:

感谢您提供的信息,我可以通过在虚拟主机的位置标签内添加指令来配置它 @frameworksnow 很好,如果我的回答有用并且您认为这不是正确的答案,至少投赞成票 ;) 我试过了,但我没有权利按照 SO 投票。我希望我能很快在 SO 中获得更多的声誉,并且会回来投票。再次感谢您提供意见。 子网也可以指定为Allow from 192.168.1.0/24,IMO 更加惯用和灵活。【参考方案4】:

在 Apache 2.4 中,授权配置语法已更改,不应再使用 OrderDenyAllow 指令。

这样做的新方法是:

<VirtualHost *:8080>
    <Location />
        Require ip 192.168.1.0
    </Location>
    ...
</VirtualHost>

可以在 Apache 文档中找到使用新语法的更多示例:Upgrading to 2.4 from 2.2

【讨论】:

以上是关于Apache:限制对虚拟主机内特定源 IP 的访问的主要内容,如果未能解决你的问题,请参考以下文章

LAMP搭建13:Apache访问控制

在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制

Apache访问控制和Web虚拟主机

APache网站服务配置访问控制和构建虚拟主机

浅谈 Apache 的访问控制配置

ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址