我尝试制作一个管理网站,用于控制对互联网的访问。当我允许客户端 IP 访问此网站时,网站会将此 IP 写入 acl 文件中并重新加载 squid。这很正常 - 允许访问。当我删除 IP 并重新加载 squid 时,客户端被阻止。但是,如果我之前访问过 google (https!),那么仍然可以访问 google。几分钟后,不活动访问也会被阻止。因此,有人可以建立一个隧道并保持互联网对他们开放。
是否可以强制断开打开的 CONNECT 会话?
一个小例子:
acl allowed_dst dstdomain "/etc/squid/allowed_dst"
acl allowed_clients src "/etc/squid/allowed_clients"
http_access allow allowed_dst
http_access allow allowed_clients
http_access deny all
答案1
目前无法在 Squid 内部执行您所要求的操作。
仅当发生 HTTP 请求时才会评估 http_access ACL。一旦 CONNECT 消息设置了盲 TCP 隧道以通过该隧道发送客户端数据,它就不再是 HTTP,因此即使 Squid 要重新处理 ACL,它也没有理由再次为隧道处理 http_access 规则。
还有许多 ACL 驱动的决策可能已经发生,需要重新评估。其中一些决策可能依赖于以前的 ACL 值和不再存在的数据。这不仅仅是允许或拒绝客户端那么简单。
最好的做法是让删除 ACL 条目的脚本跟进 Squid 重新加载,在 TCP 级别终止这些客户端与代理之间的任何连接。在 Linux 上,有“conntrack”工具可以执行此操作。