squid 与 iptables 绕过 https

squid 与 iptables 绕过 https

我只是想让互联网匿名透明代理绕过流量,只想隐藏客户端 IP,但它对 https 不起作用。

我不想使用 sslbump 等,只是想绕过流量

我在 google、serverfault.com 和 stackoverflow.com 上进行了大量搜索,并测试了这些绕过 https 流量的解决方案:

使用 IPTables 绕过透明 Squid

Squid 与 iptables 的问题

https://stackoverflow.com/questions/2601400/squidiptables-how-do-i-allow-https-to-pass-through-and-bypassing-squid

我的鱿鱼配置是:

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access allow all

short_icon_urls on

http_port 0.0.0.0:13128 accel vhost
always_direct allow all

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .           0   20%     4320
coredump_dir /var/spool/squid

forwarded_for off

我的 iptables 配置现在如下:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 13128
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 13128

我尝试使用这些命令但没有作用:

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT

iptables -t nat -A PREROUTING -d x.x.x.x -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp -s x.x.x.x -m tcp --dport 443 -j REDIRECT --to-ports 13128

xxxx 是我的有效互联网 IP

我的使用代理的客户端配置如下:

在 /etc/hosts 中添加了 somedomain.com xxxx somedomain.com

我想浏览https://somedomain.com在我的浏览器中

你可以找到很多像这样工作的 IP 端口代理,例如使用这个 IP173.161.0.227

如果我在我的客户端 /etc/hosts 中添加一行

173.161.0.227 www.iplocation.net

我可以浏览https://www.iplocation.net

我的服务器是 CentOS 7

答案1

“匿名透明”这几个字,本身就自相矛盾。

匿名代理是指隐藏客户端详细信息,服务器只能看到代理。透明代理是指隐藏代理详细信息,并将客户端详细信息发送到服务器。

因此,对你的问题的简短回答是,你所要求的是不可能的。你不能同时拥有两者。特别是当涉及 TLS(作为 HTTPS)时。

您提到的 /etc/hosts 示例不是透明代理。它们可能是匿名代理。它们绝对是“开放代理”。请查阅。

您的 squid.conf 是针对反向代理的,现已转变为开放代理(通过 always_direct 行)。对于此代理配置,NAT 规则毫无意义。

  • 如果您想使用 /etc/hosts 方式,那么请删除您的 NAT 规则并让您的 Squid 使用 http_port 80 而不是 13128。

  • 如果您想使用 NAT 拦截代理,请删除 always_direct 行并将“accel vhost”选项更改为“intercept”。

端口 80 和端口 443 的流量语法非常不同。您正在进行 NAT 的 http_port 仅接受端口 80 语法。这是 NAT 端口 443 无法正常工作的第一个原因。

要将 HTTPS 语法接收到 Squid 中,您需要一个 https_port 来接收它。但是,TLS 会阻止 /etc/hosts 方式工作。接收不属于您的域的 HTTPS 意味着 SSL-Bump。即使透明地中继 NAT 端口 443,也需要将 SSL-Bump 配置为“拼接”。

但是,当进行 NAT 时,您的代理首先接收端口 443 流量的唯一原因是因为您正在将端口 443 NAT 到它。要“绕过”,您只需删除包含端口 443 的 NAT 规则即可。

相关内容