Stunnel可为POP3、NFS、MySQL、Telnet等明文协议透明套上TLS外壳,无需修改程序代码;其核心是两端协作:本地client加密转发,远端server解密代理,配合正确证书(CN匹配访问地址)与端口配置实现安全通信。

直接用 Stunnel 给明文协议“套 TLS 外壳”,不用改程序、不重写代码,就能让 POP3、NFS、MySQL、Telnet 这类老协议走加密通道。核心就三点:分清 client/server 角色、配对端口转发、证书能过校验。
先搞懂 client 和 server 谁干啥
Stunnel 必须两端配合使用,一端加密发出去(client),一端解密转给真实服务(server):
- 你要保护的是远端服务(比如内网 MySQL、SFS Turbo 文件系统)→ 远端跑 server 模式,监听一个新端口(如 3307 或 2052),接收加密请求,解密后转发给本地 3306 或 2049
- 你本地程序只认明文(比如 mount 命令连 NFS、outlook 连 SMTP)→ 本地跑 client 模式,监听 127.0.0.1:20050 这类端口,把本地明文请求加密后发往远端 server
证书别卡在第一步
自签名够用,但 Common Name(CN)必须匹配你实际访问的地址:
- 服务端生成:运行
openssl req -new -x509 -days 3650 -nodes -out stunnel.pem -keyout stunnel.pem - 填 CN 时,写域名(如
sfs-turbo-abc.region.myhuaweicloud.com)或 IP(如192.168.1.100),不能填 localhost 或错位域名 - 生成后执行
chmod 400 stunnel.pem,配置里 cert 路径要绝对准确
配置文件照着模板填关键项
以 NFS 加密挂载为例,客户端配置(/etc/stunnel/stunnel_20050.conf)只需这几行:
-
client = yes—— 明确是 client 模式 -
sslVersion = TLSv1.2—— 避免低版本兼容风险 -
accept = 127.0.0.1:20050—— 本地监听端口,确保没被占用(可用netstat -anp | grep 127.0.0.1查) -
connect = your-sfs-domain.sfsturbo.region.myhuaweicloud.com:2052—— 对应远端 server 的地址和端口 -
ciphers = ECDHE-RSA-AES256-GCM-SHA384:...—— 指定强密钥交换与加密套件
启动后验证是否真加密
光跑起来不算完,得确认流量已加密:
- 启动命令:
stunnel /etc/stunnel/stunnel_20050.conf(加-debug 7 -output /tmp/stunnel.log可看详细日志) - 挂载成功后,在本机抓包(如用 tcpdump 或 Wireshark 监听 lo 或 eth0),访问
127.0.0.1:20050的流量应显示为 TLS 协议,而非明文 NFS RPC 包 - 若挂载卡住或报 connection refused,优先查 stunnel 进程是否存活、端口是否监听、远端 server 是否可达

















