0x00 简介
SSLH是一个ssl/ssh 多路复用器,用通俗易懂的话来说就是一个端口可以同时开ssl服务和ssh服务。比如我们可以在443端口做此设置,这样当我们用浏览器访问443端口时,SSLH会将我们的流量转发给目标服务(如Nginx)处理;当我们使用SSH连接服务器时,SSLH会将流量转发给服务器的sshd服务。你看,一个443端口可以同时用作网页和ssh登录服务!想一想,当我们把ssh服务隐藏在443端口下时,多么有趣!
当然SSLH支持的服务还有HTTP, TLS/SSL (包括 SNIand ALPN), SSH, OpenVPN, tinc, XMPP, SOCKS5,并且可以识别任何其他可以使用正则表达式进行测试的协议。
0x01 Docker安装(不支持透明代理)
1.下载
proxychains4 git clone https://github.com/yrutschle/sslh.git
2.修改Dockerfile
# vim DockerfileRUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositoriessslh-select改为sslh-fork
3.构建镜像
make docker
4.修改目标服务配置文件
# vim /etc/ssh/sshd_configListenAddress 172.17.0.1
5.修改Docker-Compose.yml
# vim docker-compose.ymlversion: "3"services:sslh:image: sslh:latesthostname: sslhports:- 443:443command: --listen=0.0.0.0:443 --ssh=172.17.0.1:30022 --tls=172.17.0.1:30443restart: on-failure
0x02 直接安装
1.下载
pacman -S SSLH
2.修改配置文件
# vim /etc/sslh.cfgtimeout: 2;listen:({ host: "0.0.0.0"; port: "443"; });protocols:({ name: "ssh"; service: "ssh"; host: "localhost"; port: "30022";},{ name: "openvpn"; host: "localhost"; port: "31194"; },{ name: "xmpp"; host: "localhost"; port: "35222"; },{ name: "http"; host: "localhost"; port: "30080"; },{ name: "tls"; host: "localhost"; port: "30443"; sni_hostnames: [ "glan.site" ]; },{ name: "anyprot"; host: "localhost"; port: "38443"; });
3.开机自启
:::warning
此方式不支持透明代理
透明代理方式请看0x03 设置SSLH开机自启与透明代理
:::
# vim /usr/lib/systemd/system/sslh.service[Install]WantedBy=multi-user.targetsystemctl enable sslh
4.启动服务
systemctl start sslhsystemctl status sslh
0x03 设置SSLH开机自启与透明代理
SSLH透明代理官方文档: https://github.com/yrutschle/sslh/blob/master/doc/tproxy.md
1.sslh.cfg文件
:::warning
不要使用任何本地回环地址(如127.0.0.1、localhost),可以使用网卡的ip地址(如192.168.0.1)
本配置仅限于服务都在同主机情况,其他情况请参考SSLH透明代理官方文档
更多配置sslh.cfg的方法请看 基础配置文件示例 详细配置文件示例
:::
以下例子中,我的eth0网卡地址为10.0.20.9。SSLH与目标服务端口监听在10.0.20.9
# vim /etc/sslh.cfgtimeout: 2;listen:({ host: "10.0.20.9"; port: "443"; });protocols:({ name: "ssh"; service: "ssh"; host: "10.0.20.9"; port: "30022";},{ name: "openvpn"; host: "10.0.20.9"; port: "31194"; },{ name: "xmpp"; host: "10.0.20.9"; port: "35222"; },{ name: "http"; host: "10.0.20.9"; port: "30080"; },{ name: "tls"; host: "10.0.20.9"; port: "30443"; sni_hostnames: [ "glan.site" ]; },{ name: "anyprot"; host: "10.0.20.9"; port: "38443"; });
2.目标服务配置文件
修改目标服务配置文件,将端口监听在10.0.20.9的相应端口
# vim /etc/ssh/sshd_configPort 30022ListenAddress 10.0.20.9# vim /etc/nginx/nginx.confserver {listen 10.0.20.9:30443 ssl;server_name glan.site;...}
2.开机自启服务
3.开机自启脚本
# vim /etc/rc.local.d/sslh.shsysctl -w net.ipv4.conf.default.route_localnet=1sysctl -w net.ipv4.conf.all.route_localnet=1iptables -t raw -A PREROUTING ! -i lo -d 127.0.0.0/8 -j DROPiptables -t mangle -A POSTROUTING ! -o lo -s 127.0.0.0/8 -j DROPiptables -t nat -A OUTPUT -m owner --uid-owner root -p tcp --tcp-flags FIN,SYN,RST,ACK SYN -j CONNMARK --set-xmark 0x01/0x0fiptables -t mangle -A OUTPUT ! -o lo -p tcp -m connmark --mark 0x01/0x0f -j CONNMARK --restore-mark --mask 0x0fip rule add fwmark 0x1 lookup 100ip route add local 0.0.0.0/0 dev lo table 100sslh-fork -F /etc/sslh.cfg --transparent
