搜索

9.3. 使用 MariaDB SQL 身份验证设置 Dovecot 服务器

download PDF

如果您将用户和密码存储在 MariaDB SQL 服务器中,您可以将 Dovecot 配置为将其用作用户数据库和身份验证后端。使用这个配置,您可以在数据库中集中管理帐户,用户对 Dovecot 服务器上的文件系统没有本地访问权限。

如果您计划使用复制设置多个 Dovecot 服务器,以使您的邮箱具有高可用性,则集中管理的帐户也是一个好处。

9.3.1. 安装 Dovecot

dovecot 软件包提供:

  • dovecot 服务以及维护它的工具
  • Dovecot 按需启动的服务,如用于身份验证的服务
  • 插件,如服务器端邮件过滤
  • /etc/dovecot/ 目录中的配置文件
  • /usr/share/doc/dovecot/ 目录中的文档

流程

  • 安装 dovecot 软件包:

    # yum install dovecot
    注意

    如果 Dovecot 已安装并且需要清理的配置文件,请重命名或删除 /etc/dovecot/ 目录。之后,重新安装软件包。在删除配置文件的情况下,yum reinstall dovecot 命令不会重置 /etc/dovecot/ 中的配置文件。

9.3.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)匹配。

流程

  1. 对私钥文件设置安全权限:

    # chown root:root /etc/pki/dovecot/private/server.example.com.key
    # chmod 600 /etc/pki/dovecot/private/server.example.com.key
  2. 使用 Diffie-Hellman 参数生成文件:

    # openssl dhparam -out /etc/dovecot/dh.pem 4096

    根据服务器上的硬件和熵,生成带有 4096 位的 Diffie-Hellman 参数可能需要几分钟。

  3. /etc/dovecot/conf.d/10-ssl.conf 文件中设置到证书和私钥文件的路径:

    1. 更新 ssl_certssl_key 参数,并将其设置为使用服务器的证书和私钥的路径:

      ssl_cert = </etc/pki/dovecot/certs/server.example.com.crt
      ssl_key = </etc/pki/dovecot/private/server.example.com.key
    2. 取消注释 ssl_ca 参数,并将其设置为使用 CA 证书的路径:

      ssl_ca = </etc/pki/dovecot/certs/ca.crt
    3. 取消注释 ssl_dh 参数,并将其设置为使用 Diffie-Hellman 参数文件的路径:

      ssl_dh = </etc/dovecot/dh.pem
    重要

    为确保 Dovecot 从文件中读取参数的值,该路径必须以前导 < 字符开头

其它资源

  • /usr/share/doc/dovecot/wiki/SSL.DovecotConfiguration.txt

9.3.3. 准备 Dovecot 以使用虚拟用户

默认情况下,Dovecot 以使用服务的用户身份对文件系统执行许多操作。但是,将 Dovecot 后端配置为使用一个本地用户来执行这些操作有以下几项优点:

  • Dovecot 以特定本地用户执行文件系统操作,而不使用用户的 ID (UID)。
  • 用户不需要在服务器上本地可用。
  • 您可以将所有邮箱和特定于用户的文件存储在一个根目录中。
  • 用户不需要 UID 和组 ID (GID),这可以减少管理工作。
  • 有权访问服务器上的文件系统的用户无法破坏其邮箱或索引,因为它们无法访问这些文件。
  • 设置复制更为简单。

先决条件

  • 已安装了 Dovecot。

流程

  1. 创建 vmail 用户:

    # useradd --home-dir /var/mail/ --shell /usr/sbin/nologin vmail

    Dovecot 之后将使用此用户来管理邮箱。出于安全考虑,请不要使用 dovecotdovenull 系统用户来实现这一目的。

  2. 如果您使用与 /var/mail/ 不同的路径,请在其上设置 mail_spool_t SELinux 上下文,例如:

    # semanage fcontext -a -t mail_spool_t "<path>(/.*)?"
    # restorecon -Rv <path>
  3. 仅将 /var/mail/ 的写入权限授予 vmail 用户:

    # chown vmail:vmail /var/mail/
    # chmod 700 /var/mail/
  4. 取消注释 /etc/dovecot/conf.d/10-mail.conf 文件中的 mail_location 参数,并将其设置为 mailbox 格式和位置:

    mail_location = sdbox:/var/mail/%n/

    使用这个设置:

    • Dovecot 在单一 模式中使用 high-performant dbox 邮箱格式。在此模式中,服务将每个邮件存储在单独的文件中,类似于 maildir 格式。
    • Dovecot 解析路径中的 %n 变量到用户名。这需要确保每个用户在其邮箱中都有单独的目录。

其它资源

  • /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.3.4. 使用 MariaDB SQL 数据库作为 Dovecot 身份验证后端

Dovecot 可以从 MariaDB 数据库读取帐户和密码,并在用户登录到 IMAP 或 POP3 服务时使用它来验证用户。这个验证方法的好处包括:

  • 管理员可以在数据库中集中管理用户。
  • 用户在服务器上没有本地访问权限。

