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

问题描述 投票:0回答:4

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

请建议最好的方法。我已经查看了 mod_authz_hosts 模块,但看起来我无法在虚拟主机内执行此操作。

apache apache2
4个回答
60
投票

对于 Apache 2.4,您将使用 Require IP 指令。因此,仅允许来自 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>

如果您只希望本地主机能够访问,那么有一个特殊的 Require local 指令

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

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

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

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

59
投票

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


9
投票

如果您在虚拟主机中使用 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 版本。


8
投票

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

Order
Deny
Allow
指令。

执行此操作的新方法是:

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

使用新语法的更多示例可以在 Apache 文档中找到:从 2.2 升级到 2.4

© www.soinside.com 2019 - 2024. All rights reserved.