【问题标题】:Apache httpd (mod_proxy) seems to drop/ignore 3rd IP address in X-Forwarded-For chain?Apache httpd (mod_proxy) 似乎丢弃/忽略 X-Forwarded-For 链中的第三个 IP 地址?
【发布时间】:2020-07-06 14:11:10
【问题描述】:

考虑场景/流程:

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>

【问题讨论】:

    标签: apache http http-headers reverse-proxy x-forwarded-for


    【解决方案1】:

    Vhost 缺少 RemoteIPTrustedProxy 指令。

    “当标头值中列出了多个以逗号分隔的用户代理 IP 地址时,它们按从右到左的顺序进行处理。当不信任给定的用户代理 IP 地址提供前一个 IP 地址时,处理将停止。标头字段更新为剩余的未确认 IP 地址列表,或者如果所有 IP 地址都受信任,则从请求中完全删除此标头。"

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2017-03-17
      • 2021-02-25
      • 2018-10-14
      • 2016-05-22
      • 2013-10-22
      • 2016-02-17
      • 2020-04-28
      相关资源
      最近更新 更多