在受限网络下允许SSH登录的N种方法

在受限网络下允许SSH登录的N种方法

转载注明来源: 本文链接 来自osnosn的博客,写于 2020-03-06.

关键词:

  • SSH over HTTPS
  • iptables recent
  • sslh
  • haproxy
  • proxytunnel
  • webssh

各种办法的参考连接:

我的办法

  • 写一个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的还没改好。
    • 程序执行过程,如下,
    • 启动,获取参数,检查参数的合法性。
    • 写入防火墙规则。
    • 把自身变成daemon。这样主程序就退出,网页脚本调用就返回了。
      (也许可以简单的fork()一次,主程序退出,子程序继续执行。不用变成daemon)
    • 创建定时器,计时。
    • 时间到,删除防火墙规则。
    • 退出。

转载注明来源: 本文链接 来自osnosn的博客.

猜你喜欢

转载自www.cnblogs.com/osnosn/p/12427751.html