簡體   English   中英

Apache httpd (mod_proxy) 似乎刪除/忽略 X-Forwarded-For 鏈中的第三個 IP 地址?

[英]Apache httpd (mod_proxy) seems to drop/ignore 3rd IP address in X-Forwarded-For chain?

考慮場景/流程:

remote user (client) > proxy1 > proxy2 > AWS ALB > httpd/reverse_proxy > my_application

當用戶的請求傳出他們的網絡時,X-Forwarded-For (XFF) 標頭會附加每個后續代理的 IP 地址。 例如,當它到達 ALB 時,XFF 標頭包含“192.168.1.100, 100.99.98.97”。 然后,ALB 會將 ClientIP 附加到此標頭,在這種情況下,它是 proxy2 的 IP。 最后,當請求到達位於我的應用程序前面的反向代理時,XFF 標頭現在是:“192.168.1.100、100.99.98.97、95.94.93.92”。

我看到的問題:在 reverse_proxy 處,httpd 似乎忽略或丟棄 X-Forwarded-For 標頭鏈中的最后一個/最右邊的 IP,特別是當地址超過 2 個時

  • 反向代理的 tcpdump 顯示標頭包含完整鏈,因此 AWS ALB 正在做它應該做的事情並附加 proxy2 的地址。
  • 在 httpd 訪問日志中打印 XFF 標頭時,我只看到打印的鏈中的前 2 個地址。
  • 更重要的是,當試圖對預期的第三個地址采取行動時,這個測試失敗了,進一步證明(我認為),第三個地址被丟棄了。 “采取行動”是指在 vhost 中設置RemoteIPHeader X-Forwarded-For后嘗試調用Require指令 (mod_authz_host)。
  • 如果我從流中刪除proxy1 ,那么我會在反向代理的 XFF 標頭中看到proxy2地址而不會出現問題。

我不確定我在配置或測試中遺漏了什么,雖然不是標准,但 XFF 標頭中的多個地址很常見。 我只在 Apache httpd 2.4 中遇到這個問題。 在 2.2 版中,這不是問題,我可以重復相同的設置/流程,我可以看到鏈中的所有 3 個地址。 提前致謝。

示例虛擬主機:

<VirtualHost *:80>
  ProxyPreserveHost On
  ServerName myapp.mydomain.com
  Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
  RemoteIPHeader X-Forwarded-For


  ProxyPass / http://10.1.2.3:8080/  timeout=3600
  ProxyPassReverse "/" http://10.1.2.3:8080/

  SetEnv proxy-sendchunked

  ErrorLog /var/log/httpd/error_myapp
  LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined2
  CustomLog /var/log/httpd/access_myapp combined2
  </VirtualHost>

Vhost 缺少 RemoteIPTrustedProxy 指令。

“當標頭值中列出了多個以逗號分隔的用戶代理 IP 地址時,它們會按從右到左的順序進行處理。如果不信任給定的用戶代理 IP 地址顯示前面的 IP 地址,處理將停止。標頭字段被更新對於未確認的 IP 地址的剩余列表,或者如果所有 IP 地址都是可信的,則該標頭將從請求中完全刪除。”

https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html#remoteiptrustedproxy

和往常一樣,答案就在我面前。

暫無
暫無

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

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