有一台处于防火墙后的 Ubuntu 服务器,防火墙只开放了 80 端口,在外网管理起来十分麻烦,还没有 VPN 。 有没有什么办法能够使 ssh/http 复用 80 端口?网上搜索了一圈,没太多有用的信息。
|  |      1function007      2016-04-03 19:05:51 +08:00 你可以给 Web 服务做一个点击切换到 SSH 服务的按钮,连完了再切回来。俩同时使用是没可能的。 | 
|      2neoblackcap      2016-04-03 19:08:01 +08:00 HAproxy 来实现 TCP 负载均衡行不行? | 
|      3wwwjfy      2016-04-03 19:09:54 +08:00  5 | 
|  |      4dangyuluo OP @function007 那样就会在一定时间内影响到 http 服务。我觉得通过分析请求的协议然后将数据包转发给 http 或者 ssh 服务应该是可行的吧。正在研究,说不定自己写一套这样的东西。 | 
|  |      6phttc      2016-04-03 19:12:28 +08:00 webshell , 23333 | 
|  |      7gamexg      2016-04-03 19:12:38 +08:00 自己写,或者干脆开放 http 代理, ssh 通过代理连接。 | 
|      8thekll      2016-04-03 19:43:41 +08:00 via iPhone 协议分析不知道效率如何。如果可以用另一台服务器中转的话, iptables 设置通过识别中转 ip 再转发到 ssh 。 | 
|  |      9LINAICAI      2016-04-03 19:48:23 +08:00 为何要把 ssh 端口改用 80 端口啊,没想明白这个必要性 | 
|  |      11clino      2016-04-03 19:54:39 +08:00 via Android  4 | 
|  |      12pimin      2016-04-03 19:56:16 +08:00 参考很多端口复用的 backdoor 、 rootkit 自己给自己装个 rootkit 而已 | 
|  |      13xjp      2016-04-03 20:28:11 +08:00 给服务器安装个 webshell   不过这个非常不安全   被入侵的服务器一般会用到这个 | 
|  |      14dangyuluo OP 已经搞定, sslh 十分好用。 | 
|      15mandymak      2016-04-03 21:00:51 +08:00 | 
|  |      16JerningChan      2016-04-03 21:42:35 +08:00 不可能一個端口被 2 個進程同時使用的吧? | 
|      17DesignerSkyline      2016-04-03 21:51:20 +08:00 @JerningChan 确实是不可以,但是 sslh 可以根据数据包类型判断如何转发数据包到监听不同端口的进程上去 | 
|  |      18AlexaZhou      2016-04-03 22:00:12 +08:00 “有一台处于防火墙后的 Ubuntu 服务器,防火墙只开放了 80 端口,在外网管理起来十分麻烦,还没有 VPN 。” 我想设计成这样的本意就是避免 ssh 端口对外暴露所带来的风险。人家花功夫配置防火墙屏蔽了外网 ssh 访问,然后楼主又折腾一番终于加回去了,感觉好逗 | 
|  |      19JerningChan      2016-04-03 22:07:29 +08:00 @DesignerSkyline 你意思是,用 ssh 做前端? 那樣的話,好像 nginx 也可以做一個前端,去代理 ssh 鏈接吧?衹是,好像一樣不能監聽同樣的端口呀 0.0 | 
|      20DesignerSkyline      2016-04-03 22:10:48 +08:00 @JerningChan 你想多了。 sslh accepts connections on specified ports, and forwards them further based on tests performed on the first data packet sent by the remote client.Hence sslh acts as a protocol demultiplexer, or a switchboard. Its name comes from its original function to serve SSH and HTTPS on the same port. | 
|      22owt5008137      2016-04-03 22:45:14 +08:00 理论上可以劫持 tcp 包,然后分析内容,如果是 ssh 协议,转发给 sshd ,如果是 http 协议,转发给 web service 。不知道有没人这么做过 | 
|  |      23scys      2016-04-03 23:33:13 +08:00 @owt5008137 你的想法已经很多人在做,叫做七层流量分流 | 
|  |      24kookxiang      2016-04-03 23:39:09 +08:00 nginx 好像有 port reuse 啊 | 
|  |      25extreme      2016-04-04 00:03:27 +08:00 SSH listen 22, HTTP listen 80 iptables -t nat -I PREROUTING -s IP_WANT_TO_CONNECT_TO_SSH -p tcp --dport 80 -j REDIRECT --to-ports 22 我的思路是,用 SSH 服务的 IP 比用 HTTP 服务的 IP 少…… 甚至可以在 80 端口的网页弄个东西,访问,输入密码,自动根据你的访问 IP 添加 NAT 规则。 | 
|  |      26just1      2016-04-04 00:04:41 +08:00 via Android http://zone.wooyun.org/content/24278 用 iptables 直接判断来路 ip | 
|  |      27dphdjy      2016-04-04 09:11:54 +08:00 via Android HAproxy 几行配置,基于协议进行转发, 简单粗暴~(不过目前还不知道怎么同时转 3 种,好像只能 2 种 | 
|      28rootsir      2016-04-04 10:28:44 +08:00 ajax terminal | 
|  |      29wizardoz      2016-04-04 10:36:20 +08:00 服务器往外访问有限制不? 要是没有的话,反向端口映射即可。 | 
|  |      31dangyuluo OP @extreme 这种方法略有麻烦,所以还是使用 sslh ,下一步可以使用 haproxy 。 @just1 不太符合满世界跑。 @wizardoz 也是一种思路,不过还得外网一台服务器,增加成本。 @owt5008137 确实是这么做的。 | 
|  |      32beyondsoft      2016-04-04 13:59:31 +08:00 shellinabox | 
|  |      33dphdjy      2016-04-04 14:09:24 +08:00 via Android @dangyuluo 我试过转发 ssh 和 http ,或者 ssh 和 https ,也可以 http 和 https 。 但是 ssh+http+https 没成成功。。。(技艺不精 | 
|  |      34tywtyw2002      2016-04-04 16:32:17 +08:00 用 iptables 就可以 首先设置一条检查 http host 的规则 如果检查到该 string 在 http 包中那么 log 该访问者的 ip 到文件。 crontab 定时 parse log 获得第一步中的 ip 地址,然后运行 ssh passtrough 程序。 ssh passtrough 程序 call iptables 去 redirect 该 ip 地址到 80 口的数据包到 ssh port 。 ssh passtrough 程序检查该 ssh 连接是否结束,如果结束清理 iptables 中的 redirect ,恢复 block 状态。 | 
|      35julyclyde      2016-04-04 17:38:31 +08:00 ssh 是服务器先打招呼, http 是客户端先打招呼 这俩不可能共用的,别想了 | 
|  |      38dangyuluo OP @julyclyde 感谢你的提醒,在上线的俩小时内我特意跑到咖啡馆测试外网访问,无论是 http 和 SSH 都没有任何问题。 另,切换到 sslh 后,询问了几个网站重度访问者,并没有任何感知。 | 
|      39julyclyde      2016-04-04 17:52:05 +08:00 @dangyuluo 唉,看你还是挺嘴硬的。这么说吧,请你看一下 probe.c 的 61 行~ 87 行。在你这个特殊案例里,仅仅是 ssh 效率受点儿影响而已,但它不可能在支持第二个服务器主动类型的协议。另外如果你的客户端超时设置比较严格,就会协商失败 | 
|  |      40msg7086      2016-04-04 21:34:46 +08:00 @julyclyde 流量分流理论上并不是做不到。 Nginx 本身就支持在 HTTPS 端口收到 HTTP 请求的时候返回 The plain HTTP request was sent to HTTPS port 。 更别说 SSH 和 HTTP 这种只要看客户端有没有发请求就能判断的分流了。 | 
|  |      41lijianying10      2016-04-04 21:55:00 +08:00 | 
|      42julyclyde      2016-04-05 10:34:37 +08:00 @msg7086 SSL 和 HTTP 都是服务器被动的协议,分流的实现很简单。看客户端有没有发请求的分流,那只能像上面 sshlh 那样,在多种服务器被动协议以外只能支持一种服务器主动的协议,而不能任意协议的搭配 你能实现两个服务器主动的协议的分流么?洗耳恭听 | 
|  |      44tylerdurden      2016-04-07 14:25:03 +08:00 坦率的说,楼主是不是搞了一台服务器想做个后门啊,可以使用 HTTP tunnel 嘛 | 
|      45yuedingwangji      2016-05-20 01:22:34 +08:00 @just1 哥 没有乌云账号呀,你直接把文章发出来么 | 
|      46yuedingwangji      2016-05-20 01:36:01 +08:00 可以做到 5901 和 ssh 共用么 | 
|      47ab1072074029      2023-02-14 16:35:54 +08:00 @dangyuluo 大佬赐教下? |