先决条件

  • 已安装了 Dovecot。
  • 虚拟主机功能已配置。
  • 到 MariaDB 服务器的连接支持 TLS 加密。
  • MariaDB 中存在 dovecotDB 数据库,users 表至少包含 usernamepassword 列。
  • password 列包含使用 Dovecot 支持的方案加密的密码。
  • 密码可以使用相同的方案,或者具有 {pw-storage-scheme} 前缀。
  • dovecot MariaDB 用户对 dovecotDB 数据库中 users 表具有读取权限。
  • 发布 MariaDB 服务器的 TLS 证书的证书颁发机构(CA)的证书存储在 /etc/pki/tls/certs/ca.crt 文件中的 Dovecot 服务器上。

流程

  1. 安装 dovecot-mysql 软件包:

    # yum install dovecot-mysql
  2. /etc/dovecot/conf.d/10-auth.conf 文件中配置身份验证后端:

    1. 注释掉您不需要的 auth-*.conf.ext 身份验证后端配置文件的 include 语句,例如:

      #!include auth-system.conf.ext
    2. 通过取消注释以下行来启用 SQL 身份验证:

      !include auth-sql.conf.ext
  3. 编辑 /etc/dovecot/conf.d/auth-sql.conf.ext 文件,并将 override_fields 参数添加到 userdb 部分,如下所示:

    userdb {
      driver = sql
      args = /etc/dovecot/dovecot-sql.conf.ext
      override_fields = uid=vmail gid=vmail home=/var/mail/%n/
    }

    由于固定值,Dovecot 不会从 SQL 服务器查询这些设置。

  4. 使用以下设置创建 /etc/dovecot/dovecot-sql.conf.ext 文件:

    driver = mysql
    connect = host=mariadb_srv.example.com dbname=dovecotDB user=dovecot password=dovecotPW ssl_ca=/etc/pki/tls/certs/ca.crt
    default_pass_scheme = SHA512-CRYPT
    user_query = SELECT username FROM users WHERE username='%u';
    password_query = SELECT username AS user, password FROM users WHERE username='%u';
    iterate_query = SELECT username FROM users;

    要将 TLS 加密用于数据库服务器,请将 ssl_ca 选项设置为发布 MariaDB 服务器证书的 CA 的证书路径。对于正常工作的证书验证,MariaDB 服务器的主机名必须与其 TLS 证书中使用的主机名匹配。

    如果数据库中的密码值包含 {pw-storage-scheme} 前缀,您可以省略 default_pass_scheme 设置。

    文件中的查询必须设置如下:

    • 对于 user_query 参数,查询必须返回 Dovecot 用户的用户名。查询还必须只返回一个结果。
    • 对于 password_query 参数,查询必须返回用户名和密码,并且 Dovecot 必须使用 userpassword 变量中的这些值。因此,如果数据库使用不同的列名称,请使用 AS SQL 命令重命名结果中的列。
    • 对于 iterate_query 参数,查询必须返回所有用户的列表。
  5. /etc/dovecot/dovecot-sql.conf.ext 文件设置安全权限:

    # chown root:root /etc/dovecot/dovecot-sql.conf.ext
    # chmod 600 /etc/dovecot/dovecot-sql.conf.ext

后续步骤

其它资源

  • /usr/share/doc/dovecot/example-config/dovecot-sql.conf.ext
  • /usr/share/doc/dovecot/wiki/Authentication.PasswordSchemes.txt

9.3.5. 完成 Dovecot 配置

安装和配置 Dovecot 后,在 firewalld 服务中打开所需的端口,然后启用并启动该服务。之后,您可以测试服务器。

先决条件

  • 在 Dovecot 中配置了以下内容:

    • TLS 加密
    • 身份验证后端
  • 客户端信任证书颁发机构(CA)证书。

流程

  1. 如果您只想向用户提供 IMAP 或 POP3 服务,请取消 /etc/dovecot/dovecot.conf 文件中 protocols 参数的注释,并将其设为所需的协议。例如,如果您不需要 POP3,请设置:

    protocols = imap lmtp

    默认情况下启用 imappop3lmtp 协议。

  2. 在本地防火墙中打开端口。例如,要打开 IMAPS、IMAP、POP3S 和 POP3 协议的端口,请输入:

    # firewall-cmd --permanent --add-service=imaps --add-service=imap --add-service=pop3s --add-service=pop3
    # firewall-cmd --reload
  3. 启用并启动 dovecot 服务:

    # systemctl enable --now dovecot

验证

  1. 使用 Mozilla Thunderbird 等邮件客户端连接到 Dovecot 并读取电子邮件。邮件客户端的设置取决于您要使用的协议:

    表 9.3. 连接设置到 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 的连接中不接受纯文本身份验证。

  2. 使用非默认值显示配置设置:

    # doveconf -n

其它资源

  • firewall-cmd(1) 手册页
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.