【问题标题】:How to see real IPs of SSH client of SSH servers running behind AWS ELB如何查看在 AWS ELB 后面运行的 SSH 服务器的 SSH 客户端的真实 IP
【发布时间】:2020-08-02 18:48:27
【问题描述】:

我们在 AWS 经典 ELB 后面运行两个 gitlab 实例。为了通过 git 启用 git SSH 推送和负载平衡 SSH 请求,我们在 AWS ELB 中添加了 SSH TCP 端口侦听器。在 SSH 日志中,我们看到的是 ELB 的 IP,而不是 git 用户的实际 IP。我尝试在 ELB 上为 SSH 侦听器启用 Proxy protocol,但它破坏了 SSH 服务器。有什么办法可以看到客户端的真实IP?

Nov 16 08:38:41 gitlab-1-1b sshd[14760]: Bad protocol version identification 'PROXY TCP4 x.y.z.a 0.0.0.0 61533 22' from x.y.z.a port 9407
Nov 16 08:39:08 gitlab-1-1b sshd[14825]: Bad protocol version identification 'PROXY TCP4 x.y.z.a 0.0.0.0 61554 22' from x.y.z.a port 9417

【问题讨论】:

    标签: amazon-web-services ssh gitlab amazon-elb


    【解决方案1】:

    实际上可能的。解决方案是由 CloudFlare 开发的mmproxy。它本地部署在每台后端机器上,并在 SSH 服务器前面工作。当您在云负载均衡器中启用Proxy protocol 并建立连接时,“mmproxy”会在将连接转发到本地 SSH 服务器时解析附加标头并欺骗源 IP。

    我已经使用 Google Cloud TCP proxy load balancer 服务对此进行了测试,但使用 AWS ELB 应该可以以相同的方式工作。传入的连接由“mmproxy”转发到 OpenSSH 正在侦听备用端口的“localhost”。

    这是我为 Google Cloud TCP proxy load balancer 服务和 OpenSSH 测试的配置:

    # cat /etc/mmproxy-allowed-networks.txt
    130.211.0.0/22
    35.191.0.0/16
    
    # grep Port /etc/ssh/sshd_config 
    Port 222
    
    ./mmproxy -v --allowed-networks /etc/mmproxy-allowed-networks.txt -l 0.0.0.0:22 -4 127.0.0.1:222 -6 [::1]:222
    

    此外,您必须部署自定义路由表,强制将返回流量路由到“环回”。对于“localhost”,这四个“ip”命令必须在每次机器启动时执行。

    【讨论】:

    • 有趣的解决方案,与我自己的答案不同。赞成。
    • 我想通过 path.net 添加 go-mmproxy:github.com/path-network/go-mmproxy 是一个重新实现,与 Cloudflare 的 mmproxy 相比提供了显着提高的速度。
    【解决方案2】:

    作为mentioned here,一个ELB(Elastic Load Balancing,support multiple listener protocols):

    充当转发代理(即不保留源 IP)

    所以你只剩下ELB Access Logs(如mentioned there),因为X-Forwarded-For,它是一个“应用程序级”协议,本身不能用于ssh。

    所以使用 ssh 并不容易。


    通过 https 侦听器启用相同的 GitLab 服务至少可以让您通过代理 SSL 支持将该用户 IP 放入 X-Forwarded-For,如 discussed in this GitLab threadthis one
    注意recent GitLab (8.10 or more) would then require

    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Ssl on;
    proxy_set_header X-Forwarded-Port 443;
    

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 2011-07-19
      • 2020-05-28
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多