欢迎光临本地信息咨询网
详情描述

方案概述

使用 Nginx 的 ngx_stream_proxy_module 模块实现 TCP 级别的 SSH 端口转发,通过 SSL/TLS 加密通道。

配置步骤

1. 安装 Nginx(包含 Stream 模块)

# Ubuntu/Debian
sudo apt update
sudo apt install nginx libnginx-mod-stream

# CentOS/RHEL
sudo yum install nginx nginx-mod-stream

2. 配置 Nginx Stream 模块

编辑 /etc/nginx/nginx.conf,在 http 块同级添加 stream 配置:

# /etc/nginx/nginx.conf
events {
    worker_connections 1024;
}

# SSH 代理配置(TCP 层)
stream {
    # 上游 SSH 服务器组
    upstream ssh_backend {
        server 192.168.1.100:22;  # 目标服务器1
        server 192.168.1.101:22;  # 目标服务器2
        server 192.168.1.102:22;  # 目标服务器3
    }

    # SSH 代理服务器配置
    server {
        listen 8022;  # 代理监听端口
        proxy_pass ssh_backend;
        proxy_connect_timeout 30s;
        proxy_timeout 1h;

        # 可选:SSL/TLS 加密
        # ssl_preread on;
        # ssl_certificate /path/to/cert.pem;
        # ssl_certificate_key /path/to/key.pem;
    }

    # 基于 SNI 的多域名转发
    map $ssl_preread_server_name $backend_name {
        host1.example.com   192.168.1.100:22;
        host2.example.com   192.168.1.101:22;
        default            ssh_backend;
    }

    server {
        listen 8023 ssl;
        ssl_preread on;
        proxy_pass $backend_name;
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
    }
}

http {
    # 原有的 HTTP 配置...
}

3. 使用 SSL/TLS 加密(推荐)

# 生成自签名证书
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/ssh-proxy.key \
    -out /etc/nginx/ssl/ssh-proxy.crt \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=Company/CN=ssh-proxy.example.com"

4. 客户端连接方式

方式一:直接连接(无 SSL)
# 使用 ProxyCommand
ssh -o ProxyCommand="nc -X connect -x nginx-host:8022 %h %p" user@target-host

# 或配置 ~/.ssh/config
Host jump-host
    HostName nginx-host
    Port 8022
    User your-username
方式二:通过 SSL/TLS 连接
# 使用 sslh 或自定义代理
# 安装 sslh(应用层分流)
sudo apt install sslh

# sslh 配置(将 SSH 和 HTTPS 分流到不同端口)

5. 高级配置:基于认证的转发

stream {
    # 带认证的 SSH 代理
    server {
        listen 8024;

        # 使用 nginx 的 auth 模块或结合 Lua 脚本
        # proxy_pass ssh_backend;

        # 通过变量控制访问
        set $allow_access 0;

        # 这里可以结合 nginx 的 http 认证模块
        # 或使用 nginx-stream-lua-module
    }
}

6. 完整示例:HTTP + SSH 混合配置

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

# SSH 隧道配置
stream {
    # 日志格式
    log_format proxy '$remote_addr [$time_local] '
                     '$protocol $status $bytes_sent $bytes_received '
                     '$session_time "$upstream_addr"';

    access_log /var/log/nginx/ssh-access.log proxy;
    error_log /var/log/nginx/ssh-error.log;

    # 目标服务器映射
    map $ssl_preread_server_name $target_backend {
        web-server     192.168.1.100:22;
        db-server      192.168.1.101:22;
        app-server     192.168.1.102:22;
        default        192.168.1.100:22;
    }

    # SSL 加密的 SSH 代理
    server {
        listen 443 ssl reuseport;
        ssl_preread on;
        proxy_pass $target_backend;
        proxy_connect_timeout 30s;
        proxy_timeout 2h;

        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
    }

    # 明文 SSH 代理(内网使用)
    server {
        listen 8022 reuseport;
        proxy_pass 192.168.1.100:22;
        proxy_buffer_size 16k;
    }
}

