Proxy

Squid 透明代理 + 拒絕 HTTPS 訪問(CONNECT 方法)

  • September 28, 2017

根據維基百科

HTTP CONNECT 隧道

在 HTTP 代理伺服器後面時,HTTP 隧道的一種變體是使用“CONNECT”HTTP 方法。1

$$ 2 $$在這種機制中,客戶端要求 HTTP 代理伺服器將 TCP 連接轉發到所需的目的地。然後伺服器繼續代表客戶端建立連接。一旦伺服器建立了連接,代理伺服器將繼續代理與客戶端之間的 TCP 流。請注意,只有初始連接請求是 HTTP - 之後,伺服器只是代理已建立的 TCP 連接。 這種機制是 HTTP 代理後面的客戶端如何使用 SSL 或 TLS(即 HTTPS)訪問網站。

並非所有 HTTP 代理伺服器都支持此功能,甚至那些支持此功能的伺服器也可能會限制該行為(例如,僅允許連接到預設 HTTPS 埠 443,或阻止似乎不是 SSL 的流量)。

我的問題是:

我可以阻止對網站的訪問,即使(稍後)訪問和流量是 HTTPS,但具有初始 HTTP 請求?


我正在嘗試做這樣的事情,但它不起作用:

acl social_networks dstdomain "/etc/squid3/acls/social_networks.acl"
http_access deny CONNECT social_networks all

儘管我正在考慮該CONNECT方法,但此 ACL 中對網站的訪問仍然有效。

是的,squid acls 可以阻止對 https 網站的訪問(我們為此使用 squidguard)。我認為 squid 使用來自現代瀏覽器的 SNI 資訊。

但是你不能做到透明(它是,但真的不建議以那種醜陋和不安全的方式來阻止 https 連接)。使用者瀏覽器需要直接使用代理埠。強制它們的最佳方法是阻止路由到 wan 介面或僅路由到埠 443。部署代理設置的一種良好且靈活的方法是使用 wpad/pac 文件進行自動配置 - 特別是當並非所有設備都受到管理時。在託管設備上,您可以使用 gpos 等來部署代理設置。

引用自:https://serverfault.com/questions/874946