在 docker 中使用 HAProxy 和主机网络
Using HAProxy in docker with host network
当 运行 HAProxy 在 docker 容器中时,当 运行 具有 --net=host
选项的容器时,我们只能看到(并转发)原始客户端的 IP描述 here.
我们的问题:从安全角度来看,这是否可取?这是否会让攻击者更容易利用 HAProxy 漏洞?
或者这是常见的做法?
好吧 --net=host
是将容器暴露给 public 接口的常见做法。如果你不设置 --net=host
将无法在 docker 网络之外访问 haproxy。
如果您是 运行 docker swarm,那么您将从 X-Forwarded-For header.
中的 swarm 入口网络获取 IP
您可以使用 --network=host
解决此问题,但您无法将容器连接到其他覆盖网络,这可能会导致您的设置出现问题。例如,如果你想将 HAProxy 连接到其他容器。
幸好可以用--publish mode=host,...
代替默认的--publish mode=ingress
直接绑定外网ip
然后HAProxy会看到真实的客户端ip。另见 https://github.com/docker-archive/dockercloud-haproxy/issues/134#issuecomment-288485710
当 运行 HAProxy 在 docker 容器中时,当 运行 具有 --net=host
选项的容器时,我们只能看到(并转发)原始客户端的 IP描述 here.
我们的问题:从安全角度来看,这是否可取?这是否会让攻击者更容易利用 HAProxy 漏洞? 或者这是常见的做法?
好吧 --net=host
是将容器暴露给 public 接口的常见做法。如果你不设置 --net=host
将无法在 docker 网络之外访问 haproxy。
如果您是 运行 docker swarm,那么您将从 X-Forwarded-For header.
中的 swarm 入口网络获取 IP您可以使用 --network=host
解决此问题,但您无法将容器连接到其他覆盖网络,这可能会导致您的设置出现问题。例如,如果你想将 HAProxy 连接到其他容器。
幸好可以用--publish mode=host,...
代替默认的--publish mode=ingress
直接绑定外网ip
然后HAProxy会看到真实的客户端ip。另见 https://github.com/docker-archive/dockercloud-haproxy/issues/134#issuecomment-288485710