我的要求是:
- 代理應該是透明的。
- 我應該能夠按網域過濾網站。
- 我願意不是想要解密流量。我正在尋找基於 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
資料來源: