嘿 Serverfault 的朋友们;
我正在尝试构建一个对所有出站流量透明的 Squid 代理,作为我环境中的概念证明。
我有一个问题和一个难题(我知道的!)。
问题:
我已经设置了 iptables 来分别将 80 和 443 重定向到 3129 和 3130,并且 http_access 在我不指定transparent
或intercept
,我认为您需要做什么?
问题:
处理 https 拦截。据我所知,最好的办法是让 squid 代理充当中间人,检查请求并打开它,然后向实际目标服务器生成新请求,我相信我已经在下面完成了这个操作?
鱿鱼配置:
visible_hostname squid.my.test.tech
#cache deny all
# Log format and rotation
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %ssl::>sni %Sh/%<a %mt
logfile_rotate 10
debug_options rotate=10 ALL,1 11,2
sslproxy_cert_error allow all
# Handling HTTP requests
http_port 3128
http_port 3129
acl allowed_http_sites dstdomain "/etc/squid/whitelist.txt"
acl blocked_http_sites dstdomain "/etc/squid/blacklist.txt"
http_access allow allowed_http_sites
http_access deny blocked_http_sites
# Handling HTTPS requests
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB
https_port 3130 transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/squid.crt key=/etc/squid/ssl/squid.key
acl allowed_https_sites ssl::server_name "/etc/squid/whitelist.txt"
http_access allow allowed_http_sites
http_access deny blocked_http_sites
always_direct allow all
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
#Drop anything explicitly permitted
http_access deny all
白名单中是.google.com
和.cern.ch
,黑名单中是.foxnews.com
。
IP 表正在处理预路由:
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130
我生成了一个自签名证书,并将其存储在上面列出的目录中(/etc/squid/ssl)
,将其复制到/etc/pki/ca-trust/source/anchors
并运行sudo update-ca-trust extract
以更新本地主机的 CA 列表。然后将证书导出复制到我的工作站,将证书添加到 Firefox 中的受信任颁发机构(这是一个概念证明,当我更深入地了解时,我们将研究证书颁发机构签名 - 不用担心!)。
现在我遇到的问题是,如果我设置我的本地 Firefox 实例,http 请求就可以正常工作并显示在日志中:
1582926343.272 415 172.16.0.199 TCP_MISS/304 264 GET http://info.cern.ch/ - HIER_DIRECT/188.184.64.53 -
(我将跳过缓存中的 http 命中日志)
但 https 请求显示为 TCP_DENIED/200:
1582926470.071 1 172.16.0.199 TCP_DENIED/200 0 CONNECT 10.161.128.139:443 - HIER_NONE/- -
该查询看起来好像被 Squid 本身拒绝了:
----------
2020/02/28 21:47:51.554 kid1| 11,2| client_side.cc(2347) parseHttpRequest: HTTP Client local=10.161.128.139:443 remote=172.16.0.199:49219 FD 12 flags=33
2020/02/28 21:47:51.554 kid1| 11,2| client_side.cc(2348) parseHttpRequest: HTTP Client REQUEST:
---------
CONNECT 10.161.128.139:443 HTTP/1.12
Host: 10.161.128.139:443
2
----------
我已经对squid.conf
文件进行了大量修改,以尝试各种选项,但看起来请求只是在 squid 框中消失,并且我对 squid 没有太多经验,并且我已经在 how2squid 上挖掘了大约一百页,我感觉我正在猜测和检查,因此,任何指导都将不胜感激。