Apache-2.2

基本身份驗證 apache 2.2 繞過 IP

  • October 26, 2016

如何設置 apache 2.2 的基本身份驗證以繞過 IP?我已經關注了這個 wiki http://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements,但總是詢問密碼,也列出了 IP:

<Directory /var/www/html/mydir>
   AuthName "Private"
   AuthType Basic
   AuthUserFile "/etc/httpd/htpasswd"
   Require valid-user
   Order allow,deny
   Allow from 111.111.111.111 222.222.222.222
   Satisfy any
</Directory>

我在haproxy下,但我設置了IP轉發,我已經這樣設置LogFormat了:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

access_log 是:

111.111.111.111 - - [25/Oct/2016:12:35:41 +0200] "GET /index.html HTTP/1.1" 401 487 "-" "Mozilla/5.0 (X11; Linux armv7l; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.7.0"

你的配置很好,很標準。如果您正在使用,那麼所有請求haproxy的源 IP 地址就是它本身,並且檢查指令的是這個 IP 地址,而不是標頭的內容。haproxy``allow from``X-Forwarded-For

有幾種方法可以解決這個問題。使用 Apache v2.2,您可以使用第 3 方模組,例如 mod_custom_headers(http://support.en.ctx.org.cn/ctx109555.citrix抱歉,原來的 citrix 頁面似乎已移動或被刪除)或可能mod_rpaf(我’以前沒有使用過它,所以不能確定它是否allow from能正常工作)。

這些模組修改 Apache 保存的有關請求的數據,以便源 IP 成為您的代理設置的命名標頭中的值(例如X-Forwarded-For)。

或者,您可以升級到 Apache v2.4 並使用 mod_remoteip,它做同樣的事情。

請注意,還有一個 Apache 配置解決方案,您可以通過該解決方案在 上設置自己的標頭haproxy(或者X-Forwarded-For如果您信任它,您可以使用它)。就像是:

SetEnvIf X-Forwarded-For ^111.111.111.111 access_granted_by_ip
SetEnvIf X-Forwarded-For ^222.222.222.222 access_granted_by_ip
Order allow,deny
Allow from env=access_granted_by_ip

但我承認這對於多個 IP 地址來說有點笨拙。

引用自:https://serverfault.com/questions/811176