在这个系列的文章中,我们将通过使用 postfix、dovecot 和 openssl 这三款工具来为你展示如何在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。
在这个容器和微服务技术日新月异的时代,值得庆幸的是有些事情并没有改变,例如搭建一个 linux 下的邮件服务器,仍然需要许多步骤才能间隔各种服务器耦合在一起,而当你将这些配置好,放在一起,却又非常可靠稳定,不会像微服务那样一睁眼有了,一闭眼又没了。 在这个系列教程中我们将通过使用 postfix、dovecot 和 openssl 这三款工具在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。
postfix 是一个古老又可靠的软件,它比原始的 unix 系统的 mta 软件 sendmail 更加容易配置和使用(还有人仍然在用sendmail 吗?)。 exim 是 debain 系统上的默认 mta 软件,它比 postfix 更加轻量而且超级容易配置,因此我们在将来的教程中会推出 exim 的教程。
你必须要保证你的邮件通讯是安全的,因此我们就需要使用到 openssl 这个软件,openssl 也提供了一些很好用的工具来测试你的邮件服务器。
<a target="_blank"></a>
让我们先来快速了解一些术语,因为当我们了解了这些术语的时候就能知道这些见鬼的东西到底是什么。 :d
mua: 邮件用户代理mail user agent,你本地的邮件客户端,例如 : evolution、kmail、claws mail 或者 thunderbird(lctt 译注 : 例如国内的 foxmail)。
pop3:邮局协议post-office protocol版本 3,将邮件从 smtp 服务器传输到你的邮件客户端的的最简单的协议。pop 服务端是非常简单小巧的,单一的一台机器可以为数以千计的用户提供服务。
imap: 交互式消息访问协议interactive message access protocol,许多企业使用这个协议因为邮件可以被保存在服务器上,而用户不必担心会丢失消息。imap 服务器需要大量的内存和存储空间。
tls:传输套接层transport socket layer是 ssl(安全套接层secure sockets layer)的改良版,为 sasl 身份认证提供了加密的传输服务层。
sasl:简单身份认证与安全层simple authentication and security layer,用于认证用户。sasl进行身份认证,而上面说的 tls 提供认证数据的加密传输。
starttls: 也被称为伺机 tls 。如果服务器双方都支持 ssl/tls,starttls 就会将纯文本连接升级为加密连接(tls 或 ssl)。如果有一方不支持加密,则使用明文传输。starttls 会使用标准的未加密端口 25 (smtp)、 110(pop3)和 143 (imap)而不是对应的加密端口 465(smtp)、995(pop3) 和 993 (imap)。
绝大多数的 linux 版本仍然还保留着 <code>/usr/sbin/sendmail</code> 。 这是在那个 mta 只有一个 sendmail 的古代遗留下来的痕迹。在大多数 linux 发行版中,<code>/usr/sbin/sendmail</code> 会符号链接到你安装的 mta 软件上。如果你的 linux 中有它,不用管它,你的发行版会自己处理好的。
使用 <code>apt-get install postfix</code> 来做基本安装时要注意(图 1),安装程序会打开一个向导,询问你想要搭建的服务器类型,你要选择“internet server”,虽然这里是局域网服务器。它会让你输入完全限定的服务器域名(例如: myserver.mydomain.net)。对于局域网服务器,假设你的域名服务已经正确配置,(我多次提到这个是因为经常有人在这里出现错误),你也可以只使用主机名。
图 1:postfix 的配置。
ubuntu 系统会为 postfix 创建一个配置文件,并启动三个守护进程 : <code>master</code>、<code>qmgr</code> 和 <code>pickup</code>,这里没用一个叫 postfix 的命令或守护进程。(lctt 译注:名为 <code>postfix</code> 的命令是管理命令。)
<code>$ ps ax</code>
<code>6494 ? ss 0:00 /usr/lib/postfix/master</code>
<code>6497 ? s 0:00 pickup -l -t unix -u -c</code>
<code>6498 ? s 0:00 qmgr -l -t unix -u</code>
你可以使用 postfix 内置的配置语法检查来测试你的配置文件,如果没用发现语法错误,不会输出任何内容。
<code>$ sudo postfix check</code>
<code>[sudo] password for carla:</code>
使用 <code>netstat</code> 来验证 <code>postfix</code> 是否正在监听 25 端口。
<code>$ netstat -ant</code>
<code>tcp 0 0 0.0.0.0:25 0.0.0.0:* listen</code>
<code>tcp6 0 0 :::25 :::* listen</code>
现在让我们再操起古老的 <code>telnet</code> 来进行测试 :
<code>$ telnet myserver 25</code>
<code>trying 127.0.1.1...</code>
<code>connected to myserver.</code>
<code>escape character is '^]'.</code>
<code>220 myserver esmtp postfix (ubuntu)</code>
<code>ehlo myserver</code>
<code>250-myserver</code>
<code>250-pipelining</code>
<code>250-size 10240000</code>
<code>250-vrfy</code>
<code>250-etrn</code>
<code>250-starttls</code>
<code>250-enhancedstatuscodes</code>
<code>250-8bitmime</code>
<code>250 dsn</code>
<code>^]</code>
<code></code>
<code>telnet></code>
嘿,我们已经验证了我们的服务器名,而且 postfix 正在监听 smtp 的 25 端口而且响应了我们键入的命令。
pipelining 允许多个命令流式发出,而不必对每个命令作出响应。
size 表示服务器可接收的最大消息大小。
vrfy 可以告诉客户端某一个特定的邮箱地址是否存在,这通常应该被取消,因为这是一个安全漏洞。
etrn 适用于非持久互联网连接的服务器。这样的站点可以使用 etrn 从上游服务器请求邮件投递,postfix 可以配置成延迟投递邮件到 etrn 客户端。
starttls (详情见上述说明)。
enhancedstatuscodes,服务器支撑增强型的状态码和错误码。
8bitmime,支持 8 位 mime,这意味着完整的 ascii 字符集。最初,原始的 ascii 是 7 位。
dsn,投递状态通知,用于通知你投递时的错误。
原文发布时间为:2017-12-28
本文来自云栖社区合作伙伴“linux中国”