Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
dangyuluo
V2EX  ›  Linux

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

  •  
  •   dangyuluo · Apr 3, 2016 · 17982 views
    This topic created in 3865 days ago, the information mentioned may be changed or developed.

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

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


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

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

    @just1 不太符合满世界跑。

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

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

    你能实现两个服务器主动的协议的分流么?洗耳恭听
    msg7086
    msg7086
    Apr 5, 2016
    43
    @julyclyde 哦服务器主动的当然不行。
    tylerdurden
    tylerdurden
    Apr 7, 2016
    44
    坦率的说,楼主是不是搞了一台服务器想做个后门啊,可以使用 HTTP tunnel 嘛
    yuedingwangji
    yuedingwangji
    May 20, 2016
    45
    @just1 哥 没有乌云账号呀,你直接把文章发出来么
    yuedingwangji
    yuedingwangji
    May 20, 2016
    46
    可以做到 5901 和 ssh 共用么
    ab1072074029
    ab1072074029
    Feb 14, 2023
    47
    @dangyuluo 大佬赐教下?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4960 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 00:13 · PVG 08:13 · LAX 16:13 · JFK 19:13
    ♥ Do have faith in what you're doing.