Squid 通过 HTTPS 不会阻止页面

Squid 通过 HTTPS 不会阻止页面

我已经设置 Squid 来阻止我自己的系统上的页面(即不在网络上),并且我正在尝试让 SSL 与页面阻止一起使用。为此,我设置了 ssl-bump 并将证书安装到我的浏览器中。

我想阻止*.reddit.com/*(在 HTTPS 和 HTTP 上),但我想*.reddit.com/r/LearnJapanese仅允许子 URL(在 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(.+)?$

allowed.acl的内容:

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

它在 HTTP 上工作得很好(即可以访问 reddit.com/r/LearnJapan,但 Reddit 的其余部分不能),但我在 HTTPS 上却没有同样的运气。

当我通过 HTTPS 访问 Reddit 时,页面根本没有被阻止,但它们应该被阻止(当然 reddit.com/r/LearnJapan 除外)。

我怎样才能阻止对所有 Reddit 的访问(除了.reddit.com/r/Learn日语/)通过 HTTP 和 HTTPS ?谢谢。

答案1

由于 SSL 是端到端加密,因此像 Squid 这样的代理通常对 HTTPS 请求的了解远少于对 HTTP 的了解(http://wiki.squid-cache.org/Features/HTTPS#CONNECT_tunnel):

CONNECT 请求中不存在请求 URL 的[许多]公共部分:

  • URL 方案或协议(例如,http://、https://、ftp://、voip://、itunes:// 或 telnet://),
  • URL 路径(例如 /index.html 或 /secure/images/),
  • 和查询字符串(例如?a=b&c=d)

要了解有关 HTTPS 请求的更多信息,Squid 必须对其客户端执行基本上是中间人的攻击。鱿鱼文档解释了如何做到这一点,但请注意,这会带来一些有关隐私的问题(您的用户应该信任您提供他们通常加密的信息,并且网络浏览器可能会警告有关攻击的信息)。

答案2

我通过编写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 导航到黑名单页面时,这不会产生“访问被拒绝”消息,但当我将 Firefox 配置为对所有协议(即 HTTP 和 HTTPS)使用 Squid 代理时,它确实会给出“代理服务器拒绝连接”消息)并添加了之前生成的根证书(/usr/local/squid/etc/squid.pem)。

相关内容