使用代理阻止 Apache VHost 中的 IP 地址

使用代理阻止 Apache VHost 中的 IP 地址

我有如下的虚拟主机:

<VirtualHost *:80>
        ServerName somename.com

        <Proxy *>
                order deny,allow
                Deny from 65.74.5.130
                Allow from all
        </Proxy>

        ProxyPreserveHost On
        ProxyPass / http://0.0.0.0:8890/
        ProxyPassReverse / http://0.0.0.0:8082/
</VirtualHost>

我输入到该部分的 IPProxy没有被阻止。我是不是没有理解正确的拒绝/允许顺序?还是我需要使用其他指令?

答案1

你的order指令是错误的。

Order表示 apache 如何评估allowdeny指令。在和deny,allow配置中,您首先指定拒绝的来源,然后将例外(允许的来源)指定到拒绝列表中。

由于您的被禁 IP 符合两个指令,因此您将其作为拒绝规则的例外引入,允许其自由访问。

使用order allow,deny相同的denyallow指令来限制其访问:

<VirtualHost *:80>
    ServerName somename.com

    <Proxy *>
            order allow,deny
            Deny from 65.74.5.130
            Allow from all
    </Proxy>

    ProxyPreserveHost On
    ProxyPass / http://0.0.0.0:8890/
    ProxyPassReverse / http://0.0.0.0:8082/
</VirtualHost>

笔记:中的最后一个参数order设置默认行动如果没有匹配因为没有找到deny或,所以没有必要,但大多数人喜欢明确设置它。allowxxxx from all

这相当于:

order allow,deny
Deny from 65.74.5.130
Allow from all
  • 65.74.5.130同时匹配allowdeny,并按顺序(第一个允许,最后一个拒绝),它将拒绝访问。
  • 任何其他IP都会匹配allow,因此它将允许访问。

更改为:

order deny,allow
Deny from 65.74.5.130
  • 65.74.5.130仅匹配deny,因此拒绝访问
  • 任何其他 IP 都不会匹配任何allowdeny,因此它将采取默认操作allow,允许访问。

相关内容