Postfix smtp 与 smtpd -o 选项

Postfix smtp 与 smtpd -o 选项

postfix下表显示了在电子邮件传输的每个步骤中可以使用哪些协议/端口。表格还通过用 ✘ 或 ✔ 标记来指示我想在我的服务器设置上使用哪些协议/端口。

n 手术 发件人 接收者 可能的协议/端口
1 “邮件提交” 移动用户代理 管理咨询委员会 (✘)SMTP 25
(✘)SMTP 25& STARTTLS
(✘)SMTP 587& STARTTLS
(✔)SMTPS 465& 隐式 TLS
2 “服务器内部” 管理咨询委员会 大都会运输署 /
3... “邮件中继” 大都会运输署 大都会运输署 (✘)SMTP 25
(✘)SMTP 25& STARTTLS
(✔)SMTP 25& STARTTLS& DANE
n-2 “服务器内部” 大都会运输署 丙二醛 /
n - 1 “服务器内部” 丙二醛 多发性硬化症 /
n “邮箱访问” 多发性硬化症 移动用户代理 (✘)POP3110STARTTLS
(✘)POP3S995和隐式 TLS
(✘)IMAP143STARTTLS
(✔)IMAPS993和隐式 TLS

在我继续之前,我想请你同意或不同意以下两个假设:

假设A:

我认为Postfix 的老答案服务 465smtps在某个时候被重命名。因此我使用服务 smtps为了收听“邮件提交”SMTPS 端口465

假设B:

我的文件顶部/etc/postfix/master.cf如下所示:

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_security_level=encrypt
  -o smtpd_use_tls=yes
  -o smtpd_tls_wrappermode=yes
  -o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
  -o smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
  -o smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

  ...

我读这里那:

postfix/smtpd- 是 SMTP 守护进程“接收邮件”并将其路由到适当的内部位置。

postfix/smtp- 是 SMTP 守护进程“外发邮件”走向世界。

所以现在我假设postfix/smtpd正在监听端口465“收到的电子邮件”25来自本地用户和端口“收到电子邮件”来自其他地方。我还假设它postfix/smtp正在使用端口25发送“外发电子邮件”

问题:

当我在某个地方配置 Postfix 时,我禁用了里面的整个 TLS 部分,/etc/postfix/main.cf因为我不希望全局设置干扰我在里面设置的单个服务的设置/etc/postfix/master.cf

如你所见,我没有-o为服务使用任何选项,而为服务smtp使用了很多选项。最让我困惑的是,在官方文档中,我可以找到很多几乎重复的选项,例如:-osmtps/etc/postfix/main.cf

根据引用的文字我应该使用:

  • smtp_以for开头的“外发邮件”
  • smtpd_以for开头的“收到邮件”

如果我的理念是正确的,那么我当前的设置应该可以工作。部分原因是我可以使用openssl另一台计算机上的命令实现 TLS 1.3 握手,如下所示:

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
  └─> openssl s_client -connect pis.eu:465 -tls1_3

CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tekpi-eu
verify return:1
---
Certificate chain
 0 s:CN = tek-eu
   i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----

  < REMOVED FOR CLARITY >

-----END CERTIFICATE-----
subject=CN = tek-eu

issuer=CN = tek-eu

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1286 bytes and written 313 bytes
Verification error: self signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 45F832A32F5F27CEAA41B271F28545ECA98DC1AC61F51A484123DD28B2535C30
    Session-ID-ctx: 
    Resumption PSK: 3175AD1641D8D77511FD5C76508D339D01F5D1CE02DBF90F33FEBD334A7E76FD44B52808A846C281616469143977B6F1
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:

    < REMOVED FOR CLARITY >

    Start Time: 1607602078
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
220 mail.pis.eu -------> "HELLO!"

-tls1_3上面我使用了一个应该可以工作的参数,因为我的配置参数-o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1应该禁止除 TLS 1.2 和 TLS 1.3 之外的任何握手。但如果将参数更改-tls1_3-tls1尝试 TLS 1 握手,它会成功!?

┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
  └─> openssl s_client -connect pis.eu:465 -tls1
CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tek-eu
verify return:1
---
Certificate chain
 0 s:CN = tek-eu
   i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----

  < REMOVED FOR CLARITY >

-----END CERTIFICATE-----
subject=CN = tek-eu

issuer=CN = tek-eu

---
No client certificate CA names sent
Peer signing digest: MD5-SHA1
Peer signature type: RSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1385 bytes and written 227 bytes
Verification error: self signed certificate
---
New, TLSv1.0, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES256-SHA
    Session-ID: C1E39786A475DA48ED222EAB5247CCE57D49875AE9A442A73027FBE1F9BB7C4D
    Session-ID-ctx: 
    Master-Key: 5900F37B79A7949871008A827904F2BA907F42EE8BBC73328CD49DF7E37AF2687C06B316922D7D76DDC36FA1DF912E7A
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:

    < REMOVED FOR CLARITY >
    
    Start Time: 1607602884
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: yes
---
220 mail.pis.eu -------> "HELLO!"

这怎么会成功呢?我做错了什么?目前我的设置只有-o smtpd_选项。我还应该使用-o smtp_选项吗?我应该把它们放在哪里?

正如你所见,我很困惑......

相关内容