nginx 分发 ssh

Posted code_____monkey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 分发 ssh相关的知识,希望对你有一定的参考价值。

ngx_stream_ssl_preread_module模块(1.11.5)允许从ClientHello消息中提取信息,而无需终止 SSL/TLS,例如,通过SNI请求的服务器名称或在ALPN中通告的协议。默认情况下未构建此模块,应使用--with-stream_ssl_preread_module配置参数启用它。

preread阶段启用从 ClientHello 消息中提取信息。

Embedded Variables

$ssl_preread_protocol

  • 客户端支持的最高 SSL 协议版本(1.15.2)

SSL/TLS协议运行机制的概述 - 阮一峰的网络日志https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

​
 SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。

Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听。

当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

​

$ssl_preread_server_name

  • 通过 SNI 请求的服务器名称

什么是 SNI? - PamShao - 博客园参考: 链接1 链接2 介绍 是什么:SNI(Server Name Indication)是 TLS 的扩展,这允许在握手过程开始时通过客户端告诉它正在连接的服务器的主机名称。 作用:用来解决一个服https://www.cnblogs.com/pam-sh/p/13409492.html

$ssl_preread_alpn_protocols

  • 客户端通过 ALPN(1.13.10)发布的协议列表。这些值用逗号分隔。

ALPN协议_心梦无痕-CSDN博客_alpn协议介绍ALPN (Application Layer Protocol Negotiation)是TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。ALPN支持任意应用层协议的协商,目前应用最多是HTTP2的协商。在2016年,ALPN已经完全替代NPN了。ALPN allows the application layer to negotiate which protocol t...https://blog.csdn.net/laing92/article/details/104366381

ALPN(Application Layer Protocol Negotiation) - 南极冰川雪 - 博客园ALPN (Application Layer Protocol Negotiation)是TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。ALPN支持任意应用层协议的协商,目前应用最多是Hhttps://www.cnblogs.com/rainboy2010/p/12686843.html

打开nginx的ssl_preread on,使nginx预处理ssl握手client hello字段,通过读取alpn字段为identifyssh(可自定义)字符串 判断出是ssh连接,否则(兼容非ssl连接)都是http连接,分别指向不同的upstream。

ssh 连接命令
ssh deploy@120.221.95.76 -o "ProxyCommand openssl s_client -alpn Qdeicc@9902 -ign_eof -connect 120.221.95.76:8086"

Nginx - Module ngx_stream_ssl_preread_module | Docs4devnginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.https://www.docs4dev.com/docs/en/nginx/current/reference/stream-ngx_stream_ssl_preread_module.html

Nginx支持SNI转发 - 简书SNI是一个TLS的扩展字段,经常用于访问域名跳转到不同的后端地址。 配置方式如下:打开nginx.conf文件,以ttbb/nginx:nake镜像为例/usr/local...https://www.jianshu.com/p/31f1968d36f8

利用nginx实现https和ssh共用端口绕过防火墙限制ssh登录的方法 - 醒袭z - 博客园1.前提 nginx > 1.15.2版本 2.实现的原理 nginx 1.15.2版本以后,新增了一个新特性$ssl_preread_protocol,可以让tcp stream proxy区https://www.cnblogs.com/xingxiz/p/11162610.html

其他实现:

Linux 如何做到 ssh/http 共用 80 端口?_技术解析_文章_数据地带

sslh

Yves Rutschle's Homepage

 

yum install libconfig libconfig-devel

yum install --downloadonly --downloaddir=. epel-release
rpm -ivh --nodeps --force ./epel-release-7-11.noarch.rpm (是否需要安装?)

wget http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sslh-1.20-1.el7.x86_64.rpm
rpm -ivh --nodeps --force ./sslh-1.20-1.el7.x86_64.rpm

systemctl status sslh
修改sslh.cfg文件 vi /etc/sslh.cfg 

参考more /usr/share/doc/sslh-1.20/example.cfg

问题1:客户端访问ip丢失
问题2:如何限定访问ip

HAProxy 

让一个端口同时做两件事:http/https和ssh - chen110xi - 博客园

Http tunnel技术介绍_G-CSDN博客_http tunnel

以上是关于nginx 分发 ssh的主要内容,如果未能解决你的问题,请参考以下文章

nginx 分发 ssh

nginx 分发 ssh

ssh配置详解及公私钥批量分发

ssh密钥分发之二:使用sshpass配合ssh-kopy-id编写脚本批量分发密钥:

AAR啥意思

SSH批量分发管理