Centos7 上 Squid 3.5 作为透明代理运行

Centos7 上 Squid 3.5 作为透明代理运行

嘿 Serverfault 的朋友们;

我正在尝试构建一个对所有出站流量透明的 Squid 代理,作为我环境中的概念证明。

我有一个问题和一个难题(我知道的!)。

问题:

我已经设置了 iptables 来分别将 80 和 443 重定向到 3129 和 3130,并且 http_access 在我指定transparentintercept,我认为您需要做什么?

问题:

处理 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 上挖掘了大约一百页,我感觉我正在猜测和检查,因此,任何指导都将不胜感激。

相关内容