osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

在受限网络下允许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
      此例子是基于CentOS8,firewalld启动后的默认nft表。
    • 然后程序等待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)
    • 创建定时器,计时。
    • 时间到,删除防火墙规则。
    • 退出。

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

posted on 2020-03-07 00:47  osnosn  阅读(835)  评论(0编辑  收藏  举报