简介
SSLH让一个人接受HTTPS,SSH,OpenVPN,TINC和XMPP连接 同一端口。这使得可以连接到这些服务器中的任何一个 港口443(例如,从公司内部的防火墙内部几乎永远不会阻止端口443)仍在该端口上提供HTTPS时。
sslh 接受指定端口的连接,然后向前根据对第一个数据进行的测试进一步远程客户端发送的数据包。
HTTP,TLS/SSL(包括SNI和ALPN),SSH的探针 OpenVPN,TINC,XMPP,SOCKS5已实现,任何其他可以使用正则表达式测试的协议可以被认可。一个典型的用例是允许服务端口443上的几项服务(例如,从 在公司防火墙内部几乎永远不会阻止港口 443)仍在该端口上提供HTTP。
因此 sslh 充当协议弹药者或总机。使用SNI和ALPN探测器,它使得很好前端到一个虚拟主机农场,该农场在单个IP后面托管地址。
sslh 有一个成熟的钟声和哨子守护程序:特权和功能下降,INETD支持, SystemD支持,透明代理,Chroot,Logging, IPv4和IPv6,TCP和UDP,一种基于叉的,一种基于选择的基于叉子模型,另一个基于libev的模型安装。
安装
Kali Linux 默认安装好 sslh 工具了。也可以通过以下命令进行安装
sudo apt install sslh
使用
sslh
1. -h
帮助信息
sslh -h
2. -F, --config=<file>
指定配置文件。使用 filename 作为配置文件。如果指定了其他命令行选项,它们将覆盖配置文件的设置。使用简写版本时,请确保 -F 和文件名之间没有空格。
sslh -F /etc/sslh.cfg
3. --verbose-config=<n>
启动时打印配置
sslh --verbose-config=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
4. --verbose-config-error=<n>
打印配置错误
sslh --verbose-config-error=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
5. --verbose-connections=<n>
跟踪已建立的传入地址到转发地址
sslh --verbose-connections=3 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
6. --verbose-connections-try=<n>
连接错误
sslh --verbose-connections-try=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
7. --verbose-connections-error=<n>
尝试连接目标
sslh --verbose-connections-error=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
8. --verbose-fd=<n>
文件描述符活动,打开/关闭/诸如此类
sslh --verbose-fd=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
9. --verbose-packets=<n>
已完成探测的十六进制转储数据包
sslh --verbose-packets=1 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
10. --verbose-probe-info=<n>
跟踪探测过程
sslh --verbose-probe-info=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
11. --verbose-probe-error=<n>
探测期间的故障和问题
sslh --verbose-probe-error=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
12. --verbose-system-error=<n>
系统调用失败
sslh --verbose-system-error=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
13. --verbose-int-error=<n>
不应该发生的内部错误
sslh --verbose-int-error=2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
14. -V, --version
打印版本信息并退出
sslh -V
15. -f, --foreground
在前台运行,而不是作为守护进程运行
在前台运行。服务器不会分叉,并将保持连接到终端。通常发送到 syslog 的消息也将发送到 stderr
sslh -f -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
16. -i, --inetd
在inetd 模式:使用 stdin/stdout 代替网络监听
作为 inetd 服务器运行。选项 -P(PID 文件)、-p(监听地址)、-u(用户)将被忽略。
sslh -i -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
17. -n, --numeric
将 IP 地址和端口打印为数字
不尝试解析主机名:日志将包含 IP 地址。如果系统的 DNS 很慢且运行 sslh-select 变体,这非常有用,因为 DNS 请求将挂起所有连接。
sslh -n -p 0.0.0.0:443
18. --transparent
设置为透明代理
使 sslh 充当透明代理,即接收服务可以看到原始客户端的 IP 地址。这仅适用于 Linux 且涉及 iptables 设置。
sslh --transparent -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
19. -t, --timeout=<n>
设置连接到默认目标之前的超时时间
将连接转发到超时协议(通常为 SSH)之前的超时时间。默认值为 2 秒。
sslh -t 2 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
20. --udp-max-connections=<n>
并发 UDP 连接数
sslh --udp-max-connections=100 -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
21. -u, --user=<str>
设置后要更改为的用户名
需要在指定的用户名下运行。
sslh -u sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
22. -P, --pidfile=<file>
存储当前实例 PID 的文件路径
指定要写入主服务器 PID 的文件。
sslh -P sslh.pid -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
23. -C, --chroot=<path>
设置后要更改为的根目录
需要在指定的 chroot 下运行。
sslh -C chroot -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
24. --syslog-facility=<str>
系统日志设施
sslh --syslog-facility=daemon -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
25. --logfile=<str>
将消息记录到文件
sslh --logfile=log -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
26. --on-timeout=<str>
超时时要连接的目标
超时期限结束后要连接的协议的名称。默认转发到第一个指定的协议。通常将“ssh”指定为超时协议是有意义的,因为 SSH 规范没有说明谁应该先发言,并且大量 SSH 客户端等待服务器发送其横幅。
sslh --on-timeout=ssh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
27. --prefix=<str>
保留用于测试
sslh --prefix="Test" -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
28. -p, --listen=<host:port>
在 host:port 上监听
要监听的接口和端口,例如 foobar:443,其中 foobar 是接口的名称(通常是 Internet 连接最终到达的 IP 地址)。可以多次指定此项以将 sslh 绑定到多个地址。
29. --ssh=<host:port>
设置 ssh 目标
用于转发 SSH 连接的接口和端口,通常为 localhost:22。
30. --tls=<host:port>
设置设置 TLS/SSL 目标
用于转发 SSL 连接的接口和端口,通常为localhost:443。
请注意,您可以将 sslh 设置为监听 ext_ip:443,将 httpd 设置为监听 localhost:443:这样,您网络内的客户端就可以直接连接到 httpd。
此外,sslh 会探测 SSLv3(或 TLSv1)握手,并拒绝请求 SSLv2 的客户端的连接。这符合
RFC6176 的规定,该规定禁止使用 SSLv2。如果您希望接受 SSLv2,请改用 --default。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443
31. --ssl=<host:port> (已弃用)
设置 TLS/SSL 目标
'ssl' 设置已弃用,将在 v1.21 中被删除。请改用 'tls'
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:8443
32. --openvpn=<host:port>
设置 OpenVPN 目标
用于转发 OpenVPN 连接的接口和端口,通常为 localhost:1194。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --openvpn=127.0.0.1:1194
33. --tinc=<host:port>
设置 tinc 目标
用于转发 tinc 连接的接口和端口,通常为 localhost:655。这是实验性的。如果您使用此功能,请报告结果(即使它有效!)
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --tinc=127.0.0.1:655
34. --wireguard=<host:port>
设置 WireGuard 目标
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --wireguard=127.0.0.1:51820
35. --xmpp=<host:port>
设置 XMPP 目标
用于转发 XMPP 连接的接口和端口,通常为 localhost:5222。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --xmpp=127.0.0.1:5222
36. --http=<host:port>
设置 HTTP (plain) 目标
用于转发 HTTP 连接的接口和端口,通常为 localhost:80。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --http=127.0.0.1:80
37. --adb=<host:port>
设置 ADB (Android 调试) 目标
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --adb=127.0.0.1:5555
38. --socks5=<host:port>
设置 socks5 目标
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --socks5=127.0.0.1:10808
39. --syslog=<host:port>
设置 syslog 目标
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --syslog=127.0.0.1:514
40. --msrdp=<host:port>
设置 msrdp 目标
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --msrdp=127.0.0.1:3389
41. --anyprot=<host:port>
设置默认目标
如果未找到其他协议,则转发到该接口和端口。由于 sslh 会按照命令行上指定的顺序尝试协议,因此应最后指定此项。如果未指定默认值,sslh 会将未知协议转发到指定的第一个协议。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --anyprot=127.0.0.1:443
42. --background
在后台运行。如果在配置文件中设置了,则它将覆盖前台(或在命令行中设置,但除非您有个性障碍,否则没有必要在命令行中同时设置两者)。
sslh -p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:8443 --background
sslh-select
因为 sslh-select 工具的选项和 sslh 的一样,所以这里就不再展示其参数功能。
1. -h
帮助信息
sslh-select -h
总结
sslh 是一款强大的多协议端口复用工具,可同时处理 SSH、HTTPS 等流量,提高端口利用率。本文介绍了其基本用法与配置。
在此特别强调,本教程仅在合法授权的情况下进行测试和研究,请勿用于其他用途。未经授权使用此类工具可能会侵犯他人隐私,触犯相关法律,任何因此引发的法律或利益纠纷与本人无关。
欢迎各位大佬,小白来找我交流。