web-dev-qa-db-ja.com

HTTPS経由のSquidでページがブロックされない

自分のシステム(つまり、ネットワーク上ではない)でページをブロックするようにSquidを設定しましたが、SSLでページブロックを機能させようとしています。この目的のために、ssl-bumpを設定し、証明書をブラウザーにインストールしました。

ブロックしたい*.reddit.com/*(HTTPSとHTTPの両方で)が、子URLを許可したい*.reddit.com/r/LearnJapaneseのみ(HTTPとHTTPSの両方で)

これが私のsquid.confファイルの一部です:

acl bad_domain url_regex "/usr/local/squid/etc/block.acl"
acl good_domain url_regex "/usr/local/squid/etc/allow.acl"

http_access deny bad_domain !good_domain
http_access allow good_domain

http_access allow localnet
http_access allow localhost

http_access deny all

# Squid normally listens to port 3128
http_port 3128 ssl-bump generate-Host-certificates=on dynamic_cert_mem_cache_size=10MB cert=/usr/local/squid/etc/squid.pem

ssl_bump allow all

sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

Block.aclの内容:

^http(s)?://(.+)?reddit\.com(.+)?$

Allow.aclの内容:

^http(s)?://(.+)?reddit\.com/r/LearnJapanese(.+)?$

HTTPでは問題なく動作します(つまり、reddit.com/r/LearnJapaneseにはアクセスできますが、Redditの他の部分にはアクセスできません)が、HTTPSでは同じ運がありません。

HTTPS経由でRedditにアクセスすると、ページはまったくブロックされませんが、ブロックされるはずです(もちろん、reddit.com/r/LearnJapaneseを除く)。

HTTPとHTTPSの両方を介して(。reddit.com/r/LearnJapanese /を除く)すべてのRedditへのアクセスをブロックするにはどうすればよいですか?ありがとうございました。

1
q3d

ssl_bump server-first allを記述し、ssl_bump allow allを削除することで、問題を修正しました。それが問題の修正に貢献したかどうかはわかりませんが、これらの行も端末に挿入しました。

/sbin/iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --dport 80 -j REDIRECT --to-port 3128
/sbin/iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --dport 443 -j REDIRECT --to-port 3128

HTTPSでブラックリストに登録されたページに移動しようとすると、「アクセスが拒否されました」というメッセージは表示されませんが、すべてのプロトコル(HTTPおよびHTTPS)にSquidプロキシを使用するようにFirefoxを構成すると、「プロキシサーバーが接続を拒否しています」と表示されます。 )そして、以前に生成したルート証明書(/usr/local/squid/etc/squid.pem)を追加しました。

1
q3d

SSLはエンドツーエンドの暗号化であるため、Squidなどのプロキシは通常HTTPよりもHTTPS要求についてほとんど認識していません( http://wiki.squid-cache.org/Features/HTTPS#CONNECT_tunnel ):

[多くの]リクエストURLの一般的な部分がCONNECTリクエストに存在しません:

  • uRLスキームまたはプロトコル(例:http://、https://、ftp://、voip://、iTunes://、またはtelnet://)、
  • uRLパス(例:/index.htmlまたは/ secure/images /)、
  • およびクエリ文字列(例:?a = b&c = d)

HTTPSリクエストについてこれ以上のことを知るには、Squidは基本的に中間者攻撃をクライアントに対して実行する必要があります。 Squidのドキュメント その方法を説明していますが、これにはプライバシーに関するいくつかの問題が伴うことに注意してください(ユーザーは通常暗号化された情報であなたを信頼する必要があり、Webブラウザが攻撃について警告する場合があります)。

2
dhag