【问题标题】:Apache Access Control to IPs (X-Forwarded-For) or valid-userApache 对 IP 的访问控制(X-Forwarded-For)或有效用户
【发布时间】:2016-12-05 18:06:42
【问题描述】:

我曾经使用有效用户或 ip 指令阻止访问我的 Apache 服务器的某些文件夹,如下所示:

<Directory "/home/domain/public_html/secure">
    Require ip x.x.x.x
    Require ip y.y.y.y
    AuthType Basic
    AuthUserFile "/home/domain/secure/pass"
    AuthName "Authentication Required"
    Require valid-user
    Satisfy Any
</Directory>

现在,我已将我的服务器放在 F5-BIGIP 设备后面,该设备无法让我完全连接 DNAT 客户端。该设备还位于作为网关的 Linux 服务器后面,DNAT/SNAT 规则相应地工作。不过,我可以通过 X-Forwarded_For 记录客户端的 IP。但是我的 Apache 指令不再起作用了。

所以我的问题是,有什么方法可以使用Require X-Forwarded-For x.x.x.x 之类的东西吗?

我的 Apache 版本是:

[root@webserver1 ~]# apachectl -version
Server version: Apache/2.4.6 (CentOS)
Server built:   May 12 2016 1

0:27:23

提前致谢。

【问题讨论】:

    标签: linux apache f5


    【解决方案1】:

    您应该能够执行以下操作:

    SetEnvIf X-Forwarded-For x.x.x.x$ foo
    SetEnvIf X-Forwarded-For y.y.y.y$ bar
    ...
    Require env foo
    Require env bar
    

    【讨论】:

      【解决方案2】:

      您不能直接在 require 指令中访问标头,因此请设置一个匹配的环境变量,并将其用作测试:

      SetEnvIf X-Forwarded-For "^123\.456\.78\.9" MyAllowedIPAddress
      Require env MyAllowedIPAddress
      

      注意事项:

      • SetEnvIf 需要正则表达式作为测试
      • 环境变量名可以是任何你想要的(不会冲突!)
      • SetEnvIf 指令之后进行评估,因此如果同时使用这两个指令会造成混淆。下面是使用 的替代方法。
          <if "%{HTTP:X-Forwarded-For} == '123.456.78.9'">
                Require all granted
          </if>
          <else>
                Require all denied
          </else>
      

      【讨论】:

        猜你喜欢
        • 2013-10-22
        • 2018-06-14
        • 2021-05-25
        • 2021-01-23
        • 1970-01-01
        • 2021-06-08
        • 2019-11-30
        • 2018-05-24
        相关资源
        最近更新 更多