openEuler 安装配置 Dovecot 邮件服务器排障

admin 2023年10月5日01:01:56评论14 views字数 5214阅读17分22秒阅读模式

我还真没有想到的是,这个 Dovecot 邮件服务器配置的话题,换一个发行版就能写一篇补充。

openEuler 安装配置 Dovecot 邮件服务器排障

笔者背景:CISA(国际信息系统审计师)、软考系统分析师

一、前情


起因是看到某公众号写了一篇关于某甲方从 CentOS 7 迁移到国产 Linux 发行版 openEuler ,发现 MongoDB 数据库运行不起来,原来是缺了依赖组件于是从别的地方直接移植的故事。

刚好最近确实在评估各种国产发行版的上车选择问题。所以就用 openEuler 来试一下配置 Dovecot。下载地址:

https://www.openeuler.org/zh/download/archive/


考虑到是初尝试,于是选择了 openEuler 22.03 LTS SP2。发行时间是 2023年6月,计划的生命周期终结时间(EOL)是2024年3月,话说作为LTS这EOL是否太短了点?可能是为商业发行版让路?

版本 发行时间 计划EOL时间
openEuler  22.03 LTS SP2 2023-06 2024-03
openEuler  22.03 LTS SP1 2022-12 2024-12
openEuler  22.03 LTS 2022-03 2024-03

但再看22.03的原版和SP1版,SP1的EOL居然是最长的,我确实看不懂......算了。

操作系统本身最小化安装,过程顺利。然后配置邮件服务器的过程就是我前面那篇文章对着做:

经典有效的日志监控邮件集中巡检 Linux 服务器

因为 openEuler 是有提供 Dovecot 的预编译软件包,所以不需要从源代码编译安装的过程。

老司机了属于是,轻车熟路,一直正常,直到最后设置用邮件客户端软件 Thunderbird 收取 logwatch 邮件......

就不行了,囧。

二、入坑


Thunderbird 收邮件时完全没反馈,于是查看 openEuler 的系统日志:

tail -f /var/log/maillog

发现内容有类似如下的报错(为方便查看,我加了换行):

pop3-login: 
Error: 
Failed to initialize SSL server context: 
Can't set cipher list to 'PROFILE=SYSTEM' (ssl_cipher_list setting): 
error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match: 
user=<>, rip=192.168.121.1, lip=192.168.121.237, secured, session=<VO76dswGB3fAqHkB>

表面上看,原因是邮件客户端软件 Thunderbird 发起加密POP3连接时使用的加密算法在 openEuler 操作系统预设支持的加密算法策略配置中不存在。

错误信息中提及的:

ssl_cipher_list = PROFILE=SYSTEM

的定义在:

/etc/dovecot/conf.d/10-ssl.conf

配置文件中。

查看配置文件,可以看到关于该设置:ssl_cipher_list 的可选项说明。该设置可以直接给出允许使用和不允许使用的加密算法的清单,也可以直接按操作系统的设置,也就是 PROFILE=SYSTEM 这一项。

于是去比对其他厂商发行版的 Dovecot 配置即10-ssl.conf,发现全都是一样的写着 PROFILE=SYSTEM。

有问题先找源头。根据参考文档:

https://fedoraproject.org/wiki/Changes/CryptoPolicy

还有这份:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening


可知 CryptoPolicy 这个设置,是已经有相当年头的设计。

为了使操作系统、应用程序和加密算法三者之间有良好的过渡关系,fedora 设计了三种预定义的加密算法应用策略,分别是LEGACY(传统)、DEFAULT(默认)和FUTURE(未来),每种策略分别代表了由多种加密算法构成的一个集合。

后来再增加了FIPS这一种,以能符合FIPS 140标准要求。

系统管理员可以在修改 /etc/crypto-policies/config 配置文件后使用 update-crypto-profiles 命令应用,从而实现对老旧应用程序的兼容,又或者在合适时提早丢弃安全性落伍的加密算法。

openEuler 的配置文件中指出还增加了“NEXT”这一种配置策略,介乎于DEFAULT和FUTURE之间,是下一版本的操作系统所使用的加密算法集合。

三、出坑


兔子洞不深挖了。检查 openEuler 发现配置文件所设置的依然还是 DEFAULT 策略。这没理由不支持啊奇怪。

于是用 openssl 命令去观察,如下操作过程中,发起访问的是龙蜥 Anolis Linux 8,被访问的 192.168.121.237 是 openEuler:

[root@ANOLIS8 dovecot]# openssl s_client -servername 192.168.121.237 -connect 192.168.121.237:pop3s
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 313 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
[root@ANOLIS8 dovecot]#

各种 NO NOT NONE好吧,一切都是空白。

为了搞清楚究竟屏蔽了什么加密算法,我用tcpdump抓包邮件客户端和Dovecot服务器之间的加密POP3流量,保存为抓包文件然后进行分析。抓包命令是:

