套接字之间的双工管道似乎在 NAT 后面为 SMTP 中继 TLS,但只是有时

Duplex pipe between sockets seems to relay TLS behind NAT for SMTP but only sometimes

设置如下:

[Proxy/Relay Server] <---------[(SMTP TLS test client) Test server]
              ^    
              |
(Internet)    v 
--------------+-----------------
              |
          [Router]
              |
              |
[     Home email appliance machine
              |
  (Home email server app (Node.js))
              |
         (Postfix)                    ]

所以这个小服务器在家里的 NAT 后面。 外部服务器用作 IMAP 和 SMTP 的 proxy/relay。

  1. 家庭电子邮件设备应用程序连接到 Internet 上的 proxy/relay 服务器。
  2. 家庭电子邮件设备应用程序连接到本地主机上的 SMTP 后缀端口。
  3. 家庭电子邮件应用程序在两个连接之间创建双向管道。
  4. 从 Internet 上的测试服务器,将支持 TLS 的 SMTP 客户端连接到 proxy/relay 服务器。
  5. proxy/relay 服务器在代理连接和来自家庭电子邮件设备的预先存在的连接之间传输数据。
  6. SMTP 客户端执行 STARTTLS 协议。
  7. 家庭电子邮件设备应用程序通过管道在 proxy/relay 和本地主机 SMTP 之间传输数据以通过 TLS 执行 SMTP。

我们使用 openssl s_client 测试到 proxy/relay 服务器的 TL 连接,该服务器将数据来回传输到 NAT 后面的客户端。

它适用于明文,但我不确定它是否适用于 TLS。有时我会从 openssl s_client 命令中获得带有 SSL 证书等的完整输出,但通常它只是说 CONNECTED 并坐在那里。不确定它在那些情况下是否有效。

基本上它的这段代码 运行 在带有 Postfix 的计算机上的 NAT(路由器)后面(有一些安全性的东西,但基本上就是这样):

proxyOutgoing = net.connect(proxyport, proxyhost)
localSMTP = net.connect(587, 'localhost')
localSMTP.pipe(proxyOutgoing).pipe(localSMTP)

我想弄清楚的是,这个基本想法是否有什么东西会导致 openssl s_client 测试或一般的 TLS 只是偶尔出现 'working'?我是否需要以某种方式冲洗管道或其他奇怪的东西。它一直在说已连接(000003),但通常只是这样,没有证书信息。

一种理论是 tlsmgr 正在缓存会话,这就是为什么我看不到 STARTTLS 的原因,因为它已经设置好了。

感谢任何有意见或想法的人。

答案基本上是第 2 步需要在第 4 步之后,否则不会收到本地 SMTP/IMAP 服务器的初始响应,并且 STARTTLS 协议测试客户端无法工作,因为它们正在等待连接时的标准问候语。起初,本地邮件服务器连接到早期的原始顺序似乎是有效的,因为明文 SMTP 命令稍后通过,但通常客户端希望在连接时收到某些消息。