微信订阅号二维码

本页网址二维码:

本栏目热门内容
  • Acrobat虚拟PDF打印机执行...
  • LINKSYS交换机登录WEB界面...
  • 又一次RAID 5阵列故障记录...
  • 解决VMware vSphere ESXi ...
  • 修改CentOS发行信息以绕过...
  • 解决虚拟化运行的 Windows...
  • Windows Server 2008 重命...
  • Intel Nehalem CPU Errata...
  • 一次很精神的电脑组装过程...
  • 解决MySQL Cluster 备份总...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的...
  • 解决 VMWare vSphere 6 客...
  • 解决Windows Server 2008 ...
  • 本站服务器RAID 5阵列双硬...
  • 网站数据库从MySQL 5.0升...
  • 解决MariaDB使用Percona X...
  • Linux 下的分区调整工具GP...
  • DELL PowerEdge 820 报CPU...
  • 修改arpwatch使通知邮件主...
  • 程序员漫画:如何用8种不...
  • 解决很好用的多合一即时通...
  • 解决Samba WINS服务的错误...
  • 使用 GParted 进行虚拟机...
  • 解决Squid代理HTTP时在浏...
  • 用Delphi编写使用到ADO的D...
  • 网站简单改版
  • 索尼系列手提电脑备份失败...
  • Dell R900服务器 BMC firm...
  • 更多...

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

    作者:Sender  来源:本站  发布日期:2023-10-05  最后修改日期:2023-10-05

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

    article banner

    笔者背景: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=
    

    表面上看,原因是邮件客户端软件 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 服务器就主动断了连接:

    1 dovecot rst connection

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

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

    2-cipher-17.png

     

    3-group-6.png

     

    4-sign-13.png

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

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

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

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

    5-openeuler-current-policy.png

    其中,有几个关键项目:

    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 发行版,莫要尝鲜。

    本栏目相关
  •  2010-01-25 Linux 下的分区调整工具GParted实战
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2022-02-25 Linux 软路由网络吞吐优化设置
  •  2022-12-12 Linux Kernel 日志排错分析和处置三例
  •  2023-02-01 安装MegaRAID存储管理器17.05.06版的好一番折腾(Linux篇)
  •  2023-02-08 Linux有什么工具能自动清理释放存储空间?
  •  2023-06-25 Linux 单臂软路由设置及流量监控ntopng避坑
  •  2023-10-05 openEuler 安装配置 Dovecot 邮件服务器排障