• SSH隧道(客户端的数据加密并通过 SSH 服务器转发到目标服务器)


    SSH隧道简介

    SSH 隧道(SSH Tunneling)是通过 SSH(Secure Shell)协议创建的安全通道,用于将流量从一个网络传输到另一个网络

    SSH 隧道可以用来保护网络数据的传输,通常用于穿越防火墙、隐藏流量、访问受限的网络资源等。

    工作原理

    SSH 隧道通过 SSH 连接将客户端的数据加密并通过 SSH 服务器转发到目标服务器,或者将目标服务器的数据通过 SSH 服务器加密传输到客户端。

    三种类型

    本地端口转发(Local Port Forwarding): 客户端将本地端口上的流量转发到远程服务器上的指定端口。

    远程端口转发(Remote Port Forwarding): 客户端请求 SSH 服务器将某个远程端口上的流量转发到本地计算机上的指定端口。

    动态端口转发(Dynamic Port Forwarding): 使用 SOCKS 代理,客户端可以动态地将任意目的地的流量转发到远程服务器

    SOCKS代理:(SOCKS 代理充当客户端与目标服务器之间的中介。客户端将请求发送到 SOCKS 代理服务器,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。这样,目标服务器只会看到来自 SOCKS 代理的请求,而看不到原始客户端的请求)

    示例

    注意:如果仅进行端口转发,想通过 SSH 隧道访问公司内部的 HTTP 服务,只需要端口转发,不需要在服务器上执行任何命令,三种转发需要在末尾添加-N。

    ssh -L 4000:192.168.1.10:80 user@example.com -N
    
    1. 本地端口转发

    场景:通过本地端口 8080 访问远程数据库服务器(假设远程数据库服务器只能通过 db.example.com 上的端口 3306 访问)。

    ssh -L 8080:db.example.com:3306 user@ssh-server.com
    

    解释

    • -L 表示本地端口转发。
    • 8080 是本地计算机上的端口。
    • db.example.com:3306 是远程数据库服务器及其端口。
    • user@ssh-server.com 是 SSH 服务器及其用户名。
    2. 远程端口转发

    场景:让远程 SSH 服务器上的端口 9090 访问本地开发服务器(假设本地服务器运行在端口 3000 上)。

    ssh -R 9090:localhost:3000 user@ssh-server.com
    
    3. 动态端口转发

    场景:使用 SOCKS 代理通过 SSH 隧道进行安全浏览。

    ssh -D 8080 user@ssh-server.com
    

     

    实例图

    本地端口转发示意图

    1. +---------------------+ +------------------+ +---------------------+
    2. | Local Client | | SSH Server | | Remote Server |
    3. |---------------------| |------------------| |---------------------|
    4. | localhost:8080 |<--SSH----->| |<-------->| db.example.com:3306 |
    5. +---------------------+ +------------------+ +---------------------+

    远程端口转发示意图

    1. +---------------------+ +------------------+ +---------------------+
    2. | Local Server | | SSH Server | | Remote Client |
    3. |---------------------| |------------------| |---------------------|
    4. | localhost:3000 |<--SSH----->| |<-------->| ssh-server.com:9090|
    5. +---------------------+ +------------------+ +---------------------+

    动态端口转发示意图 

    Client (localhost:8080) --[SOCKS Proxy]--> SSH Server --> Internet
    
    1. +---------------------+ +------------------+ +---------------------+
    2. | Local Client | | SSH Server | | Internet |
    3. |---------------------| |------------------| |---------------------|
    4. | SOCKS Proxy :8080 |<--SSH----->| |<-------->| Various Sites |
    5. +---------------------+ +------------------+ +---------------------+

     finalshell添加隧道

    • 添加隧道

      • 在连接成功后,右键点击左侧连接列表中的目标服务器,选择 "隧道管理" 或 "Tunnels"。
      • 在弹出的隧道管理界面中,可以看到三个选项卡:“本地端口转发”,“远程端口转发”和“动态端口转发”。
    • 配置本地端口转发

      • 选择 “本地端口转发” 选项卡。
      • 点击 “添加” 按钮。
      • 填写本地端口、目标地址和目标端口。例如,要将本地端口 8080 转发到远程数据库服务器(db.example.com:3306),可以填写如下:
        • 本地端口:8080
        • 目标地址:db.example.com
        • 目标端口:3306
      • 点击 “确定” 或 “保存”。

    总结

    SSH 隧道是一个强大的工具,可以确保数据传输的安全性,提供对受限网络资源的访问,并帮助用户规避网络限制。通过了解本地、远程和动态端口转发,可以灵活地应用 SSH 隧道满足不同的需求。

  • 相关阅读:
    黑客(网络安全)技术自学——高效学习
    Flutter-使用 typedef的注意事项
    四万字!多线程50问!
    浅析 MySQL 中 join 查询
    Postman+Newman生成测试报告
    速来查分!2022监理工程师成绩查询入口开启
    RP9-0 快捷键与注意
    使用Axure RP和内网穿透技术制作静态站点并实现公网访问
    java计算机毕业设计校园互助系统源码+系统+mysql数据库+lw文档+部署
    【JavaScript】拾遗(5.25)
  • 原文地址:https://blog.csdn.net/qq_28790663/article/details/139669722