10.3. 将 Postfix 配置为使用 SASL

Postfix 支持基于简单身份验证和安全层 (SASL) 的 SMTP 身份验证 (AUTH)。SMTP AUTH 是简单邮件传输协议的扩展。目前,Postfix SMTP 服务器通过以下方法支持 SASL 实现:

Dovecot SASL
Postfix SMTP 服务器可以使用 UNIX-domain 套接字或 TCP 套接字与 Dovecot SASL 实施通信。如果 Postfix 和 Dovecot 应用程序在独立的计算机上运行,则使用此方法。
Cyrus SASL
启用后,SMTP 客户端必须使用服务器和客户端支持并接受的身份验证方法与 SMTP 服务器进行身份验证。

先决条件

  • dovecot 软件包安装在系统中

流程

  1. 设置 Dovecot:

    1. /etc/dovecot/conf.d/10-master.conf 文件中包括以下行:

      service auth {
        unix_listener /var/spool/postfix/private/auth {
          mode = 0660
          user = postfix
          group = postfix
        }
      }

      前面的示例使用 UNIX-domain 套接字进行 Postfix 和 Dovecot 之间的通信。该示例还假定默认 Postfix SMTP 服务器设置,其中包括位于 /var/spool/postfix/ 目录中的邮件队列,以及在 postfix 用户和组下运行的应用。

    2. 可选:将 Dovecot 设置为通过 TCP 侦听 Postfix 验证请求:

      service auth {
        inet_listener {
            port = port-number
        }
      }
    3. 通过编辑 /etc/dovecot/conf.d/10-auth.conf 文件中的 auth_mechanisms 参数来指定电子邮件客户端用来通过 Dovecot 进行身份验证的方法:

      auth_mechanisms = plain login

      auth_mechanisms 参数支持不同的纯文本和非纯文本身份验证方法。

  2. 通过修改 /etc/postfix/main.cf 文件来设置 Postfix:

    1. 在 Postfix SMTP 服务器上启用 SMTP 身份验证:

      smtpd_sasl_auth_enable = yes
    2. 为 SMTP 身份验证启用 Dovecot SASL 实现:

      smtpd_sasl_type = dovecot
    3. 提供相对于 Postfix 队列目录的身份验证路径。请注意,使用相对路径可确保无论 Postfix 服务器是否在 chroot 中运行,配置都可以正常工作:

      smtpd_sasl_path = private/auth

      此步骤使用 UNIX-domain 套接字进行 Postfix 和 Dovecot 之间的通信。

      要将 Postfix 配置为在不同机器上查找 Dovecot,如果您使用 TCP 套接字进行通信,请使用类似如下的配置值:

      smtpd_sasl_path = inet: ip-address : port-number

      在上例中,将 ip-address 替换为 Dovecot 机器的 IP 地址,port-number 替换为 Dovecot 的 /etc/dovecot/conf.d/10-master.conf 文件中的端口号。

    4. 指定 Postfix SMTP 服务器可供客户端使用的 SASL 机制。请注意,您可以为加密和未加密的会话指定不同的机制。

      smtpd_sasl_security_options = noanonymous, noplaintext
      smtpd_sasl_tls_security_options = noanonymous

      以上指令指定在未加密的会话期间,不允许匿名身份验证,且不会允许传输未加密的用户名或密码的机制。对于使用 TLS 的加密会话,只允许非匿名身份验证机制。