如果您是成千上万管理网络和中小型公司计算机的系统管理员中的一员,并且您正在考虑托管自己的电子邮件服务,这本书就是为您准备的。
我们将从电子邮件系统的最基本组件开始。 这些组件组合在一起将允许您的用户向 Internet 上的任何人发送或接收邮件。 这可能是你所需要的,但许多公司也想为他们的用户提供一个可访问的网络邮件服务,人们可以在家里或当他们在路上使用。 不幸的是,今天许多人都不能缺少的另一个功能是适当地防止通过电子邮件传播的病毒以及对垃圾邮件的过滤。
我们还将介绍防止未经授权或恶意使用服务器的最重要的安全方面。 然后,我们将讨论如何保留服务器接收或发送的所有电子邮件的存档。 最后,我们将描述一个备份和恢复服务器以保护所有消息不丢失数据的过程。
本书将涵盖所讨论的软件的主要特性,这将为您的工作打下坚实的基础。
读完这本书,你将拥有一个适合大多数小公司的电子邮件服务器。
作为我们努力的技术平台,我们选择了 GNU/Linux 操作系统和一系列经过验证的自由软件工具,这些工具将帮助我们实现为小公司提供安全可靠的电子邮件服务器的目标。 我们所选择的工具是众所周知的,并被广泛使用,由软件专业人员编写,并得到大量用户社区的支持。
在本书的第一章中,我们将从您在开始使用服务器之前需要知道的内容开始。
- 我们讨论了运行自己的电子邮件服务器的优点和缺点。
- 为选择合适的硬件和服务器所需的网络连接提供了指导。
- 我们简要介绍了用于在 Internet 上交换邮件的协议,以及允许用户访问电子邮件的主要协议。
- 为了正确地路由电子邮件,我们讨论了连接到 Internet 的服务器上所需的配置选项。
- 最后,我们简要介绍了备份电子邮件服务器。
在本章结束时,您将对运行电子邮件服务器所需的主要组件有一个基本的了解。
大多数互联网服务提供商(ISPs)已经给予客户在其服务器上发送和接收电子邮件的能力,那么我们为什么要自己拥有和管理它呢? 既然你读了这本书,你可能已经有了你的理由,但是让我们来看看这个问题和一些可能的答案。
托管和管理您自己的电子邮件服务器的最重要的原因是控制。 对于许多组织来说,电子邮件是信息技术基础设施的重要组成部分。 控制你的电子邮件有很多好处。
- 如果一家公司在多个地方都有办公室,那么在选择如何连接它们时,你有充分的自由。 办公室之间的虚拟专用网络、办公室之间的传输层安全(Transport Layer Security, TLS)连接、所有办公室的单个服务器、每个办公室的一台服务器,等等。
- 通过将您自己的消息保存在内部,您可以互相发送消息,而不必让它们通过不安全的线路往返于 ISP。 如果您的 Internet 连接失败,这也为您提供了更可靠的服务,并避免了不必要的延迟。
- 你不依赖于提供商员工的能力。 如果您管理自己的服务器,并且需要解决一个困难的问题或实现一个自定义的解决方案,您可以这样做。 或者如果有必要,你可以雇一个顾问来帮助你。
- 如果提供商破产,您的所有数据都安全地驻留在服务器室和备份媒体上。
- 您不受我们的提供商可能设置的关于磁盘空间使用或消息的最大大小的限制。
- 您可以实现您所选择的任何邮件存档、反垃圾邮件或防病毒策略。
更多的控制需要更多的责任和更多的知识,这就是本书的切入点。
抛开这些令人信服的论点不谈,拥有自己的电子邮件服务器也有缺点。 这是一项需要一定程度的知识和承诺的任务,因此不应该由每个人承担。 有了自己的服务器,你不仅要对你为用户提供的服务负责,而且还要对整个互联网社区负责。 配置不良的电子邮件服务器会助长蠕虫和垃圾邮件的传播,这不仅对社区有害,还会使您的服务器被列入黑名单。 即使一个正确设置的服务器可以在不需要太多维护的情况下运行数年,但您必须保持合理的更新,并准备好应对可能出现的新威胁。 这并不是要把你吓跑,只是让你在开始这个项目之前仔细考虑一下。
您的服务器需要通过固定 IP 地址的永久 Internet 连接可用。 从理论上讲,可以使用非固定(动态)IP 地址运行电子邮件服务器,但当 IP 地址更改时,它将不可靠,并且您将面临丢失消息的风险。 使用动态 IP 地址时,您还将面临被列入动态 IP 地址范围黑名单的更大风险。
如果你真的想使用电子邮件服务器,那就准备一个像样的商务舱网络连接。 这些都是相对便宜的现在,投资一个将节省很多麻烦以后。 电子邮件流量不依赖于高带宽,所以一个简单的 DSL 线路的容量应该足够了。
即使您将需要一个固定的 IP 地址,您也不一定需要一个专用于邮件服务器的公共 IP 地址。 如果您的公司只有几个外部 IP 地址,并且使用私有 RFC 1918 地址(192.168.x.y
)在内部使用网络地址转换(NAT)路由器,这不是问题。 NAT 路由器将私有网络连接到世界的其他地方,并且可以通过设置路由器将电子邮件服务所需的端口转发给内部电子邮件服务器。 【5】
下表显示了哪些 TCP 端口最有可能用于此。
|港口
|
服务
|
| --- | --- |
| 25
| 简单邮件传输协议(SMTP) |
| 110
| 邮政礼宾(POP) |
| 143
| Internet 消息访问协议(IMAP) |
| 993
| IMAP / TLS |
如果员工希望从家里或路上访问他们的消息,所需要做的就是确保没有防火墙阻止访问所需的端口,并且 NAT 路由器(如果有的话)正确转发这些端口。 如果用户希望通过电子邮件服务器发送消息,则需要一些额外的配置来允许主机执行身份验证,以防止未注册的用户发送电子邮件。
当选择一台计算机作为电子邮件服务器时,许多人对完成这项任务所需的硬件有误解。 计算机不断提高的性能似乎使人们认为他们确实需要最新的和最符合流行词汇的东西,即使他们每天只想处理几千条消息。
虽然需要一定的专业知识来评估组织的硬件需求,但常识是很有用的。 对于一家拥有 100 名用户的公司来说,每天发送信息的上限应该是 5000 条。 这将允许每个用户每天发送或接收 50 条消息。 即使我们说每条消息都是在工作日的 8 小时内发送的,平均而言,系统每分钟处理的消息不会超过 10 条。 现代计算机能够在不到 6 秒的时间内接收并处理单一的电子邮件消息(通常只有几千字节),这是合理的。
这个简单的练习显然是非常粗糙的,并且没有考虑到消息通常不会及时均匀地到达,但是这仍然是一种很好的估计方法。
现在让我们深入了解一下在选择服务器时应该考虑什么。 对于不执行任何内容扫描(病毒、垃圾邮件等)的电子邮件服务器,性能通常不受 CPU 的限制,而是受 I/O 性能的限制,特别是硬盘的寻道时间以及 I/O 控制器的质量和配置。 在这个问题上增加 CPU 的马力不会有帮助。 现代计算机的 CPU 配置相对好于 I/O 配置,因此投资于多千兆赫的多核 CPU 配置可能是无用的。 对于任何合理的 1 ghz 级的现代 PC,每秒少量的消息是没有问题的。 这个负载相当于每小时近 20,000 条消息。
添加内容扫描可能会大大增加 CPU 负载,并且 I/O 系统也需要更多的能量来维持。 不过,每秒一条或两条消息不会给系统带来明显的负载。
到目前为止,我们所讨论的只是电子邮件服务器。 它所做的就是接收消息并将其发送到其他主机或本地邮箱。 在选择服务器时,你不应该忘记人们也会想要阅读他们的电子邮件。 此服务由其他服务器软件提供。 就像消息处理软件一样,关键的需求是 I/O 而不是 CPU。 系统的用户数量本身是一个无关紧要的数字; 重要的是使用模式。 用户多久轮询一次邮箱? 如果 100 个用户每五分钟轮询一次邮箱,那么平均每三秒就会有一个。 检查邮箱是否有新消息只需要几分之一秒的时间,因此这个负担不会太大。
最后,也可以说是最难考虑的事情是磁盘存储。 使用预期的交通数字,我们可以做一些粗略的估计。 让我们假设 80%的消息小于 1kb, 15%的文档附件为 200kb,其余为视频和其他 1mb 的大文件。因此,使用 200 天的工作年,相当于每年大约 80gb 的存储需求。 假设没有删除任何消息,一个典型的 1tb 磁盘驱动器的容量可以存放超过 12 年的消息。
这些指导方针可能看起来含糊不清,不具体,但不可能给出确切的数字。 人们对给定硬件的预期性能取决于如此多的因素,以至于试图给出除了一般指导方针以外的任何东西都会产生误导。 使用常识和简单的粗略计算; 不要购买你能找到的最好的服务器,除非你确定你真的需要它,但也不要使用任何你能找到的废弃的旧台式机。 即使旧台式机的性能可能足够,但组件可能是旧的,服务协议或保修可能过期。
为什么我们在这本书中讨论基本的网络通信协议? 我们不是在运行高级软件吗? 确实如此,但是了解这些协议不仅可以帮助调试可能无法工作的系统,还可以增加对邮件系统行为的理解。 我们将从非技术性的协议概述开始,之后我们将关注协议的细节。
在 UNIX 环境中,传统的邮件应用根本不使用任何网络协议。 他们直接通过文件系统访问本地存储的邮箱文件。 通常,每个用户的收件箱存储在与用户同名的 /var/mail
或 /var/spool/mail
目录中的单个文件中(例如 /var/spool/mail/joe
)。 本书的重点是讨论一种小型办公室的基于 Linux 的电子邮件解决方案,在这种小型办公室中,用户不希望通过终端应用登录到中央服务器来访问他们的邮件,因此只简要介绍本地邮件存储。
Internet 邮件传输中最重要的协议是简单邮件传输协议(T0)(T2) SMTP。 它的目的是在两个系统之间传输电子邮件消息。 这两台计算机要么是服务器,要么其中一台可能是客户端机器,用户可以在上面运行邮件应用- outlook、Thunderbird、Eudora 等。 要收集新消息,最终用户不使用 SMTP。 这就是邮局协议(POP)和互联网消息访问协议(IMAP)发挥作用的地方。 【病人】
一些专有系统(如 Microsoft Exchange 和 Lotus Notes)使用它们自己的协议来访问消息,我们在这里不讨论它们。
POP 是这两种协议中较老且使用更广泛的一种。 它的重点是让用户访问他们的收件箱,用户可以从那里下载新邮件到他们的本地计算机,然后从服务器上删除它们。 POP 服务器并不打算用于永久存储消息。 一些互联网提供商的 POP 服务甚至禁止用户在服务器上留下已下载一次的信息。 POP 的主要缺点是它只提供一个中间存储介质,用户必须将消息永久存储在其他地方(例如,在本地硬盘驱动器上)。 这不仅对于想要从多个位置访问电子邮件消息的用户来说是不切实际的,而且对于系统管理员来说也是个麻烦,他们可能不得不在本地硬盘驱动器上为用户的消息实现备份解决方案。 POP 也没有为每个用户提供多个文件夹的概念; 使用 POP 用户只能访问他/她的收件箱。
IMAP 是对第一类邮件存储的访问方法,也就是说,它的设计目的是允许用户在服务器上永久地存储消息。 这解决了系统管理员的备份问题,并允许用户访问世界上任何地方的所有消息(除了防火墙的限制)。 IMAP 还具有更广泛的 tls 安全连接实现,这使得 IMAP 可以在恶劣的环境中安全使用。 为了提高性能并允许用户在不连接到邮件服务器的情况下使用邮箱,大多数带有 IMAP 的邮件应用都支持在本地硬盘中缓存下载的邮箱和消息。
与 POP 不同,IMAP 支持多个文件夹并在服务器上存储消息状态信息(无论消息是否已被读取、回复或删除)。 这意味着,从不同位置(可能有不同的电子邮件客户机)访问其消息存储的用户将获得其消息的一致的最新视图。 IMAP 还支持服务器端搜索,因此客户机应用不需要下载所有消息来搜索电子邮件。
SMTP 是一种运行在 TCP 上的面向行的文本协议,这使得解码 SMTP 文本和使用在几乎任何计算机上都可以找到的常规 telnet 客户端发起 SMTP 会话变得非常简单。 SMTP 客户端通过连接 SMTP 服务器的 25 号端口来启动会话。 在服务器向客户端打招呼之后,客户端必须通过说 hello,或者实际上是 HELO
或 EHLO
,然后加上客户端的主机名来响应。 如果服务器接受亲切的问候,客户端可以开始第一个邮件事务。
一个 SMTP 邮件事务由三个部分组成——一个发件人、一个或多个收件人和实际的消息内容。 发送方用 MAIL FROM
命令指定,每个接收方用 RCPT TO
命令指定,消息内容的开始用 DATA
命令指定。 如果服务器接受消息,客户端可以继续其他事务,或者发出 QUIT
命令终止 SMTP 会话。
让我们不那么抽象地看一个实际的 SMTP 会话来说明该协议。 粗体字代表客户机发送给服务器的内容。
220 mail.example.com ESMTP Postfix (2.12.6.2)
EHLO gw.example.net
250-mail.example.com
250-PIPELINING
250-SIZE
250-VRFY
250-ETRN
250 8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
MAIL FROM:<[email protected]> SIZE=112
250 Ok
RCPT TO:<[email protected]>
250 Ok
RCPT TO:<[email protected]>
250 Ok
RCPT TO:<[email protected]>
550 <[email protected]>: Recipient address rejected: User unknown in local recipient table
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test mail
To: <[email protected]>
Date: Sun, 15 May 2009 20:23:22 +0200 (CEST)
This is a test message.
.
250 Ok: queued as B059D3C2B
QUIT
221 Bye
这个示例显示了一个自称名为 gw.example.net
的主机连接到一个自称为 mail.example.com
的 SMTP 服务器。 因为服务器的第一个响应包含 ESMTP,客户端决定尝试增强 SMTP(ESMTP),并使用 EHLO
而不是 HELO
来迎接服务器。 服务器接受此问候语并响应支持的 ESMTP 扩展列表。 【显示】
与发送地址一起,客户端将 SIZE
属性发送给服务器,以指示消息的大小。 这是允许的,因为服务器声明它支持 SIZE
扩展。 如果客户端指定的大小超过了服务器设置的消息大小限制,则可以立即拒绝消息,而不是在接收整个消息之后,服务器可以评估消息的大小。
一个 SMTP 消息显然可以有多个收件人。 在实现邮件系统和发明策略时,必须记住一些后果。 在前面的示例中,邮件服务器接受前两个收件人,但拒绝第三个收件人。 由于服务器已经接受了两个收件人,客户端将尝试发送消息内容。 在这里,消息被服务器接受并排队等待传递(250 Ok: queued as B059D3C2B
),这意味着 SMTP 服务器已经接管了将消息传递给接受的收件人的责任。 如果消息无法传递,服务器将向发送方发送一个非传递消息(bounce)。 服务器也可以选择拒绝整个消息。 如果是这样的话,它就会拒绝所有的收件人,而且根本不会发送。 换句话说,为了响应消息内容,服务器必须为所有收件人拒绝消息,或者为所有收件人接受消息。
理解信封和标头之间的区别是至关重要的。 消息的信封由 MAIL FROM
和 RCPT TO
命令中给出的信息组成,即用于传递消息的发送方和接收方信息。 SMTP 服务器不会注意消息头的 From, To
和 Cc
。 在我们的示例中, To
头只包含一个地址,除了域之外,与实际的接收地址没有其他关系,但这只是巧合。 bounce 总是发送到信封发送地址,在本例中为 [email protected]
。 回传消息的发送地址是空发送地址,通常称为空发送地址。 无论对某些人来说多么诱人,都不能阻止空发送地址。
到目前为止,我们还没有注释服务器在每行开头给出的数字代码。 每个数字都有特定的含义,学习第一个数字的正确解释是很重要的。
|数字
|
意义
|
| --- | --- |
| 2
| 服务器已经接受了前一个命令,正在等待您的下一个命令。 |
| 3
| 仅用于响应 DATA
命令,表示服务器已准备好接受消息内容。 |
| 4
| 临时错误:当前无法执行请求,但稍后可能会成功处理。 |
| 5
| 永久错误:请求永远不会被接受。 |
在 SMTP 中,错误条件可以是暂时的,也可以是永久的。 4
和 5
都用于信号错误。 接收到由 4
指定的临时错误的客户端应该断开连接,将消息保留在队列中,稍后重试。 典型的临时错误条件包括完整的邮件队列磁盘、必须在接收消息之前解决的服务器配置错误,或者临时 DNS 查找错误。 永久错误是由第一个数字表示 5
,意味着请求不会被接受,那么客户端必须从队列中删除消息和发送方反弹,告诉他或她,消息无法传递。
SMTP 还有更多的东西要介绍。 为了进一步阅读,有许多涉及互联网网络相关主题的文档,称为征求意见(RFC)。 rfc 是由Internet Engineering Task Force(IETF)发布的备忘录,被普遍采用为标准。 对于 SMTP 来说,最重要的是RFC 821(简单邮件传输协议)和RFC 822(ARPA Internet 文本消息的标准格式)。 【病人】
域名系统(DNS)在电子邮件中起着重要的作用。 DNS 同时被电子邮件客户机和电子邮件服务器使用。 即使您不打算维护自己的 DNS 服务器,对于邮件服务器操作员来说,彻底了解 DNS 在电子邮件中的角色也是必要的。 本节假设读者对 DNS 的一般工作原理有基本的了解。
在许多组网场景中,只使用两种 DNS 记录类型:A 记录和PTR 记录。 它们分别将主机名映射到 IP 地址,将 IP 地址映射到主机名。 这些记录类型也用于电子邮件,但还有第三种 DNS 记录类型仅用于电子邮件。
SMTP 服务器如何发现某个域的消息应该传递到哪个主机? 毫无疑问,在一个或多个 DNS 查找中,收件人域被用作键。 第一个查找是针对特定于邮件的MX 记录—邮件交换器记录类型。 MX 条目允许 DNS 操作符指定可以接收某个域邮件的服务器的主机名或主机名。 例如,可以使用 MX
记录指定在 example.com
发送给某人的消息应该发送到 mail.example.com
。 如果接收域没有 MX
记录,则尝试查找接收域的 A
记录。 如果 A
记录查找成功,邮件将被发送到主机。 如果 MX
和 A
查找都没有返回任何结果,则认为消息无法传递,并将其返回给发送方。 【病人】
拥有 MX
记录有两个很好的理由:
- 首先,可能不希望强制将域的
A
记录映射到邮件服务器。 例如,公司与 WWW 公司地址 http://www.example.com/想要允许访客使用较短的 URL http://example.com/,但不想在邮件服务器上运行 web 服务器应用(反之亦然)。 - 更重要的原因是
MX
查找的结果不仅包含主机名列表,而且还包含(主机名,优先级)元组列表。 优先级字段是一个整数,描述主机名在列表中的优先级。 优先级数字的绝对大小无关紧要,但它用于与任何其他主机名的优先级相关,以创建一个有序的主机名列表,以便在传递消息时尝试。 该列表按升序排列,因此优先级编号最低的主机名将首先被联系。 如果两个主机名具有相同的优先级,它们将以随机顺序尝试。
等优先级 MX
记录可以用作两个或多个服务器之间的一种非常粗糙的负载平衡形式。 这对于映射到多个 IP 地址的 A
记录也是可能的。 可以使用不能使用 A
记录的 MX
记录为域设置具有不同优先级的备份邮件服务器的层次结构。 让我们来看一个构造的组织示例,该组织使用许多邮件服务器。
优先级
|
主机名
|
| --- | --- |
| 10
| mx1.example.com
|
| 10
| mx2.example.com
|
| 20
| mx3.example.com
|
| 30
| mx4.example.com
|
如果为域 example.com
设置了此 DNS 配置,则 SMTP 服务器将首先尝试将 example.com
的消息传递给 mx1.example.com
或 mx2.example.com
。 如果两个连接都失败,则应该尝试 mx3.example.com
,如果该服务器也没有及时响应,则 mx4.example.com
是最后的办法。 如果这也失败了,则保留消息并在稍后的时间重试传递。
如果主服务器不可用,那么有一个备份邮件服务器可以接收消息,这听起来确实是个好主意,但是今天可靠的 Internet 连接加上垃圾邮件、蠕虫和其他垃圾邮件在很大程度上使得备份邮件服务器变得不必要,甚至常常是有害的。 备份服务器的基本原理是,它可以在主服务器宕机时接收消息,然后在主服务器重新启动时将消息传递给主服务器。 然而,这样做的好处非常小,因为所有 SMTP 服务器都需要将无法传递的消息排队至少 5 天,然后才能将它们返回给发件人。 当然,通过备份服务器,可以将不可用的消息存储超过 5 天的时间。 但是,如果主 SMTP 服务器连续 5 天以上不可用,那么可能会出现比丢失一些邮件更大的问题。
由于备份邮件服务器通常不具有与主服务器相同的防止垃圾邮件的配置,因此垃圾邮件发送者通常专门针对备份服务器,以便绕过主服务器的更严格的规则。
避免备份邮件服务器的另一个重要原因是它们通常不执行收件人验证。 这意味着它们不知道哪些接收地址对于它们充当备份服务器的域是有效的。 这需要备份服务器接受备份域的所有消息,并尝试将它们传递到主服务器。 主服务器将拒绝无效的收件人,从而导致备份服务器将此类消息反弹给发送方。 这就是所谓的后向散射,有两个原因:
- 发送者地址经常被欺骗,所以反弹可能被发送给一个无辜的旁观者。
- 它可能用弹起的消息填充邮件队列,这些消息由于接收服务器不可用而无法传递。
繁忙的服务器如果不执行收件人验证并受到垃圾邮件的严重打击,则队列中可能存在数千或数万条无法传递的邮件。
在本章中,我们从讨论为什么你应该考虑托管自己的电子邮件服务器开始。 然后,我们研究了在开始使用服务器之前需要回答的一些问题——预期的网络连接类型、计算机能力和磁盘空间需求。
要成功地管理电子邮件服务器,了解所使用的网络通信协议是很重要的。 我们概述了 POP 和 IMAP,并对其中最重要的 SMTP 进行了更深入的研究。
最后,我们讨论了 DNS 在将消息路由到正确的服务器或可用的备份服务器方面所扮演的重要角色。