Postfix

Postfix 是 Ubuntu 中缺省的邮件传输代理 (MTA)。它试图变得快捷、易于管理和安全。它与 MTA sendmail 兼容。这部分内容说明如何安装和配置 postfix。还说明如何将它设置成使用安全连接的 SMTP 服务器 (为了安全发送邮件)。

安装

要安装带有 SMTP-AUTH 和 传输层安全 (TLS) 的 postfix,运行下列命令:

sudo apt-get install postfix

当安装进程提问时简单地按回车,下面将详细说明相关配置。

基本配置

要配置 postfix,运行下列命令:

sudo dpkg-reconfigure postfix

用户界面将显示。在每一屏中,选择下列值:

  • Ok

  • Internet 站点

  • NONE

  • mail.example.com

  • mail.example.com, localhost.localdomain, localhost

  • No

  • 127.0.0.0/8

  • Yes

  • 0

  • +

  • 全部

[注意]

将 mail.example.com 替换成您的邮件服务器的主机名。

SMTP 认证

下一步是为 postfix 的 SMTP AUTH 配置使用 SASL。与其直接编辑配置,不如使用 postconf 命令配置所有 postfix 参数。配置参数被保存在 /etc/postfix/main.cf 文件中。如果您希望更新配置一项参数,您可以运行命令或手工在文件中修改。

  1. 配置 Postfix 使用 SASL (saslauthd) 进行 SMTP AUTH:

    postconf -e 'smtpd_sasl_local_domain ='
    postconf -e 'smtpd_sasl_auth_enable = yes'
    postconf -e 'smtpd_sasl_security_options = noanonymous'
    postconf -e 'broken_sasl_auth_clients = yes'
    postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
    postconf -e 'inet_interfaces = all'
    

    打开文件 /etc/postfix/sasl/smtpd.conf 并将以下内容加入文件末尾:

    pwcheck_method: saslauthd
    mech_list: plain login
    
  2. 接下来,为 TLS 配置数字认证。当被询问问题时,请根据指示并作出适当的回答。

    openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
    chmod 600 smtpd.key
    openssl req -new -key smtpd.key -out smtpd.csr
    openssl x509 -req -days 365 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
    openssl rsa -in smtpd.key -out smtpd.key.unencrypted
    mv -f smtpd.key.unencrypted smtpd.key
    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    sudo mv smtpd.key /etc/ssl/private/
    sudo mv smtpd.crt /etc/ssl/certs/
    sudo mv cakey.pem /etc/ssl/private/
    sudo mv cacert.pem /etc/ssl/certs/
    
    [注意]

    您可以从某个认证机构获取数字证书。或者,您也可以自己创建证书。详情请参照 创建一个自签名的证书 子章节。

  3. 配置 Postfix 对接收或发送邮件进行 TLS 加密:

    postconf -e 'smtpd_tls_auth_only = no'
    postconf -e 'smtp_use_tls = yes'
    postconf -e 'smtpd_use_tls = yes'
    postconf -e 'smtp_tls_note_starttls_offer = yes'
    postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key'
    postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt'
    postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
    postconf -e 'smtpd_tls_loglevel = 1'
    postconf -e 'smtpd_tls_received_header = yes'
    postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
    postconf -e 'tls_random_source = dev:/dev/urandom'
    postconf -e 'myhostname = mail.example.com'
    
[注意]

在您运行所有命令之后,postfix 的 SMTP AUTH 将被配置。将为 TLS 创建自己签署的证书并与 postfix 一起配置。

现在文件 /etc/postfix/main.cf 看上去就象 这样

postfix 初始配置完成。运行下列命令以开始 postfix 守护程序:

          
            sudo /etc/init.d/postfix start
          
        

现在 postfix 已经被安装、配置及成功运行。Postfix 支持在 RFC2554 中定义的 SMTP AUTH。它基于 SASL。无论如何在您使用 SMTP 之前必须设置 SASL 认证。

配置 SASL

要使 SMTP AUTH 能够使用 SASL 的话,libsasl2sasl2-binlibsasl2-modules 是必需的。如果您还没有安装它们的话现在就可以安装了。

sudo apt-get install libsasl2 sasl2-bin

要让其正常工作的话做一些改动是必须的。因为 Postfix 是被 chroot 在 /var/spool/postfix 中运行,SASL 需要被配置在假根目录中运行 (从 /var/run/saslauthd/var/spool/postfix/var/run/saslauthd):

mkdir -p /var/spool/postfix/var/run/saslauthd
rm -rf /var/run/saslauthd

要激活 saslauthd,编辑文件 /etc/default/saslauthd,并修改或添加 START 变量。为了将 saslauthd 配置成在假根目录中运行,添加 PWDIR、PIDFILE 和 PARAMS 变量。最终,随您所好配置 MECHANISMS 变量。该文件看起来象这样:

# This needs to be uncommented before saslauthd will be run
# automatically
START=yes

PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"

# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"

MECHANISMS="pam"
[注意]

如果您喜欢,您可以使用 shadow 代替 pam。这将使用 MD5 哈希密码传输并更为安全。需要认证的用户名和密码将是您正在服务器上使用系统的那些用户。

接下来更新 /var/spool/portfix/var/run/saslauthd 的 dpkg "state"。saslauthd 初始化脚本将使用该设置来创建有着适当权限和所有权的目录:

dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd

测试

SMTP AUTH 配置完成。现在是启动并测试设置的时候了。您可以运行下列命令来启动 SASL 守护程序:

          
            sudo /etc/init.d/saslauthd start
          
        

要查看 SMTP-AUTH 和 TLS 是否正常工作,运行下列命令:

          
            telnet mail.example.com 25
          
        

在您建立到 postfix 邮件服务器连接之后,输入:

ehlo mail.example.com

如果您看到包括下列行时,那么一切工作正常。输入 quit 退出。

250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME