簡體   English   中英

Apache 對 IP 的訪問控制 (X-Forwarded-For) 或有效用戶

[英]Apache Access Control to IPs (X-Forwarded-For) or valid-user

我曾經使用 valid-user 或 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 xxxx嗎?

我的 Apache 版本是:

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

0:27:23

提前致謝。

您應該能夠執行以下操作:

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

您不能直接訪問作為 require 指令一部分的標頭,因此請設置一個匹配的環境變量,並將其用作測試:

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

筆記:

  • SetEnvIf需要正則表達式作為測試
  • 環境變量名稱可以是您想要的任何名稱(不會沖突!)
  • SetEnvIf是在 <if> 指令之后計算的,所以如果你同時使用它們會造成混淆。 下面是使用 <if> 的替代方法。
    <if "%{HTTP:X-Forwarded-For} == '123.456.78.9'">
          Require all granted
    </if>
    <else>
          Require all denied
    </else>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM