使用帶有 SNI 過濾的魷魚透明地建立 HTTPS 隧道

使用帶有 SNI 過濾的魷魚透明地建立 HTTPS 隧道

我的要求是:

  1. 代理應該是透明的。
  2. 我應該能夠按網域過濾網站。
  3. 我願意不是想要解密流量。我正在尋找基於 SNI 嗅探的解決方案——無需在客戶端上安裝憑證。

有很多答案,但它們要么不正確(聲稱您需要解密流量才能做到這一點),要么不完整。

答案1

實現這一點的方法是使用 Squid 3.5 中引入的 ssl peek 函數。看這裡以獲得詳細的解釋。請注意,您需要使用--with-gnutls或進行編譯--with-openssl(檢查squid -v)。有些發行版將它們排除在外。

簡而言之,相關的squid配置如下所示。

acl denylist_ssl ssl::server_name google.com # NOT dstdomain
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice !denylist_ssl # allow everything not in the denylist
ssl_bump terminate all # block everything else
https_port 3129 intercept ssl-bump cert=/etc/squid/dummy.pem

(旁白:我不知道為什麼我們只需要查看步驟 1 而不是步驟 2,因為步驟 2 只涉及接收伺服器憑證。文件根本沒有明確說明這一點。ssl_bump peek all按照他們的建議使用會使此操作完全停止工作)。

然後使用 iptables 將連接埠 443 重新導向到 3129(或如果您願意,可以讓魷魚直接監聽 443)。

-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129

您可以為虛擬物件使用任何證書,我們實際上從不使用它(因為我們不解密流量)。

像這樣的東西有效。

openssl req -new -newkey rsa:4096 -sha256 -days 365 -nodes -x509 -keyout dummy.pem -out dummy.pem

資料來源:

[1]https://unix.stackexchange.com/questions/613359/setting-up-squid-transparent-proxy-with-ssl-bumping-on-debian-10

[2]https://web.archive.org/web/20210128152111/https://www.cammckenzie.com/blog/index.php/2018/07/19/squid-https-interception-and-filtering-without-client-證書/

[3]https://wiki.squid-cache.org/Features/SslPeekAndSplice

相關內容