私の要件は次のとおりです:
- プロキシは透過的である必要があります。
- ドメイン名でウェブサイトをフィルタリングできるはずです。
- 私はしますないトラフィックを復号化したい。クライアントに証明書をインストールしない、SNI スニッフィング ベースのソリューションを探しています。
たくさんの回答が出回っていますが、それらは間違っているか(これを行うにはトラフィックを復号化する必要があると主張している)、不完全です。
答え1
これを実現するには、Squid 3.5で導入されたSSLピーク機能を使用します。ここ詳細な説明については、 を参照してください。 または--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
(余談ですが、ステップ 2 ではサーバー証明書の受信のみが行われるのに、なぜステップ 1 だけをチェックする必要があり、ステップ 2 をチェックする必要がないのかはわかりません。ドキュメントではこの点がまったく明確にされていません。ドキュメントssl_bump peek all
の推奨どおりに使用すると、完全に機能しなくなります)。
次に、iptables を使用して通常のポート 443 から 3129 へのリダイレクトを実行します (または、必要に応じて squid に 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
出典: