在网络或 Internet 上从一个人得到邮件给另一个人的处理过程包含许多系统的协同工作。这些系统中的每一个都必须配置正确以便可以正常工作。发送者使用一个 邮件用户代理 (MUA),或邮件客户端通过一个或多个 邮件传输代理 (MTA) 来发送信息,最后一个将信息送到 邮件投递代理 (MDA) 以便将其投递到接受者的收件箱中。该信息将会被接受者邮件客户端检索到,通常是通过 POP3 或 IMAP 服务器。
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 作为您的邮件服务器的主机名。
下一步是为 postfix 的 SMTP AUTH 配置使用 SASL。与其直接编辑配置,不如使用 postconf 命令配置所有 postfix 参数。配置参数被保存在 /etc/postfix/main.cf
文件中。如果您希望更新配置一项参数,您可以运行命令或手工在文件中修改。
配置 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' echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf
接下来为 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 3650 -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 mv smtpd.key /etc/ssl/private/ mv smtpd.crt /etc/ssl/certs/ mv cakey.pem /etc/ssl/private/ mv cacert.pem /etc/ssl/certs/
您可以从证书颁发机构得到数字证书。或者您可以创建您自己的证书。详情参考 “创建一个自己签署的证书”一节。
配置 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 认证。
libsasl2、sasl2-bin 和 libsasl2-modules 对于使用 SASL 的 SMTP AUTH 是必需的。如果您没有安装它们的话,您可以安装这些应用程序。
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
Exim4 是另一个由剑桥大学开发的用于连接 Internet 的 Unix 系统上的消息传输代理 (MTA)。安装Exim可以代替 sendmail,虽然 exim 的配置与 sendmail 是非常不同。
要配置 exim4,运行下列命令:
sudo dpkg-reconfigure exim4-config
用户界面将显示。该用户界面让您配置许多参数。例如,在 exim4 中配置文件被分成多个文件。如果您希望将它们放在一个文件中,您可以根据该用户界面进行配置。
您在用户界面配置的所有参数被保存在 /etc/exim4/update-exim4.conf.conf
文件。如果您希望重新配置,您可以重新运行配置向导或用您喜欢的编辑器手工编辑该文件。一旦您配置好了,您可以运行下列命令来生成主配置文件:
sudo update-exim4.conf
生成主配置文件且被保存在 /var/lib/exim4/config.autogenerated
.
在任何时候,你都不要手工编辑主配置文件 /var/lib/exim4/config.autogenerated
。它在每次您运行 update-exim4.conf 之后会自动更新。
您可以运行下列命令以启动 exim4 守护程序。
sudo /etc/init.d/exim4 start
TODO: 该内容将覆盖 exim4 的 SMTP AUTH 配置。
Dovecot 是一个主要出于安全考虑编写的邮件投递代理。它支持主要收件箱格式:mbox 或 Maidir。这部分说明如何将它设为一个 imap 或 pop3 服务器。
要配置 dovecot,您可以编辑文件 /etc/dovecot/dovecot.conf
。您可以选择您所使用的协议。它可以是 pop3、pop3 (安全 pop3)、imap 和 imaps (安全 imap)。对这些协议的说明是超出该指南范围的。更多信息请参考 wikipedia 关于 POP3 和 IMAP 的文章。
IMAPS 和 POP3S 比简单 IMAP 和 POP3 更安全,因为他们使用 SSL 加密连接。一旦您选择了协议,修改在文件 /etc/dovecot/dovecot.conf
中的下列行:
protocols = pop3 pop3s imap imaps
当 dovecot 启动时协议开始生效。接下来在文件 /etc/dovecot/dovecot.conf
的 pop3 部分添加下列行:
pop3_uidl_format = %08Xu%08Xv
。然后选择您所用的收件箱。Dovecot 支持 maildir 和 mbox 格式。大多数通常使用 mailbox 格式。它们都有自己的优点,并且在 dovecot 网站 上讨论。
一旦您选择了您的收件箱格式后,就可以编辑文件 /etc/dovecot/dovecot.conf
并修改下列行:
default_mail_env = maildir:~/Maildir # (for maildir) 或 default_mail_env = mbox:~/mail:INBOX=/var/spool/mail/%u # (for mbox)
如果接收到的邮件类型与您已经配置不同,那么您要配置您的邮件传输代理 (MTA) 用来将该邮件传输到这种类型的收件箱中。
一旦您已经配置好了 dovecot,启动 dovecot 守护程序以测试您的设置:
sudo /etc/init.d/dovecot start
如果您启用 imap 或 pop3,您也可以试着用命令 telnet localhost pop3 或 telnet localhost imap2 登录。如果您看到类似下面的东西,那么安装就成功了:
bhuvan@rainbow:~$ telnet localhost pop3 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK Dovecot ready.
要配置 dovecot 使用 SSL,您可以编辑文件 /etc/dovecot/dovecot.conf
并修改下列行:
ssl_cert_file = /etc/ssl/certs/dovecot.pem ssl_key_file = /etc/ssl/private/dovecot.pem ssl_disable = no disable_plaintext_auth = no
当您安装 dovecot 时,会通过它自动创建 cert 和 key 文件。请注意这些钥匙没被签名并会在客户端连接时给出 "bad signature" 的错误。要避免这一点,您可以使用商业证书,甚至更好,使用您自己签署的 SSL 证书。
Mailman 是一个管理电子邮件讨论及电子通讯列表的开源程序。许多开源的邮件列表 (包括所有的 Ubuntu 邮件列表)使用 Mailman 作为他们的邮件列表软件。它是强大的且易于安装和维护。
Mailman 为管理员和用户提供一个 web 界面。因此,它要求 apache 要有 mod_perl 的支持。Mailman 使用外部邮件服务器来发送和接收邮件。它可以与下列邮件服务器很好的工作:
Postfix
Exim
Sendmail
Qmail
我们将看到如何安装 mailman、apache web 服务器和 Exim 邮件服务器。如果您希望安装 mailman 和一个不同的邮件服务器,请参考参考部分。
要安装 apache2 您可以参考 “安装”一节。
要安装 Exim4 您可以在终端提示符后运行下列命令:
↵ sudo apt-get install exim4↵ sudo apt-get install exim4-base↵ sudo apt-get install exim4-config↵
一旦安装好 exim4,配置文件被保存在 /etc/exim4
目录中。缺省情况下,在 ubuntu 中,exim4 配置文件被分成不同的文件。您可以通过配置 /etc/exim4/update-exim4.conf
中的下列变量来改变这一现状:
dc_use_split_config='true'
本节假定您已经成功安装 mailman、apache2 和exim4。现在您只需要配置它们。
一旦 apache2 安装之后,您可以在 /etc/apache2/apache2.conf
文件添加下列行:
Alias /images/mailman/ "/usr/share/images/mailman/" Alias /pipermail/ "/var/lib/mailman/archives/public/"
Mailman 使用 apache2 来运行它的 CGI 脚本。mailman 的 CGI 脚本被安装在 /usr/lib/cgi-bin/mailman 目录中。因此 mailman 的 url 将是 http://hostname/cgi-bin/mailman/。如果您希望改变这一状况,您可以修改 /etc/apache2/apache2.conf
文件。
一旦 Exim4 安装之后,您可以在终端提示符后使用下列命令启动 Exim 服务器:
↵
sudo apt-get /etc/init.d/exim4 start↵
为了使 mailman 可以和 exim4 一起工作,您需要配置 exim4。正如先前所说的那样,在缺省状态下 exim4 使用不同类型的多个配置文件。详情请参考 Exim 网站。要运行 mailman,我们可以新建一个配置文件到下列配置类型:
主
传输
路由器
Exim 按这些小的配置文件顺序创建出一个主配置文件。因此这些配置文件的顺序是非常重要的。
所有隶属于主类别的配置文件都被保存在 /etc/exim4/conf.d/main/
目录中。您可以将下面的内容添加到一个名为 04_exim4-config_mailman
的新文件中:
↵ # start↵ # Home dir for your Mailman installation -- aka Mailman's prefix↵ # directory.↵ # On Ubuntu this should be "/var/lib/mailman"↵ # This is normally the same as ~mailman↵ MM_HOME=/var/lib/mailman↵ #↵ # User and group for Mailman, should match your --with-mail-gid↵ # switch to Mailman's configure script. Value is normally "mailman"↵ MM_UID=list↵ MM_GID=list↵ #↵ # Domains that your lists are in - colon separated list↵ # you may wish to add these into local_domains as well↵ domainlist mm_domains=hostname.com↵ # # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # # These values are derived from the ones above and should not need # editing unless you have munged your mailman installation # # The path of the Mailman mail wrapper script MM_WRAP=MM_HOME/mail/mailman # # The path of the list config file (used as a required file when # verifying list addresses) MM_LISTCHK=MM_HOME/lists/${lc::$local_part}/config.pck # end
所有隶属于传输类型的文件被保存在 /etc/exim4/conf.d/transport/
目录中。您可以将下面的内容添加到一个名为 40_exim4-config_mailman
的新文件中:
mailman_transport: driver = pipe command = MM_WRAP \ '${if def:local_part_suffix \ {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \ {post}}' \ $local_part current_directory = MM_HOME home_directory = MM_HOME user = MM_UID group = MM_GID
所有隶属于路由类的所有配置文件都被保存在 /etc/exim4/conf.d/router/
目录中。您可以将下列内容添加到名为 101_exim4-config_mailman
的新文件中:
mailman_router: driver = accept require_files = MM_HOME/lists/$local_part/config.pck local_part_suffix_optional local_part_suffix = -bounces : -bounces+* : \ -confirm+* : -join : -leave : \ -owner : -request : -admin transport = mailman_transport↵
主类和传输类的配置文件的顺序可以随意。但路由类的配置文件的顺序必须相同。该文件必须在 200_exim4-config_primary 文件之前出现。如果两个配置文件包含相同类型的信息。第一个文件优先。详情请参阅参考部分。
安装 mailman 之后,您可以使用下列命令来运行它:
sudo /etc/init.d/mailman start
一旦 mailman 安装,您必须创建缺省的邮件列表。运行下列命令以创建邮件列表:
sudo /usr/sbin/newlist mailman
Enter the email address of the person running the list: bhuvan at ubuntu.com
Initial mailman password:
To finish creating your mailing list, you must edit your /etc/aliases
(or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:
## mailman mailing list
mailman: "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman"
↵
Hit enter to notify mailman owner...
#
我们已经把 exim 配置成可以识别所有来自 mailman 的邮件。因此并不需要在 /etc/aliases
中添加任何新的条目。如果您对配置文件做了改动,请确保您在进入下一章节之前重启了这些服务。
我们假定您已经进行了缺省安装。mailman 的 cgi 脚本应该在 /usr/lib/cgi-bin/mailman/ 目录中。Mailman 提供了一个基于 web 管理工具。可以在您的浏览器输入下列 url 访问该页:
http://hostname/cgi-bin/mailman/admin
缺省的邮件列表 mailman 将出现在屏幕上。如果您点击邮件列表名,它将询问您的认证密码。如果您输入了正确的密码,您将可以改变该邮件列表的管理设置。您可以使用命令行工具 (/usr/sbin/newlist) 创建一个新的邮件列表,您也可以使用 web 界面来创建新的邮件列表。
Mailman 为用户提供了一个 web 界面,可以在您的浏览器中输入下列 url 来访问该页:
http://hostname/cgi-bin/mailman/listinfo
缺省邮件列表 mailman 将出现在屏幕上。如果您点击邮件列表名,它将显示订阅表单。您可以输入您的邮件地址、姓名 (可选)及密码来订阅。一个邀请邮件将发送给您。您可以根据该邮件的指示完成订阅。