tcpdump -i ens33 -w 抓包文件名 port 995

然后用 wireshark 这个抓包工具打开抓包文件进行分析。可以发现就在TLS 握手阶段,Dovecot 服务器就主动断了连接

openEuler 安装配置 Dovecot 邮件服务器排障

怪不得 openssl 握手测试都是NONE。

而具体地,TLS 握手的 HELLO 包指出,邮件客户端 Thunderbird 给出的是 TLS 1.2 版的握手请求,支持的加密组合算法17种、分组6种、哈希算法11种:

openEuler 安装配置 Dovecot 邮件服务器排障


openEuler 安装配置 Dovecot 邮件服务器排障


openEuler 安装配置 Dovecot 邮件服务器排障

熟悉加密算法体系的朋友都很清楚这些算法。

检查 openEuler 的默认策略具体是什么,方法是查看:

/etc/crypto-policies/state/CURRENT.pol

文件,内容是按生效的策略DUMP出具体的加密算法组合和设置清单。

openEuler 安装配置 Dovecot 邮件服务器排障

其中,有几个关键项目:

min_dh_size = 1023

在 Dovecot 10-ssl.conf 配置文件中提示需要生成4096位的dh.pem,网上也有些解决办法指出需要有符合最低位数要求的 dh.pem文件 POP3S 连接才能生效。但实际(经过测试确认) dh.pem 并不是必须的。所以问题不是在产生 dh.pem 时设置的位数不足上。

min_tls_version = TLS1.0

protocol = TLS1.3 TLS1.2 TLS1.1 TLS1.0 DTLS1.2 DTLS1.0

以上两项确定了加密连接基于 TLS 1.2 是受支持的。

于是再组合cipher、group和hash三项,比对邮件客户端给出的对应三项,结果发现两者是相容的。

具体比对过程太长忽略掉,只是需要为不熟悉加密算法的朋友提个醒,SHA256和SHA2-256是一回事。

四、解决问题


确实觉得很奇怪,但总要解决问题。

干脆试试把 openEuler 的加密策略改为最宽容的 LEGACY ,也就是修改:

/etc/crypto-policies/config

文件,把DEFAULT改为LEGACY,保存然后执行 update-crypto-policies:

[root@OPENEULER crypto-policies]# update-crypto-policies
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

重启 Dovecot 服务(或者重启系统),然后测试POP3S连接,故障依旧。

看来问题是出在对 PROFILE=SYSTEM 的处理上。

不折腾了,决定绕过这个设置的问题。

解决办法是修改 Dovecot 10-ssl.conf 配置文件,不再设置 PROFILE=SYSTEM,而是按配置文件的提示,设置具体允许和禁止的加密算法清单,典型如配置文件中所给出的,禁止所有非EC的设置:

ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH

保存配置文件,重启服务(包括系统加密算法策略恢复为DEFAULT),测试,邮件客户端 Thunderbird 就能正常通过POP3S连接收取系统日志邮件到本地了。

这个过程折腾完,暂时认为 openEuler 的开箱即用并没有做到家。具体原因还有待进一步研究,但作为用户来说,绕过问题能正常且保证安全地使用就行。

五、后记


顺带一提,我又倒回去摆弄了一下 Anolis Linux 23 GA 的加密策略,结果再跌一次眼镜。运行 update-crypto-policies 命令直接就异常出错了,关键提示摘要如下:

ModuleNotFoundError: No module named 'tomllib'
ModuleNotFoundError: No module named 'toml'

原来最少化安装时缺了其实是必备但现在标记为过时的Python3 TOML(Tom's Obvious, Minimal Language)支持,执行:

dnf install python3-toml

后 update-crypto-policies 命令才正常。

还没完。接着还发现日志没有滚动。虽然 logrotate 包是安装了,但并没有在 cron.daily 里面配置每天运行的脚本......这GA质量居然连这么基本的事情都能缺。

从 Anolis 8 把脚本复制过来也就解决问题了。最后正常情况应该是这样的:

[root@anolis23 cron.daily]# ll -Z
total 8
-rwxr-xr-x. 1 root root system_u:object_r:bin_t:s0 486 Apr 15 11:18 0logwatch
-rwxr-xr-x. 1 root root system_u:object_r:bin_t:s0 190 Oct  4 17:24 logrotate
[root@anolis23 cron.daily]# cat logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

[root@anolis23 cron.daily]#

结论:要用在生产上的 Linux 发行版,莫要尝鲜。



还可以看看这些内容:

经典有效的日志监控邮件集中巡检 Linux 服务器

龙蜥 Anolis Linux 23 源代码编译安装 Dovecot


点个赞吧 ↓ 

原文始发于微信公众号(wavecn):openEuler 安装配置 Dovecot 邮件服务器排障

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月5日01:01:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   openEuler 安装配置 Dovecot 邮件服务器排障http://cn-sec.com/archives/2086072.html

发表评论

匿名网友 填写信息