首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tinyproxy无法转发连接方法

tinyproxy无法转发连接方法
EN

Stack Overflow用户
提问于 2016-03-25 13:45:12
回答 3查看 8.6K关注 0票数 6

我正在尝试为所有类型的帧(HTTP,HTTPS)设置一个透明的代理,我正在使用tinyproxy来做到这一点。我已经将我的路由器设置为将所有传入和传出的帧重定向(使用NAT)到tinyproxy (它正在侦听端口8888)。

我尝试访问HTTPS网站(https://www.google.com/),但我得到一个SSL连接错误。查看tinyproxy日志,我看到了以下内容:

代码语言:javascript
复制
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文件中设置以下行,连接帧的转发就应该透明地工作:

代码语言:javascript
复制
# 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流量吗?

EN

回答 3

Stack Overflow用户

发布于 2017-05-18 00:49:03

您没有在正常的网络意义上使用术语“帧”(L2),在这里使用TCP或HTTPS/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)。

票数 3
EN

Stack Overflow用户

发布于 2017-10-21 20:56:06

要通过代理服务器(无中间人)透明地转发TLS流量,您需要一个proxifier。如果您的浏览器或其他客户端不知道它正在通过代理服务器进行通信,它将不会使用CONNECT方法来通过代理建立连接。这就是代理程序为您做的事情。

例如,对于Linux,有redsocks。对于我运行Raspbian的Raspberry Pi,默认存储库中有一个包。要安装它,请键入:

代码语言:javascript
复制
sudo apt-get install redsocks

下面是/etc/redsocks.conf的一个示例

代码语言:javascript
复制
redsocks {
    /* `local_ip' defaults to 127.0.0.1 for security reasons,
     * use 0.0.0.0 if you want to listen on every interface.
     * `local_*' are used as port to redirect to.
     */
    local_ip = 0.0.0.0;
    local_port = 12345;

    // `ip' and `port' are IP and tcp-port of proxy-server
    // You can also use hostname instead of IP, only one (random)
    // address of multihomed host will be used.
    ip = [proxy ip];
    port = [proxy port];


    // known types: socks4, socks5, http-connect, http-relay
    type = http-connect;

    // login = "foobar";
    // password = "baz";
 }

要转发TLS流量,请使用http-connect类型。对于常规的HTTP流量,请使用http-relay。每个都需要一个单独的redsocks部分。

然后,您需要使用iptables规则将TLS流量重定向到redsocks服务

代码语言:javascript
复制
sudo iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-port 12345

类似地,将HTTP流量从端口80重新路由到您用于http中继的端口。

有了这个配置,您机器上的每个客户端都将透明地使用代理,而不必为每个客户端调整配置。

票数 3
EN

Stack Overflow用户

发布于 2017-09-21 01:26:39

你不能在HTTPS中使用透明的代理。这违背了SSL的全部目的。如果您尝试转发端口443 ( SSL /HTTPS),则会收到SSL连接错误,因为不允许进行Man-in-the-Middle攻击。

我认为一种变通办法是手动配置浏览器以指向TinyProxy实例,但这超出了透明代理的全部用途,因为您正在配置客户端。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36214703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档