# Web 服务配置
http {
    # ... 原有的 HTTP 配置
    server {
        listen 80;
        server_name jump.example.com;

        # 跳板机管理页面
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }

        # SSH over WebSocket 示例(使用 websockify)
        location /ssh/ {
            proxy_pass http://127.0.0.1:6080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
}

7. 客户端配置示例

~/.ssh/config 文件配置:

# 通过 Nginx 代理连接
Host *.internal
    ProxyCommand nc -X connect -x nginx-proxy:8022 %h %p
    ServerAliveInterval 60
    TCPKeepAlive yes

# 具体主机配置
Host web-server
    HostName web-server.internal
    User admin
    Port 22

Host db-server
    HostName db-server.internal
    User root
    Port 22

8. 安全加固建议

# 限制访问 IP
server {
    listen 8022;
    allow 10.0.0.0/8;    # 内网 IP 段
    allow 192.168.1.0/24;
    deny all;

    proxy_pass ssh_backend;

    # 连接速率限制
    proxy_upload_rate 512k;
    proxy_download_rate 2m;
}

# 连接数限制
limit_conn_zone $binary_remote_addr zone=ssh_conn:10m;

server {
    listen 8022;
    limit_conn ssh_conn 5;  # 每个 IP 最多 5 个连接
    proxy_pass ssh_backend;
}

9. 启动和测试

# 检查配置
sudo nginx -t

# 重启 Nginx
sudo systemctl restart nginx

# 查看日志
sudo tail -f /var/log/nginx/ssh-access.log

# 测试连接
ssh -p 8022 user@nginx-proxy -t 'ssh user@target-server'

替代方案考虑

如果需求更复杂,可以考虑:

OpenSSH 内置跳板机:使用 SSH 的 ProxyJump 或 ProxyCommand 专业堡垒机:如 Jumpserver、Teleport SSH over HTTPS:使用 SSLH 或 GoTTY

这种 Nginx 方案适合简单的 TCP 端口转发需求,如果需要完整的会话审计、用户管理、权限控制等功能,建议使用专业的堡垒机解决方案。

相关帖子
为什么很多人用四象限法安排时间还是觉得乱,是不是第一步就搞错了?
为什么很多人用四象限法安排时间还是觉得乱,是不是第一步就搞错了?
未来生育津贴政策可能会有哪些调整趋势,个人应如何提前了解?
未来生育津贴政策可能会有哪些调整趋势,个人应如何提前了解?
冷水澡能否作为一种自然方式,辅助提升日常专注力与工作效率?
冷水澡能否作为一种自然方式,辅助提升日常专注力与工作效率?
2026年税务机关是否会进一步简化个人养老金账户的个税抵扣申报流程?
2026年税务机关是否会进一步简化个人养老金账户的个税抵扣申报流程?
作为返乡创业青年,2026年可以申请哪些类型和标准的创业扶持补贴?
作为返乡创业青年,2026年可以申请哪些类型和标准的创业扶持补贴?
淄博市专业网站开发制作%精准获客系统,收费标准
淄博市专业网站开发制作%精准获客系统,收费标准
马上消费金融利率,安逸花借款利息计算
马上消费金融利率,安逸花借款利息计算
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
在涉及遗产继承或抚养权纠纷时,出生医学证明能提供怎样的法律依据?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
智能玩具联网功能背后的数据安全与儿童隐私保护,家长应了解哪些知识?
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
个人债务优化重组申请流程有哪些步骤?从申请到落地全解析
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
更年期后,女性在职业生涯和个人兴趣发展上可能迎来哪些新机遇?
汽车贷款期限包含宽限期吗?还款日与期限的计算
汽车贷款期限包含宽限期吗?还款日与期限的计算
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
除了便捷性,预制菜在执行的食品安全标准上与餐厅现做菜有何异同?
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
写字楼门店抵押贷款负债率高怎么办?降低负债率提高批贷成功率
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
商铺门面房抵押贷款保险必须买吗?财产保险与抵押贷款保险区别
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
面对2026年的市场环境,独立开发者应聚焦解决用户的哪些痛点?
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
别墅抵押贷款LPR怎么影响利率?LPR调整与月供变化关系解读
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
如何通过角色扮演类玩具,有效培养孩子的同理心与情绪管理能力?
过桥垫资让与担保效力?名为买卖实为借贷
过桥垫资让与担保效力?名为买卖实为借贷
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
别墅抵押贷款可以抵押给典当行吗?典当行别墅抵押贷款利弊
公司经营贷款集团授信流程,企业集团统一授信
公司经营贷款集团授信流程,企业集团统一授信