我正在尝试为所有类型的帧(http,https)设置一个透明代理,我正在使用tinyproxy这样做。我已经将路由器设置为将所有传入和传出帧重定向(使用nat)到tinyproxy(它正在监听端口8888)。
我试图访问一个https网站(https://www.google.com/),但我得到一个ssl连接错误。我翻看了一下这些刺痛的原木,发现了以下几点:

CONNECT   Mar 24 23:34:27 [22533]: Connect (file descriptor 11): 128.112.94.38 [128.112.94.38]
CONNECT   Mar 24 23:34:27 [22533]: Request (file descriptor 11):
WARNING   Mar 24 23:34:27 [22533]: Could not retrieve all the headers from the client
INFO      Mar 24 23:34:27 [22533]: Read request entity of 103 bytes

tinyproxy文档指出,只要在tinyproxy.conf文件中设置以下行,连接帧的转发就应该透明地工作:
# ConnectPort: This is a list of ports allowed by tinyproxy when the
# CONNECT method is used.  To disable the CONNECT method altogether, set
# the value to 0.  If no ConnectPort line is found, all ports are
# allowed (which is not very secure.)
#
# The following two ports are used by SSL.
ConnectPort 443
ConnectPort 563

我也试过删除所有ConnectPort行,看看是否有效(它没有)。有人知道我为什么不能透明地转发https流量吗?

最佳答案

在正常的网络意义上,您没有使用术语“帧”(L2),TCP或HTTP/HTTPS连接(L6/7)是这里使用的更好的术语。
tinyproxy将处理http代理请求连接(其中CONNECT是一种类型),或者在透明模式下处理非代理http请求(您可以在tinyproxy -h显示的功能列表中确认已启用)。
当浏览器配置为使用代理时,它会相应地修改出站请求。在透明模式下,浏览器不知道代理(并且不能配置代理)。ConnectPort选项列出了在正常代理模式下允许客户端CONNECT到(防止滥用)的端口。
如果您在透明模式下为https使用tinyproxy,则没有CONNECT,更重要的是没有头(这就是您看到该错误的原因)和url。通常,主机/端口部分可以从目标IP、端口和SNI扩展推断出来——因为tinyproxy依赖于某些外部防火墙将(更改目标IP)连接重定向到它,所以它没有请求的完整信息。
此时tinyproxy只能用作透明的http代理,文档对此有些模糊。如果没有https检查(即tls连接的解密)来访问客户端请求,它甚至不能是一个简单的tcp连接转发器。其他代理如squid支持TLS检查(sslbump)。

07-24 13:53