黑客技巧和 / - 紧急备用邮件服务器
当时间和金钱无限时,构建冗余系统很容易。当您两者都没有,或者您正在设计一个个人系统时,备份和冗余通常是您计划在下雨天完成的项目的一部分。当然,不可避免地,您会将这些任务推迟到主系统出现故障为止,然后您会手忙脚乱地收拾残局。事实上,设置 RAID 和进行备份可能是最常见的“下雨天再做”任务的例子(如果您还没听说过,它们不是一回事)。我们都知道我们应该备份重要数据,并且我们应该在重要的文件服务器上设置 RAID,而且到目前为止,我们中已经有足够多的人为此错误付出了代价,所以我今天不打算谈论任何一个。相反,我今天要谈论的是一项较少受到关注的服务:您的邮件服务器。
拥有备份邮件服务器很重要,但无论您是在一家小公司工作,还是管理自己的个人邮件服务器,您可能都没有考虑过备用邮件中继。然后,灾难降临。可能是主邮件服务器的硬件出现故障,或者可能被黑客入侵,无论哪种情况,它都将停机几天。与此同时,您仍然希望能够发送和接收电子邮件。在本专栏中,我将介绍一些简单且更重要的快速步骤,以创建一个备用邮件中继,以帮助您度过难关,直到主邮件服务器恢复在线。
现在,我首选的紧急邮件服务器方法是使用 Knoppix 光盘。我总是随身携带一张,因为我可以将我需要的任何软件安装到 Live CD 上,所以当我需要快速搭建一个基本的 Linux 系统时,它是理想的选择。我可以找到一台备用机器,在上面启动 Knoppix,然后设置我的服务器。当紧急情况结束后,我可以关闭它,无需承担任何责任。
再说一遍,您可能希望使这个备用邮件服务器更持久一些。这些相同的步骤在任何安装了 postfix 的普通 Linux 系统上都能正常工作。
在执行任何步骤之前,请务必选择一台具有足够存储空间来存储您的邮件的服务器。这个数字因您的电子邮件流量和服务器上的客户端数量而异,但该机器需要将所有传入邮件本地存储,直到主服务器恢复运行。因此,如果您每天收到 50MB 的邮件,并计划主服务器停机三天,您应该至少有 150MB 的备用存储空间用于 /var/spool/postfix 中的邮件假脱机,并且还要额外留一些空间,以防万一。如果您没有足够的备用存储空间,或者您为此使用了 Knoppix,请挂载一个额外的分区,在上面创建一个 postfix 目录,并将 /var/spool/postfix 符号链接到它。
现在您已经选择了一台服务器,第一步是安装 postfix。Postfix 是一个常见的软件包,应该适用于您使用的任何主要 Linux 发行版。在基于 Debian 的系统上,安装过程会自动运行一个配置脚本,以设置合理的默认配置。如果您确实遇到了这个脚本,请选择“Internet Site”配置类型,并接受脚本中的其余默认值。或者,您可以复制 postfix 软件包附带的默认配置,或者运行您的发行版包含的配置脚本。
安装 postfix 后,您需要调整默认配置,使其可以充当您的邮件中继。Postfix 使这非常简单,您只需要担心几个配置选项。编辑 /etc/postfix/main.cf 文件,找到名为 mynetworks 的行。此选项告诉 postfix 为哪些网络中继邮件。理想情况下,您应该仅为内部网络或您信任不会通过您的系统中继垃圾邮件的特定外部主机设置此选项。如果您允许所有网络,您就刚刚将您的系统变成了一个开放中继,并且很可能会发现自己出现在垃圾邮件黑名单中。例如,如果您的本地网络是 192.168.1.x,您将为该网络和 localhost 添加一个条目
mynetworks = 127.0.0.0/8, 192.168.1.0/24
接下来,您需要告诉 postfix 它将接受哪些传入域的邮件进行中继。此变量将设置为您接受传入邮件的任何域。因此,例如,如果您拥有 example.com 和 example.org,您将添加
relay_domains = example.com, example.org
您甚至可以充当朋友的备用邮件服务器。只需在此处添加他们的域,您的邮件服务器将接受发送到这些域的传入邮件,然后将其转发到适当的主邮件服务器。它是如何知道使用哪个服务器的呢?它依赖于 DNS,我稍后会讨论。
要更改的最终 postfix 选项告诉 postfix 在退回邮件之前假脱机和尝试传递邮件多长时间。默认情况下,postfix 会将邮件排队三天,在此期间,它会不断尝试传递。三天后,postfix 会退回邮件,并向发件人发送一封电子邮件通知,告知电子邮件无法送达。如果您的主服务器将停机几天,您可能需要延长此默认时间。找到以下值(或者如果它们未在 /etc/postfix/main.cf 中定义,则添加它们),并编辑它们,使其看起来像下面这样
bounce_queue_lifetime = 14d maximal_queue_lifetime = 14d
这里我将最长时间增加到 14 天,但您可以将其更改为对您有意义的值。通常,您不希望将电子邮件保留太久,因为发件人可能最终想知道他们的电子邮件是否无法送达。更改这些选项后,键入/etc/init.d/postfix start启动服务,或者键入/etc/init.d/postfix reload,如果 postfix 已经在运行。
接下来,测试服务器。配置您的邮件客户端以使用此服务器作为其 SMTP 网关,然后向您的域发送一封电子邮件,或者如果您觉得高级,请使用 Telnet 连接到服务器上的端口 25,然后键入原始 SMTP 命令。检查 /var/log/mail.log 或 /var/log/maillog 以确认 postfix 已接受并假脱机您的邮件。
最后一步是配置您的 DNS 服务器,以便将其新机器列为您的域的备用邮件服务器。您的 DNS 服务器应至少定义一个 MX 记录,如下所示
example.com. IN MX 100 mail1.example.com.
如果我创建了一个新的邮件服务器,并将其 IP 添加到 DNS,以便 mail2.example.com 指向它,那么我将在我的 DNS 区域中添加以下行
example.com. IN MX 200 mail2.example.com.
因为我为 mail2 分配了一个比 mail1 (100) 更高的值 (200),所以其他邮件服务器知道 mail1 是我的主服务器,邮件最终将落到那里。但是,如果 mail1 不可用,他们知道他们可以尝试在 mail2 上传递邮件(并且一些邮件服务器无论如何都会首先尝试在备用服务器上传递邮件)。一旦我的 DNS 区域重新加载,自从 mail1 停机以来在远程服务器上排队的邮件应该开始传递到 mail2。请务必为您在 relay_domains 选项中添加的任何域添加此 DNS 条目。还需要说明的是,请确保 mail2.example.com 指向位于您的邮件服务器上的外部 IP 地址。
当此服务器运行时,监控其存储空间,以确保您有足够的空间用于新的传入邮件。您还可以运行 mailq 命令来查看所有排队的消息。一旦您的主服务器恢复运行,postfix 将开始自动传递其排队的消息(实际上它会一直在尝试这样做)。默认情况下,postfix 会限制此传递,以免淹没主邮件服务器,但如果您希望立即传递所有排队的电子邮件,请键入postqueue -f.
主机器恢复运行后,您可能需要关闭这台临时机器,或者至少致力于更永久的解决方案。如果您确实要关闭它,请务必从您的所有 DNS 服务器中删除其 MX 记录。您确实有冗余 DNS 服务器,对吧?
Kyle Rankin 是旧金山湾区的高级系统管理员,也是许多书籍的作者,包括 O'Reilly Media 出版的 Knoppix Hacks 和 Ubuntu Hacks。他目前是北湾 Linux 用户组的主席。