我们在 AWS classic ELB 后面运行两个 gitlab 实例。为了启用 git SSH 推送并通过 git 负载平衡 SSH 请求,我们在 AWS ELB 中添加了 SSH TCP 端口侦听器。在 SSH 日志中,我们看到 ELB 的 IP,而不是 git 用户的实际 IP。我尝试启用Proxy protocol
用于 ELB 的 SSH 侦听器,但它破坏了 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
它实际上is可能的。解决办法是mmproxy https://github.com/cloudflare/mmproxy它是由 CloudFlare 开发的。它本地部署在每台后端机器上,并在 SSH 服务器前面工作。当您启用Proxy protocol
在云负载均衡器中并建立连接时,“mmproxy”在将连接转发到本地 SSH 服务器时会解析附加标头并欺骗源 IP。
我已经使用 Google Cloud 对此进行了测试TCP代理负载均衡器 https://cloud.google.com/load-balancing/docs/tcp服务,但使用AWS ELB https://aws.amazon.com/elasticloadbalancing/应该以同样的方式工作。传入连接由“mmproxy”转发到“localhost”,其中 OpenSSH 正在侦听备用端口。
这是我测试过的 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”命令,每次计算机启动时都必须执行这些命令。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)