我正在尝试调试一个通过HTTPS发送RPC的应用程序。为了读取实际的RPC内容,我尝试在同一台计算机上使用SSLSplit作为连接的应用程序。为此,我在iptables表中设置了一个规则,该规则通过127.0.0.1:8443路由来自根应用程序的所有通信:
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规则的影响)。
在运行https://unix.stackexchange.com时,在浏览器中尝试访问SSLSplit时,获取的输出摘录如下:
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发布于 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运行,除非绑定到一个低端口。
因此,应该做的是:
https://unix.stackexchange.com/questions/692276
复制相似问题