在受限网络下允许SSH登录的N种方法
转载注明来源: 本文链接 来自osnosn的博客,写于 2020-03-06.
关键词:
- SSH over HTTPS
- iptables recent
- sslh
- haproxy
- proxytunnel
- webssh
各种办法的参考连接:
- 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单, 链接1, 链接2
- 远程密令临时开启ssh端口, 远程密令临时开启ssh端口
- SSLH – A SSL/SSH MULTIPLEXER, SSLH(github)
- 利用 SSH over HTTP 突破 Proxy Firewall
- Tunneling SSH over HTTP(S)
- 让一个端口同时做两件事:http/https和ssh
- Using HAProxy to make SSH and SSL available on the same port
- SSH over HTTPS with proxytunnel and nginx
- How to use ssh over http or https?
- webssh
- Corkscrew - ssh over https
- nginx>1.15.2 : 利用nginx实现https和ssh共用端口绕过防火墙限制ssh登录的方法
- Linux上在同一端口上共享SSH与HTTPS的工具:SSLH
我的办法
-
写一个c程序(叫 rdr_port),此程序的功能就是根据来源IP(有参数传递),在防火墙中插入一条端口重定向规则,十几秒后,再删除这条规则。
- 比如来源IP=1.2.3.4
- 对应iptables,
iptables -t nat -A PREROUTING -s 1.2.3.4 -p tcp --dport 443 -j REDIRECT --to 22
- 对于nftables,
nft -ea add rule ip nat PREROUTING ip saddr 1.2.3.4 tcp dport 443 redirect to 22
- 然后程序等待10秒后,再删除这条端口重定向规则。
- 对应iptables,
iptables -t nat -D PREROUTING -s 1.2.3.4 -p tcp --dport 443 -j REDIRECT --to 22
- 对于nftables,删除必须用handle值。
nft delete rule ip nat PREROUTING handle 12
-
把这个程序编译为执行文件。设置这个程序SUID,
chmod 4555 rdr_port
,因为修改防火墙规则需要root权限。 -
写一个动态页面,用php,java,python,或者别的语言,写一个表单,输入密码后,调用这个rdr_port。就可以让443(或80,或别的端口)临时重定向到22,在这段时间内就可以用ssh登录了。虽然防火墙规则会被删除,但不影响已经建立的ssh连接。
-
这个C程序(rdr_port),我完成了iptables的版本。nft的版本也改好了。 rdr_port (github)
- 程序执行过程,如下,
- 启动,获取参数,检查参数的合法性。
- 写入防火墙规则。
- 把自身变成daemon。这样主程序就退出,网页脚本调用就返回了。
(也许可以简单的fork()一次,主程序退出,子程序继续执行。不用变成daemon) - 创建定时器,计时。
- 时间到,删除防火墙规则。
- 退出。