我设置了 monit 来监控我的服务器上正在运行的一些服务。在其中一台服务器上,我还运行了一个邮件服务器,它负责处理我拥有的域(在本例中为 example.com)的邮件传输。很长一段时间以来,monit 都配置为向我的电子邮件地址发送电子邮件([电子邮件保护]) 每当服务不再响应时。
现在,从一段时间以来(不幸的是我不知道具体什么时候),monit 不再发送电子邮件。在我的日志中,我发现了类似这样的行:
[CEST Oct 11 11:10:50] debug : Processing postponed events queue
[CEST Oct 11 11:10:50] debug : monit: processing queued event /var/lib/monit/events/1476176912_a2e860
[CEST Oct 11 11:10:50] debug : Timestamp failed notification is sent to [email protected]
[CEST Oct 11 11:10:50] error : monit: Cannot get the SSL server certificate!
[CEST Oct 11 11:10:50] error : Sendmail: Cannot switch to SSL
[CEST Oct 11 11:10:50] error : Alert handler failed, retry scheduled for next cycle
(调试日志启用)
monitrc 文件中邮件服务器的配置如下:
set mailserver bits.example.com port 587 username "[email protected]" password "secret" using tlsv1 with timeout 30 seconds
由于我没有更改任何内容,并且 monit 中的配置对我来说看起来不错,我认为我的邮件服务器不再按预期工作(即使我没有发现服务器的其他用户(一些 Web 项目)有任何问题)。 但是,我尝试使用 openssl 直接发送电子邮件(因为服务器仅允许 tls 连接):
myuser@server:~$ openssl s_client -connect bits.example.com:587 -starttls smtp -CApath /etc/ssl/certs
CONNECTED(00000003)
depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority
verify return:1
depth=1 C = IL, O = StartCom Ltd., OU = StartCom Certification Authority, CN = StartCom Class 1 DV Server CA
verify return:1
depth=0 CN = bits.example.com
verify return:1
---
Certificate chain
0 s:/CN=bits.example.com
i:/C=IL/O=StartCom Ltd./OU=StartCom Certification Authority/CN=StartCom Class 1 DV Server CA
1 s:/C=IL/O=StartCom Ltd./OU=StartCom Certification Authority/CN=StartCom Class 1 DV Server CA
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
<removed for a shorter code snippet>
-----END CERTIFICATE-----
subject=/CN=bits.example.com
issuer=/C=IL/O=StartCom Ltd./OU=StartCom Certification Authority/CN=StartCom Class 1 DV Server CA
---
No client certificate CA names sent
---
SSL handshake has read 3485 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 0B22EB3DDF1E0693E4A6152CEF26206572185112A7C9353397BFADAB5CB552E0
Session-ID-ctx:
Master-Key: 29348D1D2EC0819321B1B98C910EB9737BEF54699998ACD2BCB5687D22ED320F42E086D2B263A7DB82661C56AE7A6235
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1476177537
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
250 DSN
EHLO bits.example.com
250-example.com
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test mail
This is a test.
.
250 2.0.0 Ok: queued as 50C965FAE9
QUIT
DONE
就像您看到的那样,它运行良好。所以现在我的知识已经用尽了 :( 为什么 monit 不能再使用我自己的电子邮件服务器发送电子邮件了。有人知道问题出在哪里吗?如果我需要提供更多信息,请随时询问!:)
提前致谢!
答案1
在装有 Monit 5.26.0 的 Ubuntu 20.04 LTS 上,我尝试让 Monit 使用 Mailgun 发送邮件,但它不起作用的原因应该是tlsv1
。tls
根据此维基页面,monit 5.17 或更高版本应该tls
与 Gmail 或类似的电子邮件提供商一起使用。
答案2
将 monit 从 5.6(随 Ubuntu 14.04 apt 源一起提供)升级到 5.20(最新版本,手动升级)后,发送邮件又可以正常工作了。到目前为止,配置没有改变,所以这看起来真的像是旧版本 monit 中的一个错误。