导读:本期聚焦于小伙伴创作的《使用Nginx Stream模块构建SSH跳板机:实现内网服务器安全访问》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《使用Nginx Stream模块构建SSH跳板机:实现内网服务器安全访问》有用,将其分享出去将是对创作者最好的鼓励。

使用Nginx实现SSH跳板机方式

在企业级IT架构中,为了保障内网服务器的安全,通常不允许开发人员或运维人员直接通过公网SSH登录到内网服务器。取而代之的是通过一台跳板机(堡垒机)进行中转。虽然市面上有很多专业的堡垒机产品,但在一些轻量级需求场景下,利用已有的Nginx服务来实现SSH协议的四层转发,不仅成本低,而且配置简单、性能高效。

本文将详细介绍如何使用Nginx的stream模块配置SSH跳板机。

一、 原理简析

SSH协议基于TCP进行通信。Nginx不仅是一款优秀的HTTP七层反向代理服务器,还能通过stream模块实现四层(传输层)协议的转发。通过监听跳板机上的某个端口,Nginx可以将接收到的TCP流量直接转发至内网目标服务器的22端口,从而实现SSH代理。

二、 环境准备

在开始配置之前,请确保你的Nginx版本包含了stream模块。你可以通过以下命令检查:

nginx -V 2>&1 | grep --color=auto stream

如果在输出结果中看到了--with-stream,说明你的Nginx支持该功能。如果未包含,则需要重新编译安装Nginx,并在编译参数中加上--with-stream

三、 基础配置:单台内网服务器转发

假设跳板机的公网IP为114.114.114.114,内网有一台目标服务器IP为192.168.1.100。我们希望通过跳板机的2222端口SSH登录到内网服务器。

编辑Nginx的配置文件nginx.conf,注意stream块必须与http块处于同一层级(即在主配置文件的最外层,不要放在http块内部)。

stream {
    upstream ssh_backend {
        # 内网目标服务器的IP和SSH端口
        server 192.168.1.100:22;
    }

    server {
        # 跳板机监听的端口
        listen 2222;
        # 将流量转发至内网服务器
        proxy_pass ssh_backend;
        # 连接超时时间
        proxy_connect_timeout 10s;
        # 空闲超时时间
        proxy_timeout 300s;
    }
}

配置完成后,测试并重载Nginx:

nginx -t
systemctl reload nginx

此时,在客户端使用以下命令即可登录内网服务器:

ssh -p 2222 username@114.114.114.114

四、 进阶配置:多台内网服务器转发

如果内网存在多台服务器,可以为不同的服务器分配跳板机上的不同监听端口。

stream {
    upstream ssh_dev {
        server 192.168.1.100:22;
    }

    upstream ssh_prod {
        server 192.168.1.200:22;
    }

    # 开发环境服务器
    server {
        listen 2222;
        proxy_pass ssh_dev;
    }

    # 生产环境服务器
    server {
        listen 2223;
        proxy_pass ssh_prod;
    }
}

五、 安全加固:访问控制与日志

作为跳板机,安全性至关重要。我们可以利用Nginx的访问控制功能限制特定IP访问,并开启日志记录以便审计。

stream {
    log_format proxy_log '$remote_addr [$time_local] '
                         '$protocol $status $bytes_sent $bytes_received '
                         '$session_time "$upstream_addr" '
                         '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log /var/log/nginx/stream_access.log proxy_log;

    upstream ssh_backend {
        server 192.168.1.100:22;
    }

    server {
        listen 2222;
        proxy_pass ssh_backend;

        # 仅允许特定IP网段访问
        allow 203.0.113.0/24;
        # 拒绝其他所有IP
        deny all;
    }
}

如果你通过Web管理界面(例如 https://www.ipipp.com)来集中监控和审计Nginx的运行状态及日志,请确保该管理界面本身也做好了严格的访问控制,防止未授权的访问带来安全隐患。

六、 总结

使用Nginx的stream模块实现SSH跳板机,是一种非常轻量级且高效的方案。它避免了部署复杂堡垒机系统的开销,同时借助于Nginx的高并发处理能力,能够稳定地支撑大量的SSH连接。结合访问控制和日志审计功能,可以很好地满足中小型企业对内网服务器安全访问的基本需求。

Nginx SSH跳板机Stream模块TCP代理堡垒机配置内网安全访问

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。