9.2. 使用 LDAP 身份验证设置 Dovecot 服务器
如果您的基础架构使用 LDAP 服务器来存储帐户,您可以对其验证 Dovecot 用户。在这种情况下,您可以在目录中集中管理帐户,用户不需要对 Dovecot 服务器上的文件系统进行本地访问。
如果您计划使用复制设置多个 Dovecot 服务器,以使您的邮箱具有高可用性,则集中管理的帐户也是一个好处。
9.2.1. 安装 Dovecot
dovecot
软件包提供:
-
dovecot
服务以及维护它的工具 - Dovecot 按需启动的服务,如用于身份验证的服务
- 插件,如服务器端邮件过滤
-
/etc/dovecot/
目录中的配置文件 -
/usr/share/doc/dovecot/
目录中的文档
流程
安装
dovecot
软件包:# yum install dovecot
注意如果 Dovecot 已安装并且需要清理的配置文件,请重命名或删除
/etc/dovecot/
目录。之后,重新安装软件包。在删除配置文件的情况下,yum reinstall dovecot
命令不会重置/etc/dovecot/
中的配置文件。
后续步骤
9.2.2. 在 Dovecot 服务器上配置 TLS 加密
Dovecot 提供安全的默认配置。例如,默认启用 TLS 来传输通过网络加密的凭证和数据。要在 Dovecot 服务器上配置 TLS,您只需要将路径设置为证书和私钥文件。另外,您可以通过生成并使用 Diffie-Hellman 参数来提供完美转发保密(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)匹配。
流程
对私钥文件设置安全权限:
# 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
9.2.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
在单一
模式中使用 high-performantdbox
邮箱格式。在此模式中,服务将每个邮件存储在单独的文件中,类似于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
9.2.4. 使用 LDAP 作为 Dovecot 身份验证后端
LDAP 目录中的用户通常可以对自己的目录服务进行身份验证。Dovecot 可在登录到 IMAP 和 POP3 服务时使用此来验证用户。这个验证方法有很多优点,例如:
- 管理员可以集中管理目录中的用户。
- LDAP 帐户不需要任何特殊属性。它们只需要能够对 LDAP 服务器进行身份验证。因此,此方法独立于 LDAP 服务器上使用的密码存储方案。
- 用户不需要通过名称服务交换机(NSS)界面和可插拔验证模块(PAM)框架在服务器上本地可用。
先决条件
- 已安装了 Dovecot。
- 虚拟主机功能已配置。
- 连接到 LDAP 服务器支持 TLS 加密。
- Dovecot 服务器上的 RHEL 信任 LDAP 服务器的证书颁发机构(CA)证书。
- 如果用户存储在 LDAP 目录中的不同树中,则存在用于 Dovecot 的专用 LDAP 帐户来搜索目录。此帐户需要搜索其他用户的可辨识名称(DN)的权限。
流程
在
/etc/dovecot/conf.d/10-auth.conf
文件中配置身份验证后端:注释掉您不需要的
auth-*.conf.ext
身份验证后端配置文件的include
语句,例如:#!include auth-system.conf.ext
通过取消注释 LDAP 身份验证来启用 LDAP 身份验证:
!include auth-ldap.conf.ext
编辑
/etc/dovecot/conf.d/auth-ldap.conf.ext
文件,并按如下所示将override_fields
参数添加到userdb
部分:userdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf.ext override_fields = uid=vmail gid=vmail home=/var/mail/%n/ }
由于固定值,Dovecot 不会从 LDAP 服务器查询这些设置。因此,这些属性还必须存在。
使用以下设置创建
/etc/dovecot/dovecot-ldap.conf.ext
文件:根据 LDAP 结构,配置以下之一:
如果用户存储在 LDAP 目录中的不同树中,请配置动态 DN 查找:
dn = cn=dovecot_LDAP,dc=example,dc=com dnpass = password pass_filter = (&(objectClass=posixAccount)(uid=%n))
Dovecot 使用指定的 DN、密码和过滤器在目录中搜索身份验证用户的 DN。在此搜索中,Dovecot 将过滤器中的
%n
替换为用户名。请注意,LDAP 搜索必须只返回一个结果。如果所有用户存储在特定条目下,请配置 DN 模板:
auth_bind_userdn = cn=%n,ou=People,dc=example,dc=com
启用到 LDAP 服务器的身份验证绑定以验证 Dovecot 用户:
auth_bind = yes
将 URL 设置为 LDAP 服务器:
uris = ldaps://LDAP-srv.example.com
为安全起见,请只使用使用 LDAPS 的加密连接,或通过 LDAP 协议使用
STARTTLS
命令。对于后者,在设置中添加tls = yes
。对于正常工作的证书验证,LDAP 服务器的主机名必须与其 TLS 证书中使用的主机名匹配。
启用 LDAP 服务器的 TLS 证书的验证:
tls_require_cert = hard
将基本 DN 设置为要开始搜索用户的 DN:
base = ou=People,dc=example,dc=com
设置搜索范围:
scope = onelevel
Dovecot 仅在指定基本 DN 和
子树
范围内搜索一个级别范围
。
对
/etc/dovecot/dovecot-ldap.conf.ext
文件设置安全权限:# chown root:root /etc/dovecot/dovecot-ldap.conf.ext # chmod 600 /etc/dovecot/dovecot-ldap.conf.ext
后续步骤
其它资源
-
/usr/share/doc/dovecot/example-config/dovecot-ldap.conf.ext
-
/usr/share/doc/dovecot/wiki/UserDatabase.Static.txt
-
/usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.txt
-
/usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.AuthBinds.txt
-
/usr/share/doc/dovecot/wiki/AuthDatabase.LDAP.PasswordLookups.txt
9.2.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 并读取电子邮件。邮件客户端的设置取决于您要使用的协议:
表 9.2. 连接设置到 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)
手册页