首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地透明代理SSLSplit导致转发循环

本地透明代理SSLSplit导致转发循环
EN

Unix & Linux用户
提问于 2022-02-27 10:45:08
回答 1查看 223关注 0票数 1

我正在尝试调试一个通过HTTPS发送RPC的应用程序。为了读取实际的RPC内容,我尝试在同一台计算机上使用SSLSplit作为连接的应用程序。为此,我在iptables表中设置了一个规则,该规则通过127.0.0.1:8443路由来自根应用程序的所有通信:

代码语言:javascript
复制
iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root --dport 443 -j REDIRECT --to-port 8443

随后,我将sslsplit -D -k key.pem -c cert.pem -P https 127.0.0.1 8443作为root运行,以防止从SSLSplit (到目标服务器)的出站流量被重定向回SSLSplit。尽管如此,我还是得到了Error 24 on listener: Too many open files,根据https://github.com/droe/sslsplit/issues/93#issuecomment-96894847的说法,这可以归因于打开了太多的套接字。这可能是SSLSplit发送的流量被循环回SSLSplit的症状。

我不知道我做错了什么,因为SSLSplit是作为根运行的,并且根流量不受重定向规则的影响。此外,通过执行curl两次,一次作为root,一次作为非根,我检查了我的iptable规则是否正确。正如预期的那样,非根curl不工作(curl: (7) Failed to connect to unix.stackexchange.com port 443: Connection refused),而根curl工作得很完美(==>不受iptables规则的影响)。

问题:

  1. 考虑到SSLSplit作为根用户运行,我的iptables规则如何创建一个循环,从而使从SSLSplit发送的流量被反馈回自己?
  2. 我怎样才能解决这个问题,才能最终读懂通信内容?

在运行https://unix.stackexchange.com时,在浏览器中尝试访问SSLSplit时,获取的输出摘录如下:

代码语言:javascript
复制
SNI peek: [www.gravatar.com] [complete]
Connecting to [192.0.73.2]:443
<repeated 96 times>

SNI peek: [platform-lookaside.fbsbx.com] [complete]
SNI peek: [www.gravatar.com] [complete]
Connecting to [157.240.17.15]:443
Connecting to [192.0.73.2]:443
<repeated some more times>

SNI peek: [www.gravatar.com] [complete]
Connecting to [192.0.73.2]:443
<repeated 95 times>

SNI peek: [platform-lookaside.fbsbx.com] [complete]
SNI peek: [www.gravatar.com] [complete]
Connecting to [157.240.17.15]:443
Connecting to [192.0.73.2]:443
<repeated some more times>

Error 24 on listener: Too many open files
Main event loop stopped (reason=0).
Child pid 12445 exited with status 0
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-02-27 14:49:57

阅读OP的完全相同的链接评论

添加一个输入接口,以便只将入站连接发送到sslsplit,例如,如果您的局域网面向接口是eth0,而您的WAN面向接口是eth1,则iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 443 -j重定向到端口8080。

这不是所做的事情,因此不能警告sslsplit如何以root用户的身份运行。

实际上,当以根用户身份运行时,sslsplit命令会通过切换给用户nobody来删除特权,除非另有配置:

默认情况下,/* * User可将特权降至。需要允许该用户创建出站TCP连接,并在某些配置中执行DNS *解析。**Packager可能希望使用特定的服务用户帐户,而不是*将其他用例重载给任何人。... */ #定义DFLT_DROPUSER“无人”

这是对分叉的“工人”子进程进行的。我不确定是否有兴趣将它作为root运行,除非绑定到一个低端口。

因此,应该做的是:

  • 以普通用户的身份运行sslsplit --它不会更改uid或gid,只需确保要拦截的应用程序不会以该用户的身份运行。将重定向更改为: iptables -t nat -A -p tcp -m所有者!-uid-所有者正常化用户dport 443 -j重定向到端口8443
  • 或者,在以root用户身份运行时,将sslsplit配置为使用专用用户和/或组。为此目的,请参阅配置文件或options -u-m。为此,我将使用(或创建和使用)组proxy。然后使用! --gid-owner proxy
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/692276

复制
相关文章

相似问题

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