首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
拉钩
V2EX  ›  Linux

Linux 如何做到 ssh/http 共用 80 端口?

  •  
  •   dangyuluo · 2016-04-03 19:00:46 +08:00 · 8294 次点击
    这是一个创建于 986 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一台处于防火墙后的 Ubuntu 服务器,防火墙只开放了 80 端口,在外网管理起来十分麻烦,还没有 VPN 。 有没有什么办法能够使 ssh/http 复用 80 端口?网上搜索了一圈,没太多有用的信息。

    46 回复  |  直到 2016-05-20 01:36:01 +08:00
        1
    function007   2016-04-03 19:05:51 +08:00
    你可以给 Web 服务做一个点击切换到 SSH 服务的按钮,连完了再切回来。俩同时使用是没可能的。
        2
    neoblackcap   2016-04-03 19:08:01 +08:00
    HAproxy 来实现 TCP 负载均衡行不行?
        3
    wwwjfy   2016-04-03 19:09:54 +08:00   ♥ 5
        4
    dangyuluo   2016-04-03 19:10:43 +08:00
    @function007 那样就会在一定时间内影响到 http 服务。我觉得通过分析请求的协议然后将数据包转发给 http 或者 ssh 服务应该是可行的吧。正在研究,说不定自己写一套这样的东西。
        5
    dangyuluo   2016-04-03 19:11:26 +08:00
    @wwwjfy 这东西不错,学习一下。
        6
    phttc   2016-04-03 19:12:28 +08:00
    webshell , 23333
        7
    gamexg   2016-04-03 19:12:38 +08:00
    自己写,或者干脆开放 http 代理, ssh 通过代理连接。
        8
    thekll   2016-04-03 19:43:41 +08:00 via iPhone
    协议分析不知道效率如何。如果可以用另一台服务器中转的话, iptables 设置通过识别中转 ip 再转发到 ssh 。
        9
    LINAICAI   2016-04-03 19:48:23 +08:00
    为何要把 ssh 端口改用 80 端口啊,没想明白这个必要性
        10
    dangyuluo   2016-04-03 19:54:08 +08:00
    @thekll 因为只有一个 ip 开放端口,所以不太适合。


    @LINAICAI 见上。
        11
    clino   2016-04-03 19:54:39 +08:00 via Android   ♥ 4
        12
    pimin   2016-04-03 19:56:16 +08:00
    参考很多端口复用的 backdoor 、 rootkit
    自己给自己装个 rootkit 而已
        13
    xjp   2016-04-03 20:28:11 +08:00
    给服务器安装个 webshell 不过这个非常不安全 被入侵的服务器一般会用到这个
        14
    dangyuluo   2016-04-03 20:28:55 +08:00
    已经搞定, sslh 十分好用。
        15
    mandymak   2016-04-03 21:00:51 +08:00
        16
    JerningChan   2016-04-03 21:42:35 +08:00
    不可能一個端口被 2 個進程同時使用的吧?
        17
    DesignerSkyline   2016-04-03 21:51:20 +08:00
    @JerningChan 确实是不可以,但是 sslh 可以根据数据包类型判断如何转发数据包到监听不同端口的进程上去
        18
    AlexaZhou   2016-04-03 22:00:12 +08:00
    “有一台处于防火墙后的 Ubuntu 服务器,防火墙只开放了 80 端口,在外网管理起来十分麻烦,还没有 VPN 。”

    我想设计成这样的本意就是避免 ssh 端口对外暴露所带来的风险。人家花功夫配置防火墙屏蔽了外网 ssh 访问,然后楼主又折腾一番终于加回去了,感觉好逗
        19
    JerningChan   2016-04-03 22:07:29 +08:00
    @DesignerSkyline 你意思是,用 ssh 做前端?
    那樣的話,好像 nginx 也可以做一個前端,去代理 ssh 鏈接吧?衹是,好像一樣不能監聽同樣的端口呀 0.0
        20
    DesignerSkyline   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.
        21
    dangyuluo   2016-04-03 22:16:50 +08:00
    @AlexaZhou 如果你身处一个效率和政府一样的学校,你就会知道一个端口的珍贵了。
        22
    owt5008137   2016-04-03 22:45:14 +08:00
    理论上可以劫持 tcp 包,然后分析内容,如果是 ssh 协议,转发给 sshd ,如果是 http 协议,转发给 web service 。不知道有没人这么做过
        23
    scys   2016-04-03 23:33:13 +08:00
    @owt5008137 你的想法已经很多人在做,叫做七层流量分流
        24
    kookxiang   2016-04-03 23:39:09 +08:00
    nginx 好像有 port reuse 啊
        25
    extreme   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 规则。
        26
    just1   2016-04-04 00:04:41 +08:00 via Android
    http://zone.wooyun.org/content/24278
    用 iptables 直接判断来路 ip
        27
    dphdjy   2016-04-04 09:11:54 +08:00 via Android
    HAproxy 几行配置,基于协议进行转发, 简单粗暴~(不过目前还不知道怎么同时转 3 种,好像只能 2 种
        28
    rootsir   2016-04-04 10:28:44 +08:00
    ajax terminal
        29
    wizardoz   2016-04-04 10:36:20 +08:00
    服务器往外访问有限制不?
    要是没有的话,反向端口映射即可。
        30
    dangyuluo   2016-04-04 13:00:39 +08:00
    @dphdjy 是么?我还以为 HA 只能做 http 下的负载均衡。
        31
    dangyuluo   2016-04-04 13:05:01 +08:00
    @extreme 这种方法略有麻烦,所以还是使用 sslh ,下一步可以使用 haproxy 。

    @just1 不太符合满世界跑。

    @wizardoz 也是一种思路,不过还得外网一台服务器,增加成本。

    @owt5008137 确实是这么做的。
        32
    beyondsoft   2016-04-04 13:59:31 +08:00
    shellinabox
        33
    dphdjy   2016-04-04 14:09:24 +08:00 via Android
    @dangyuluo 我试过转发 ssh 和 http ,或者 ssh 和 https ,也可以 http 和 https 。
    但是 ssh+http+https 没成成功。。。(技艺不精
        34
    tywtyw2002   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 状态。
        35
    julyclyde   2016-04-04 17:38:31 +08:00
    ssh 是服务器先打招呼, http 是客户端先打招呼
    这俩不可能共用的,别想了
        36
    dangyuluo   2016-04-04 17:39:30 +08:00
    @julyclyde 很抱歉,不过建议你看一下上面的讨论。
        37
    julyclyde   2016-04-04 17:42:09 +08:00   ♥ 1
    @dangyuluo 那你有没有统计过失败率呢
        38
    dangyuluo   2016-04-04 17:46:21 +08:00
    @julyclyde 感谢你的提醒,在上线的俩小时内我特意跑到咖啡馆测试外网访问,无论是 http 和 SSH 都没有任何问题。
    另,切换到 sslh 后,询问了几个网站重度访问者,并没有任何感知。
        39
    julyclyde   2016-04-04 17:52:05 +08:00
    @dangyuluo 唉,看你还是挺嘴硬的。这么说吧,请你看一下 probe.c 的 61 行~ 87 行。在你这个特殊案例里,仅仅是 ssh 效率受点儿影响而已,但它不可能在支持第二个服务器主动类型的协议。另外如果你的客户端超时设置比较严格,就会协商失败
        40
    msg7086   2016-04-04 21:34:46 +08:00
    @julyclyde 流量分流理论上并不是做不到。
    Nginx 本身就支持在 HTTPS 端口收到 HTTP 请求的时候返回 The plain HTTP request was sent to HTTPS port 。
    更别说 SSH 和 HTTP 这种只要看客户端有没有发请求就能判断的分流了。
        41
    lijianying10   2016-04-04 21:55:00 +08:00
        42
    julyclyde   2016-04-05 10:34:37 +08:00
    @msg7086 SSL 和 HTTP 都是服务器被动的协议,分流的实现很简单。看客户端有没有发请求的分流,那只能像上面 sshlh 那样,在多种服务器被动协议以外只能支持一种服务器主动的协议,而不能任意协议的搭配

    你能实现两个服务器主动的协议的分流么?洗耳恭听
        43
    msg7086   2016-04-05 19:59:32 +08:00
    @julyclyde 哦服务器主动的当然不行。
        44
    tylerdurden   2016-04-07 14:25:03 +08:00
    坦率的说,楼主是不是搞了一台服务器想做个后门啊,可以使用 HTTP tunnel 嘛
        45
    yuedingwangji   2016-05-20 01:22:34 +08:00
    @just1 哥 没有乌云账号呀,你直接把文章发出来么
        46
    yuedingwangji   2016-05-20 01:36:01 +08:00
    可以做到 5901 和 ssh 共用么
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2169 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 25ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1