前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
Postfix 简介
本教程将告诉您如何设置基本邮件服务器,并在此过程中教您一些关于 Postfix MTA(邮件传输代理)的知识。
Postfix 非常灵活。其架构基于一组接收电子邮件并将其传递给其他服务的服务的松散组合(如果您正在查看接收邮件,则服务如“smtp”位于接收外边缘,“local”和“virtual”位于传递外边缘)。Postfix 本身实现了接收、路由和传递邮件的核心要求,并依赖于第三方扩展来完成其余工作。
Postfix 有几百个配置参数。如果您想管理可靠地向大型组织交付业务需求的邮件服务器,您应该熟悉所有这些参数(man 5 postconf)。本教程本身将不足以使您成为一名称职的专业电子邮件管理员。但是,如果您想熟悉 postfix 或为自己和几个朋友设置邮件服务器,本教程及其后续教程将成为您的朋友。
Dovecot 简介
我不打算在 Dovecot 上花费太多的介绍词。Dovecot 也非常庞大(这是 dovecot 2 的维基),但我们只需要从 dovecot 中获取一小部分功能。
本文详细解释了几乎每个要设置的设置。如果您愿意,可以继续阅读解释 - 自担风险。
本教程假定(并使用)以下设置:
- Debian 7.1 wheezy x64_86
- Postfix 2.9.6-2
- dovecot 1:2.1.7-7
虽然任何基于 Debian 的操作系统都应该可以,但 Postfix 在许多版本中都在使用,包括 Postfix 1.x、Postfix 2.9 和 Postfix 2.10,它们具有一些相互不兼容的设置和功能 - 使用 Postfix 2.9,本教程并不是最新的。
本教程还假定您对以下几点有所了解:
-
您熟悉 GNU/Linux 命令行和 Debian 等 GNU/Linux 系统的一般布局和工作原理。
-
您的本地系统是 GNU/Linux 或相当兼容的(MinGW、Cygwin、Mac OS X、*BSD)。
-
您知道如何在 droplet 上获取 rootshell。
-
您知道如何在 Linux 上使用文本编辑器(例如 vim、nano、emacs 或标准编辑器
ed
)。
默认情况下,命令将从 droplet 上的 rootshell 输入,并且像在大多数其他 DigitalOcean 文章中一样,需要自定义的命令部分将被突出显示。
系统设置
要使您的 droplet 准备好成为邮件服务器,需要以下几个要素:
-
一个域名,假设为 “mydomain.com”
-
您的邮件服务器的主机名,假设为 “mail.mydomain.com”
-
适用于 “mail.mydomain.com” 的 SSL 证书
设置 SSL 证书
对于 SSL,您需要一个证书和一个私钥。在本教程中,我们将假设证书保存在 /etc/ssl/certs/mailcert.pem
,密钥保存在 /etc/ssl/private/mail.key
。确保密钥只能被 root 用户读取!
如何为您的网站和电子邮件设置 SSL 证书取决于您的网站结构和您使用的 CA(例如自签名、组织(子)CA 或商业 CA)。创建自签名测试证书就像执行以下命令一样简单:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem
然后在所有问题上按回车键以保留默认值。不要在生产环境中使用此证书!
大多数 CA 将要求您提交证书签名请求(CSR)。您可以像这样生成一个:
sudo openssl req -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out mailcert.csr
正确填写信息,如下所示:(请与您打算使用的 CA 确认 CSR 需要包含哪些信息)
(请注意,使用 subjectAltName
字段无法创建适用于多个域的证书,除非进行一些额外的工作 - 再次检查 CA 的文档!)
设置 DNS
您需要设置 DNS,其中包括一个指向邮件服务器 IP 的 A 记录和一个指向邮件服务器主机名的 MX 记录。
如果您使用 DigitalOcean 的 DNS,可以按照以下步骤进行设置:
- 进入 DigitalOcean 面板中的 “DNS” 区域
- 创建一个新的域名或选择之前创建的域名
- 点击右上角的 “添加记录” 按钮
- 添加一个 A 记录:
!添加 A 记录
- 再次点击 “添加记录” 并添加一个指向 A 记录的 MX 记录:
!添加 MX 记录
您可以在“主机名设置”和“DNS 技巧和窍门”文章中找到更多信息。
验证 DNS
DNS 需要一些时间在互联网上进行传播,但在几分钟后应该已经在您的 DNS 服务器上设置好了。您可以使用 dig 和 host 进行检查:
[root@yourbase] ~# dig MX mydomain.com +short @ns1.digitalocean.com
50 mail.mydomain.com.
[root@yourbase] ~# host mail.mydomain.com ns1.digitalocean.com
Using domain server:
Name: ns1.digitalocean.com
Address: 198.199.120.125#53
Aliases:mail.mydomain.com has address 82.196.9.119
Postfix
现在我们将设置 Postfix 来接收和传递本地用户的邮件。
软件包
Debian 上默认的 MTA 是 Exim。我们将卸载它!安装完 Postfix 后也会停止它,因为我们不希望它立即运行。
aptitude remove exim4 && aptitude install postfix && postfix stop
一个小插曲:Postfix 通过自身管理其守护进程,不需要服务(init.d)系统。postfix start、postfix stop 和 postfix reload 相当于 service postfix start、service postfix stop 和 service postfix reload。
Postfix 配置
Postfix 有两个主要的配置文件:main.cf,用于指定配置选项,和 master.cf,用于指定 Postfix 应该运行的服务。
首先,配置 master.cf 文件(位于 /etc/postfix/
)。添加一个额外的名为 “submission” 的 “smtpd” 实例,它将接收来自受信任客户端的邮件并将其传递给外部世界,但我们不允许其他任何人这样做。
为此,打开 master.cf(如果您想了解正在发生的事情,可以查看 man 5 master),取消注释 submission 配置并添加选项以启用 SASL:
submission inet n - - - - smtpd-o syslog_name=postfix/submission-o smtpd_tls_wrappermode=no-o smtpd_tls_security_level=encrypt-o smtpd_sasl_auth_enable=yes-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject-o milter_macro_daemon_name=ORIGINATING-o smtpd_sasl_type=dovecot-o smtpd_sasl_path=private/auth
这需要一点解释。-o ...
选项覆盖了从默认值中获取的设置,我们稍后会设置这些设置。
简而言之,这里启用了带有 TLS 的 “submission” 守护进程以保护外部连接,并使用 dovecot 中介的 SASL 来检查连接客户端的用户名和密码(我们稍后将在 dovecot 中设置)。
重要的细节是看不到的:smtpd_recipient_restrictions
缺少 reject_unauth_destination
,这是默认设置中存在的,用于限制中继。
然后我们转到 main.cf。我们将从头开始设置这里 - 如果您想保存默认配置文件(也在 /usr/share/postfix/main.cf.dist
中),可以运行 cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
,然后打开并清空它!
首先设置网络信息(关于 postfix 处理邮件的域和一些额外信息):
myhostname = mail.domain.com
myorigin = /etc/mailname
mydestination = mail.domain.com, domain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
我们设置主机名和默认来源,根据 Debian 约定,它源自 /etc/mailname。如果没有 /etc/mailname,您可以显式设置它。默认来源用于构建本地用户的“发件人”地址。mydestination 设置 postfix 接受邮件的最终目的地域,我们将 “relayhost” 设置为空以禁用中继邮件(中继意味着接受邮件,然后将其转发到不是邮件的最终目的地的邮件服务器,我们不需要这样做;这在企业内部网络中很有用,其中中央邮件服务器应在邮件离开网络之前检查邮件。)
*额外说明:这与术语“开放中继”无关,开放中继是指接受任何人发送的邮件而无需身份验证,并将其发送到不在其自己网络中的域的 MTA - 对此使用其他 relay_*
设置,我们将其保持默认并禁用)
现在设置本地别名映射。我们不必设置此设置,因为我们只是保留默认设置,但以后可能想要添加另一种定义别名映射的方法(例如真正的 DBMS):
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
然后设置 SSL:
smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3
我们设置证书文件和其密钥,启用 tls,并设置缓存文件。然后我们将 TLS 设置为可选,因为根据 RFC2487,我们不允许在公共 smtp 服务器上要求 TLS。我们还禁止 SSLv2 和 SSLv3,因此只允许 TLSv1.0 及更高版本(如果您想了解原因,请阅读 SSL 教程 - 简而言之,SSLv2 和 SSLv3 已经过时)。
另一个默认设置,但应该明确指定以便以后添加到它的是 local_recipient_maps:
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
此设置告诉 Postfix 检查查找表并拒绝发送到表中找不到的用户的邮件。这很重要,因为如果 local_recipient_maps
未设置,替代行为是首先接受邮件,然后稍后将其退回。这会导致“回溯”:如果 postfix 无法立即确定所有有效用户(在 smtpd 服务中),例如当 local_recipients_maps
未设置时,它将接受邮件,然后稍后发送不可投递通知(当它发现邮件在被 smtpd 交付后无法投递时)。这些不可投递通知通常会影响被欺骗的人,他们的地址被用于垃圾邮件和欺诈邮件,并加剧了垃圾邮件问题。
合理的别名配置
在您的别名配置中,有一些重要的邮件帐户需要设置。例如,SMTP RFC 规定,任何公共可访问的邮件服务器都必须接受任何邮件,并且必须接受发送到 “postmaster” 帐户的邮件,有些人可能期望 “hostmaster”、“abuse”、“webmaster” 和其他邮箱也存在。您可以将这些邮件地址重定向到 root 用户,或者到特定用户。以下是 /etc/aliases
的合理默认设置,假设您检查邮件的是 root:
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
如果您想将所有这些邮件重定向到特定的本地用户,比如 “yourname”,只需添加
root: yourname
Postfix 将为您解析所有这些别名链,并将所有这些邮件地址转发到 “yourname”。(这是由本地守护程序使用别名规范完成的。)
如 “aliases” 所述,在更新 /etc/aliases 文件后,您需要运行
newaliases
将文件编译成 Postfix 用于快速查找的数据库。
Dovecot
这部分将会少一些文字!深呼吸,我们快完成了。
软件包
aptitude install dovecot-core dovecot-imapd
应该就可以了。如果您想要所有默认软件包,运行
aptitude install dovecot-common
然后进入 /etc/dovecot/dovecot.conf
并清空文件。(这次很重要 - 默认配置包括 /etc/dovecot/conf.d
中的一堆从属配置文件,我们不需要)。
现在输入以下配置:
disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {driver = passwd
}
passdb {args = %sdriver = pam
}
protocols = " imap"
这将启用明文认证("明文"认证将通过 TLS 隧道传输),告诉 dovecot 使用 mail
系统组来访问本地邮箱(以及邮箱的位置),使用 Unix 认证系统来认证用户,并仅启用 imap。
如果您希望,您可以让 dovecot 自动向邮箱添加 Trash 和 Sent 文件夹:
protocol imap {mail_plugins = " autocreate"
}
plugin {autocreate = Trashautocreate2 = Sentautosubscribe = Trashautosubscribe2 = Sent
}
接下来,我们需要打开一个 socket,以便 postfix 可以利用 dovecot 的认证:
service auth {unix_listener /var/spool/postfix/private/auth {group = postfixmode = 0660user = postfix}
}
最后是 SSL 配置:
ssl=required
ssl_cert = </etc/ssl/certs/mailcert.pem
ssl_key = </etc/ssl/private/mail.key
注意尖括号!它们告诉 dovecot 从文件中读取。
结束
保存并关闭所有配置文件,并执行
newaliases
postfix start
service dovecot restart
然后您应该可以开始了。使用邮件客户端(例如 Mozilla Thunderbird)测试您的配置。您应该能够从任何地方发送和接收邮件!
继续
如果您想添加虚拟邮箱(不与本地用户帐户绑定,而是可以使用本地数据库进行配置的邮箱),请继续阅读第二部分。***
您现在可以测试双向发送电子邮件是否有效,在 droplet 的终端上:
~# mail someotheremail@gmail.com
Subject: test email from postfix
this is a test
.
EOT
来自 “root@yourdomain.com” 的邮件应该很快到达 “someotheremail@gmail.com”(填写您控制的电子邮件地址,显然)。如果您回复它并再次调用 mail,您应该会看到这个:(邮件可能需要一分钟才能到达)。
~# mail
Heirloom mailx version 12.5 6/20/10. Type ? for help.
"/var/mail/root": 1 message
>N 1 Your Name Wed Nov 13 23:45 41/1966 Re: test email from postf
如果您按下回车键,它将显示消息。(然后输入 q 并按下 Enter 以离开邮件客户端)
同样的事情也适用于本地邮件客户端。设置一个新的系统用户:
~# adduser joe
Adding user `joe' ...
Adding new group `joe' (1001) ...
Adding new user `joe' (1001) with group `joe' ...
Creating home directory `/home/joe' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 输入密码
Retype new UNIX password: 再次输入密码
passwd: password updated successfully
Changing the user information for joe
Enter the new value, or press ENTER for the defaultFull Name []:Room Number []:Work Phone []:Home Phone []:Other []:
Is the information correct? [Y/n] Y
您在这里输入的密码是用于电子邮件的密码。Joe 现在可以使用地址 joe@yourdomain.com
与 Thunderbird 等本地邮件客户端。在 Thunderbird 中,只需添加一个新帐户(File -> New -> Existing Mail Account
)并在对话框中输入 joe@yourdomain.com
和密码。
如果您的邮件客户端没有自动检测到必要的设置:IMAP 连接的用户名是 joe
,端口是 143,认证方法是通过 STARTTLS 的未加密密码。对于 SMTP 也是一样,但端口是 587。
如果有任何问题,请使用 tail -n 50 /var/log/syslog
检查系统日志中的错误消息,以及使用 tail -n 50 /var/log/mail.log
检查邮件日志中的错误消息。
提交者:Lukas Erlacher