5.2. 已知的代理

当自动化控制器配置有 REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST'] 时,它假定 X-Forwarded-For 的值源自 Tower 前面的代理/负载均衡器。如果自动化控制器可以在不使用代理/负载均衡器的情况下访问,或者代理没有验证标头,那么 X-Forwarded-For 的值可以被断断为原始 IP 地址。在 REMOTE_HOST_HEADERS 设置中使用 HTTP_X_FORWARDED_FOR 可能会存在安全漏洞。

要避免这种情况,您可以在自动化控制器上的设置菜单中的 PROXY_IP_ALLOWED_LIST 字段中配置允许使用 PROXY_IP_ALLOWED_LIST 字段的已知代理列表。不在已知代理列表上的负载均衡器和主机将导致请求被拒绝。

5.2.1. 配置已知的代理

要为自动化控制器配置已知代理列表,请将代理 IP 地址添加到自动化控制器设置页面中的 PROXY_IP_ALLOWED_LIST 字段中。

流程

  1. 在自动化控制器中,进入到 SettingsMiscellaneous System
  2. PROXY_IP_ALLOWED_LIST 字段中,输入允许连接到您的自动化控制器的 IP 地址,如下例所示:

    PROXY_IP_ALLOWED_LIST 条目示例

    [
      "example1.proxy.com:8080",
      "example2.proxy.com:8080"
    ]

重要
  • PROXY_IP_ALLOWED_LIST 需要列表中的代理正确清理标头输入,并正确将 X-Forwarded-For 的值设置为客户端的实际源 IP。自动化控制器可以依赖 PROXY_IP_ALLOWED_LIST 中的 IP 地址和主机名为 X-Forwarded-For 字段提供非欺骗的值。
  • 不要将 HTTP_X_FORWARDED_FOR 配置为 'REMOTE_HOST_HEADERS' 中的项目,除非以下所有条件都满足:

    • 您使用带有 ssl 终止的代理环境;
    • 代理提供 X-Forwarded-For 标头的清理或验证处理,以防止客户端欺骗;
    • /etc/tower/conf.d/remote_host_headers.py 定义 PROXY_IP_ALLOWED_LIST,它只包含可信代理或负载均衡器的原始 IP 地址。