Squid 的 PROXY 协议:在 HTTP 访问检查之前信任发送方
把 Squid 的 PROXY 协议发送方检查与目标域和客户端请求的授权分开。
用 proxy_protocol_access 来信任提供元数据的中继,而不是用来选择允许的网站。在 Squid 5–7 中,检查在 TCP 建立之后、HTTP 请求头处理之前,于 require-proxy-header 监听器上执行一次:
acl trusted_relay src 192.0.2.20/32
http_port 3128 require-proxy-header
proxy_protocol_access allow trusted_relay
proxy_protocol_access deny all替换示例中的中继地址,并限制对该监听器的网络访问。在这一阶段,Squid 在接受所提供的元数据之前会检查实际的 TCP 对端。接受之后,它会把所声明的客户端地址用于后续的 ACL 检查和日志记录。若依据中继所声称的客户端地址去信任它,就会颠倒这一顺序。
把 http_access 留给之后的客户端来源与目的地权限。接受元数据并不授权访问网站,目的地域 ACL 也无法回答更早的“是否信任发送方”这一问题。
发送方与接收方必须就受支持的 PROXY 协议版本达成一致。普通 HTTP 客户端无法把这个带强制前缀的监听器当作常规代理端点使用。若两种形式都需要,请刻意使用彼此分离的端点,而不要重复同一个监听地址和端口。
受信任的中继可以通过它提供的客户端身份影响基于地址的授权。只把这一能力交给预期的中间方。