我有一台位于负载均衡器后面的服务器,但暂时也可以直接访问。
我有一个应该可以访问它的 IP 地址白名单。
鉴于以下配置:
frontend http
bind 0.0.0.0:80
acl from_internal src 10.0.0.0/8
reqidel ^X-Cluster-Client-Ip unless from_internal
acl ip_allow src -f /etc/haproxy/allow.txt
acl lb_allow hdr_ip(X-Cluster-Client-Ip) -f /etc/haproxy/allow.txt
http-request allow if ip_allow
http-request allow if lb_allow
http-request deny
我想允许来自特定 IP 的直接请求 ( ip_allow
)。我想允许负载均衡器已X-Cluster-Client-Ip
为其设置的请求 ( lb_allow
)。
但是,我只想信任来自负载均衡器的标头(10.0.0.0/8
)。在所有其他情况下,我只想删除它。
似乎应用 ACL 时不会删除标头 - 如果我将其设置X-Cluster-Client-Ip
为受信任的 IP 并直接连接到服务器,那么我就能通过。有办法解决这个问题吗?
答案1
是的,您不能依赖标头操作来影响 ACL - 它们在混乱之后不会按顺序应用。
在这种情况下,您可以轻松修改逻辑
http-request allow if ip_allow
http-request allow if lb_allow from_internal
http-request deny