第 1 章 配置和维护 Dovecot IMAP 和 POP3 服务器
Dovecot 是一个高性能邮件发送代理(MDA),专注于安全性。您可以使用 IMAP 或 POP3 兼容电子邮件客户端连接到 Dovecot 服务器,并读取或下载电子邮件。
Dovecot 的主要特性:
- 设计和实施侧重于安全性
- 对高可用性的双向复制支持以提高大型环境中的性能
-
支持高性能
dbox
邮箱格式,但出于兼容性的原因,也支持mbox
和Maildir
- 自我修复功能,如修复有问题的索引文件
- 遵守 IMAP 标准
- 临时解决方案支持绕过 IMAP 和 POP3 客户端中的 bug
1.1. 建立具有 PAM 验证的 Dovecot 服务器
Dovecot 支持名称服务交换机(NSS)接口作为用户数据库,以及可插拔验证模块(PAM)框架作为身份验证后端。使用这个配置,Dovecot 可以通过 NSS 为服务器上的本地用户提供服务。
以下帐户使用 PAM 身份验证:
-
在
/etc/passwd
文件中本地定义的 - 存储在远程数据库中,但可以通过系统安全服务守护进程(SSSD)或其他 NSS 插件在本地提供。
1.1.1. 安装 Dovecot
dovecot
软件包提供:
-
dovecot
服务以及维护它的工具 - Dovecot 按需启动的服务,如用于身份验证
- 插件,如服务器端的邮件过滤
-
/etc/dovecot/
目录中的配置文件 -
/usr/share/doc/dovecot/
目录中的文档
流程
安装
dovecot
软件包:# dnf install dovecot
注意如果 Dovecot 已安装,并且需要清理配置文件,请重命名或删除
/etc/dovecot/
目录。之后,重新安装软件包。在不删除配置文件的情况下,dnf reinstall dovecot
命令不会重置/etc/dovecot/
中的配置文件。
后续步骤
1.1.2. 在 Dovecot 服务器上配置 TLS 加密
Dovecot 提供一个安全的默认配置。例如,默认启用 TLS 通过网络来传输加密的凭证和数据。要在 Dovecot 服务器上配置 TLS,您只需设置证书和私钥文件的路径。另外,您可以通过生成并使用 Diffie-Hellman 参数来提供 perfect forward secrecy(PFS)来提高 TLS 连接的安全性。
先决条件
- Dovecot 已安装。
以下文件已复制到服务器上列出的位置:
-
服务器证书:
/etc/pki/dovecot/certs/server.example.com.crt
-
私钥:
/etc/pki/dovecot/private/server.example.com.key
-
证书颁发机构(CA)证书:
/etc/pki/dovecot/certs/ca.crt
-
服务器证书:
-
服务器证书
Subject DN
字段中的主机名与服务器的完全限定域名(FQDN)匹配。 - 如果服务器运行 RHEL 9.2 或更高版本,并且启用了 FIPS 模式,则客户端必须支持 Extended Master Secret(EMS)扩展或使用 TLS 1.3。没有 EMS 的 TLS 1.2 连接会失败。如需更多信息,请参阅 强制 TLS 扩展"Extended Master Secret" 知识库文章。
流程
对私钥文件设置安全权限:
# chown root:root /etc/pki/dovecot/private/server.example.com.key # chmod 600 /etc/pki/dovecot/private/server.example.com.key
使用 Diffie-Hellman 参数生成文件:
# openssl dhparam -out /etc/dovecot/dh.pem 4096
根据服务器上的硬件和熵,生成 4096 位的 Diffie-Hellman 参数可能需要几分钟。
在
/etc/dovecot/conf.d/10-ssl.conf
文件中设置证书和私钥文件的路径:更新
ssl_cert
和ssl_key
参数,并将其设置为使用服务器的证书和私钥的路径:ssl_cert = </etc/pki/dovecot/certs/server.example.com.crt ssl_key = </etc/pki/dovecot/private/server.example.com.key
取消
ssl_ca
参数的注释,并将其设置为使用 CA 证书的路径:ssl_ca = </etc/pki/dovecot/certs/ca.crt
取消
ssl_dh
参数的注释,并将其设置为使用 Diffie-Hellman 参数文件的路径:ssl_dh = </etc/dovecot/dh.pem
重要为确保 Dovecot 从文件中读取参数的值,该路径必须以
<
字符开头。
后续步骤
其他资源
-
/usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt
1.1.3. 准备 Dovecot 以使用虚拟用户
默认情况下,Dovecot 以使用服务的用户的身份对文件系统执行许多操作。但是,将 Dovecot 后端配置为使用一个本地用户来执行这些操作有以下几点好处:
- Dovecot 以特定的本地用户身份执行文件系统操作,而不使用用户的 ID (UID)。
- 用户不需要在服务器上本地提供。
- 您可以将所有邮箱和特定于用户的文件存储在一个根目录中。
- 用户不需要 UID 和组 ID (GID),这可以减少管理工作。
- 有权访问服务器上文件系统的用户无法破坏其邮箱或索引,因为它们无法访问这些文件。
- 设置复制很简单。
先决条件
- Dovecot 已安装。
流程
创建
vmail
用户:# useradd --home-dir /var/mail/ --shell /usr/sbin/nologin vmail
Dovecot 之后将使用此用户来管理邮箱。出于安全考虑,请不要为此使用
dovecot
或dovenull
系统用户。如果您使用与
/var/mail/
不同的路径,请对其设置mail_spool_t
SELinux 上下文,例如:# semanage fcontext -a -t mail_spool_t "<path>(/.*)?" # restorecon -Rv <path>
仅将
/var/mail/
的写权限授予vmail
用户:# chown vmail:vmail /var/mail/ # chmod 700 /var/mail/
取消
/etc/dovecot/conf.d/10-mail.conf
文件中mail_location
参数的注释,并将其设置为 mailbox 格式和位置:mail_location = sdbox:/var/mail/%n/
使用这个设置:
-
Dovecot 在
single
模式下使用高性能dbox
邮箱格式。在此模式下,服务将每个邮件存储在单独的文件中,类似于maildir
格式。 -
Dovecot 将路径中的
%n
变量解析为用户名。这需要确保每个用户对其邮箱都有一个单独的目录。
-
Dovecot 在
后续步骤
其他资源
-
/usr/share/doc/dovecot/wiki/VirtualUsers.txt
-
/usr/share/doc/dovecot/wiki/MailLocation.txt
-
/usr/share/doc/dovecot/wiki/MailboxFormat.dbox.txt
-
/usr/share/doc/dovecot/wiki/Variables.txt
1.1.4. 使用 PAM 作为 Dovecot 身份验证后端
默认情况下,Dovecot 使用名称服务交换机(NSS)接口作为用户数据库,使用可插拔验证模块(PAM)框架作为身份验证后端。
自定义设置,以使 Dovecot 适应您的环境,并使用虚拟用户功能简化管理。
先决条件
- Dovecot 已安装。
- 虚拟用户功能已配置。
流程
更新
/etc/dovecot/conf.d/10-mail.conf
文件中的first_valid_uid
参数,以定义可以验证到 Dovecot 的最低用户 ID (UID):first_valid_uid = 1000
默认情况下,UID 大于或等于
1000
的用户可以进行身份验证。如果需要,您也可以设置last_valid_uid
参数,以定义 Dovecot 允许登录的最高 UID。在
/etc/dovecot/conf.d/auth-system.conf.ext
文件中,将override_fields
参数添加到userdb
部分,如下所示:userdb { driver = passwd override_fields = uid=vmail gid=vmail home=/var/mail/%n/ }
由于值固定,Dovecot 不会从
/etc/passwd
文件查询这些设置。因此,/etc/passwd
中定义的主目录不需要存在。
后续步骤
其他资源
-
/usr/share/doc/dovecot/wiki/PasswordDatabase.PAM.txt
-
/usr/share/doc/dovecot/wiki/VirtualUsers.Home.txt
1.1.5. 完成 Dovecot 配置
安装和配置 Dovecot 后,在 firewalld
服务中打开所需的端口,然后启用并启动服务。之后,您可以测试服务器。
先决条件
在 Dovecot 中已配置了以下内容:
- TLS 加密
- 身份验证后端
- 客户端信任证书颁发机构(CA)证书。
流程
如果您只想向用户提供 IMAP 或 POP3 服务,请取消
/etc/dovecot/dovecot.conf
文件中protocols
参数的注释,并将其设置为所需的协议。例如,如果您不需要 POP3,请设置:protocols = imap lmtp
默认情况下启用
imap
、pop3
和lmtp
协议。在本地防火墙中打开端口。例如,要为 IMAPS、IMAP、POP3S 和 POP3 协议打开端口,请输入:
# firewall-cmd --permanent --add-service=imaps --add-service=imap --add-service=pop3s --add-service=pop3 # firewall-cmd --reload
启用并启动
dovecot
服务:# systemctl enable --now dovecot
验证
使用 Mozilla Thunderbird 等邮件客户端连接到 Dovecot ,并读取电子邮件。邮件客户端的设置取决于您要使用的协议:
表 1.1. 到 Dovecot 服务器的连接设置 协议 端口 连接安全性 身份验证方法 IMAP
143
STARTTLS
PLAIN[a]
IMAPS
993
SSL/TLS
PLAIN[a]
POP3
110
STARTTLS
PLAIN[a]
POP3S
995
SSL/TLS
PLAIN[a]
[a] 客户端通过 TLS 连接传输加密的数据。因此,凭证不会被披露。请注意,这个表不会列出未加密连接的设置,因为默认情况下,Dovecot 在没有 TLS 的连接上不接受纯文本身份验证。
显示具有非默认值的配置设置:
# doveconf -n
其他资源
-
firewall-cmd(1)
手册页