把这条策略大声读出来:允许办公网络通过代理访问已批准的站点。如果这些条件属于同一件事,就在规则里把它们放在一起。

http_access allow office_clients approved_destination

要让这一行放行请求,两个 ACL 必须同时匹配。把它拆开就会改变策略:

http_access allow office_clients
http_access allow approved_destination

现在办公客户端可以不受目的地限制而被允许,发往该目的地的请求也可以不受办公网限制,除非更早的规则拒绝了它们。两行并不是一行的更易读写法。

顺序也是策略的一部分

Squid 按顺序评估访问规则。第一个匹配的决定就决定了该请求。更靠前的 allow all 会让后面精心写下的限制失效;更靠前的匹配拒绝则会阻止到达后面的放行。

http_access 文档 说明了这个顺序。与其指望读者记得隐含的默认行为,不如保留一条有意的最终拒绝。

许多 ACL 定义具有另一种 OR 关系:一个具名的来源 ACL 可以列出多个允许的范围。这并不会让来源与目的地的身份变成同一种 ACL 类型。请分别定义它们,再在访问决定中组合名称。

对于私有出口,这会影响谁可以使用你的对外 IP。考虑四种情况:已批准客户端到已批准目的地、已批准客户端到别处、其他客户端到已批准目的地、其他客户端到别处。如果 规则放行的情形多于策略的本意,请先修正逻辑,再扩大监听范围。语法正确的配置仍然可能表达错误的权限。

相关文章