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

fra*_*now 36 apache apache2

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

请建议最好的方法来做到这一点.我看过mod_authz_hosts模块,但看起来我不能在虚拟主机内部进行.

Nei*_*ski 45

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>
Run Code Online (Sandbox Code Playgroud)

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

  • @NeilC.Obremski 你确定原来的 `&lt;Location /&gt;` 不正确吗?虽然它看起来像一个不正确的自关闭 xml 标签,但它不是 xml,并且斜杠是必需参数(url)的值 (5认同)

Jef*_*ett 26

对于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>
Run Code Online (Sandbox Code Playgroud)

如果您只是希望localhost机器具有访问权限,那么就有一个特殊的Require local指令.

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

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

这允许以方便的方式匹配源自本地主机的连接:

<VirtualHost *:80>
    <Location />
      Require local
    </Location>
    ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • 现在对于ip4/6的localhost,你可以为每个文档写一个`Require local`. (2认同)
  • @pydoge谢谢!是的,它仅对一个**特定的IP地址(本地主机)非常有用,但是OP从技术上要求“特定的*一组IP地址*”。没错,很多人(包括我自己)在搜索如何将其限制为仅本地主机时找到了此页面-就像您指出的那样 (2认同)

小智 9

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

执行此操作的新方法是:

<VirtualHost *:8080>
    <Location />
        Require ip 192.168.1.0
    </Location>
    ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

Order deny,allow
Deny from all
Allow from 10.0.0.1
Run Code Online (Sandbox Code Playgroud)

您甚至可以指定子网

Allow from 10.0.0
Run Code Online (Sandbox Code Playgroud)

Apache 2.4看起来与配置略有不同.也许你更好地指定你使用的是哪个版本的apache.