![透明 SSL 代理的谬论与事实](https://linux22.com/image/552630/%E9%80%8F%E6%98%8E%20SSL%20%E4%BB%A3%E7%90%86%E7%9A%84%E8%B0%AC%E8%AE%BA%E4%B8%8E%E4%BA%8B%E5%AE%9E.png)
我已经搜索了好几个小时,想找到一种设置 SSL(不是 Squid)透明代理的方法。一般的答案是我不能,但我知道有一些方法不过。我的目的只有以下几点:
- 黑名单/白名单域名(不是 IP 号码)。内容根本不会被过滤或修改。
- 强制用户浏览这些列表。如果我在 Web 浏览器中修改此类设置,他们只需撤消即可。
以下页面告诉我可以传递未修改的流量,但没有说明如何传递: 使用 privoxy 的 iptables https 透明代理?
以下页面显示了 443 的 iptables 规则,我自己无法使其工作: http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:proxy
以下页面告诉您如何使其仅与 Squid 一起工作: http://www.rahulpahade.com/content/squid-transparent-proxy-over-ssl-https
编辑:一个人在这里说: 如何使用 IPTABLES 在 Squid 周围创建 HTTPS(443)直通? “您最好阻止对端口 443 的直接访问,并告诉您的用户,如果他们想使用 HTTPS,他们必须将浏览器配置为使用代理。” 但我只知道如何完全阻止 443,而不是让它在代理下工作。
答案1
如果您想过滤域名,有两种可能的方法:如果客户端知道它必须使用代理进行 HTTPS 连接,您可以从客户端发出的 CONNECT 方法中获取名称,然后过滤该名称(顺便说一下,Squids 支持这一点)。或者,如果您真的 真的需要透明地执行此操作,您需要查看(加密的)请求标头。
如果您想要查看加密的请求标头,您需要一个密钥。如果您想要一个密钥,您需要一个证书,该证书 a) 被客户端信任为“正确”证书,并且 b) 认证所有可能的主机(通配符-一切)。
所以你需要做的是
- 为您的代理设置证书。具体如何设置取决于您的软件 - 您可以使用隧道在代理端终止 SSL 连接,在其后面放置一些过滤 HTTP 代理,然后使用 iptables DNAT 目标和 stunnel 为所有传出流量重新建立 SSL。对于 MitM SSL 代理,可能也有“盒装”解决方案。
- 在所有要使用代理的客户端上安装上述证书
大多数情况下,如果您需要透明代理,那是因为您不想或无法重新配置客户端以使用代理。如果您的请求也是这种情况,您可能无法选择在客户端上安装证书并将其标记为“受信任”。因此,即使存在透明 SSL 代理的技术方法,我怀疑您也不会获得太多好处。
答案2
我知道这是一个老问题,但是如果 OP 只想将某些域名列入黑名单/白名单,他们根本不必使用代理,他们只需使用基于 DNS 的黑名单。
- 设置你的现场 DNS 服务器,对你想要列入黑名单的域名返回 127.0.0.1
- 在您的互联网网关处阻止除您的 DNS 服务器之外的所有 IP 访问 TCP/UDP 端口 53,因此只有您的 DNS 服务器可以从基于互联网的服务器发出 DNS 请求。
允许任何其他域名。所有网络流量 SSL 或其他方式都将不变地通过网关。
编辑:鉴于 OP 准备强迫用户通过他的列表,他可以阻止其他访问 DNS 的方法。这样,如果用户尝试使用被阻止的其他 DNS 方法之一,网站将无法运行。又名'顺我者昌逆我者亡'
对于 @wheeler 提到的 DNS-over-HTTPS,您可以阻止对以下网站的常规 DNS 查找,https://dns.google.com和https://cloudflare-dns.com/dns-query和 https://doh.cleanbrowsing.org/doh/family-filter/。但随着越来越多的服务上线,这种情况很快就会变得难以维持。
对于正在开发的其他 DNS 方法,您可能还需要一种阻止 MIME 类型(例如 application/dns-udpwireformat)的方法。
答案3
答案4
对于透明模式,内联 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 => Content Filter
使用与 http 内容过滤器相同的 IPS 规则来添加规则。