web-dev-qa-db-ja.com

透過的なSSLプロキシの神話と事実

SSLの透過プロキシ(Squidではない)をセットアップする方法について、私は何時間も探してきました。一般的な答えは私はできないということですが、私は知っていますいくつかの方法があります。私の目的は以下のみです:

  1. ブラックリスト/ホワイトリストドメイン名(IP番号ではない)。 コンテンツはフィルタリングまたは変更されません
  2. これらのリストを使用してユーザーを強制します。 Webブラウザーでこのような設定を変更すると、元に戻すことができます。

次のページは、トラフィックを変更せずに渡すことができることを示していますが、方法は示していません。 iptables https transparent proxy with privoxy?

次のページは、私自身が実行できなかった443のiptablesルールを示しています。 http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy

次のページは、これをSquidでのみ機能させる方法を示しています。 http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https

編集:1人がここで言う: IPTABLESを使用してSquidの周りにHTTPS(443)パススルーを作成するにはどうすればよいですか? "ポート443への直接アクセスをブロックし、ユーザーに伝えることが最善です。 HTTPSを使用する場合は、プロキシを使用するようにブラウザを設定する必要があります。」しかし、私は443を完全にブロックする方法を知っています。プロキシの下でそれを機能させるためではありません。

8
Teresa e Junior

ドメイン名でフィルタリングする場合は、2つの方法があります。HTTPS接続にプロキシを使用し、その接続でフィルタリングする必要があることがわかっている場合は、クライアントが発行したCONNECTメソッドから名前を取得できます(Squidsはこれをサポートしています)ところで)。または、reallyreallyが透過的に実行する必要がある場合は、(暗号化)リクエストヘッダー。

暗号化されたリクエストヘッダーを表示するには、キーが必要です。キーが必要な場合は、a)クライアントから「正しい」証明書であると信頼され、b)可能なすべてのホスト(ワイルドカードすべて)を証明する証明書が必要です。

だからあなたがする必要があるのは

  1. プロキシの証明書を設定します。これは、ソフトウェアによって異なります-プロキシ側でSSL接続を終了するために stunnel を使用し、その背後にフィルタリングHTTPプロキシを設定し、iptables DNATを使用してすべての発信トラフィックに対してSSLを再確立します。ターゲットと再びトンネル。 MitM SSLプロキシの「ボックス化」ソリューションもあるかもしれません。
  2. プロキシを使用するすべてのクライアントに前述の証明書をインストールします

ほとんどの場合、透過プロキシが必要なのは、プロキシを使用するようにクライアントを再構成したくないか、再構成できないためです。これがあなたの要求にも当てはまる場合は、おそらくクライアントに証明書をインストールして、それらを「信頼できる」としてマークするオプションはありません。したがって、透過的なSSLプロキシの技術的な方法はありますが、それほど多くの利益が得られるとは思えません。

7
the-wabbit

私はこれが古い質問であることを知っていますが、OPが特定のドメイン名をブラックリストまたはホワイトリストに登録したいだけであれば、プロキシを使用する必要はなく、DNSベースのブラックリストを使用できます。

  • ブラックリストに登録したいドメインの127.0.0.1を返すようにオンサイトDNSサーバーを設定します
  • インターネットゲートウェイで、DNSサーバー以外のすべてのIPがTCP/UDPポート53にアクセスできないようにブロックします。これにより、DNSサーバーだけがインターネットベースのサーバーからDNS要求を行うことができます。

他のドメインはすべて許可されます。 SSLまたはその他のすべてのWebトラフィックは、そのままゲートウェイを通過します。

編集:OPがユーザーにリストを強制的に表示する準備ができているので、DNSにアクセスする他の方法をブロックすることができます。このように、ユーザーがブロックされている他のDNSメソッドのいずれかを使用しようとすると、Webサイトは機能しません。 aka '私の道または高速道路'

@wheelerが言及したDNS-over-HTTPSの場合、 https://dns.google.comhttps:// cloudflare-dnsなどのサイトへの通常のDNSルックアップをブロックすることができます.com/dns-query および https://doh.cleanbrowsing.org/doh/family-filter/ 。ただし、オンラインになるサービスが増えるにつれて、これはすぐに受け入れられなくなります。

開発中のDNSの他の方法で、application/dns-udpwireformatなどのMIMEタイプをブロックする方法も必要になる場合があります。

4
BeowulfNode42

デリゲートMan-In-The-Middle HTTPSのプロキシとして機能します。

2
AlexD

透過モードの場合、インラインIPS(Suricata、Snort)システムは、sslサイトをブロックするのに役立ちます。

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Setting_up_IPSinline_for_Linux

特定のユーザーのSSLサイトルールをブロック:

drop ip any 443 -> 192.168.3.x any (content:".facebook.com"; msg:"Simplewall block facebook.com  ";sid:7;rev:1;)

drop ip any 443 -> 192.168.3.204 any (content:".youtube"; msg:"Simplewall block youtube.com" ;sid:4;rev:1;)

拡張子に基づくブロックファイルのダウンロードルール:

drop ip any any -> 192.168.3.63 any (msg:"File exe block"; fileext:"exe"; filestore ;sid:1;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File mp3 block"; fileext:"mp3"; filestore ;sid:11;rev:1;)

drop ip any ssl -> 192.168.3.63 any (msg:"File pdf block"; fileext:"pdf"; filestore ;sid:21;rev:1;)

SimpleWallでこれを試してください

Simplewall Webインターフェイスでブロックルールを追加するのは非常に簡単です。

Simplewall => Content Filterの下にルールを追加することもできます。httpコンテンツフィルターとともに、IPSに対して同じルールを使用します。

1