隐身电子邮件来救援

作者:Peter Ziobrzynski

自从电子邮件的早期时代以来,维护我自己的电子邮件服务器就有点像表明自己掌控一切并保持技术上的健康。像这样的项目所涉及的技术通常包括可以在其他地方重用的组件,并迫使人们跟上常用的通信媒体的步伐。

最初,这是一项简单的任务,即连接调制解调器,找到社区 UUCP 服务器,配置调制解调器拨号、uucico 和 Sendmail。这有点像电子邮件的 T 型车。而且,它通常包括配置 Usenet 源和 C-News,以收集当时相对较小的互联网上所有计算机的 UUCP 地址。

随着真正的互联网的出现,情况变得更加复杂。您必须克服许多障碍,这些障碍是由试图闯入您的服务器、窥探线路上的电子邮件数据包传输以及处理那些想要向您发送大量垃圾邮件的人造成的。似乎这还不够,工作场所变得如此安全,以至于有时在白天从工作场所通过互联网访问您的个人电子邮件服务器是不可能的。

我过去常常维护一台 Linux 服务器,该服务器在 DSL 线路上的静态 IP 上运行 DNS、防火墙 (netfilter)、我选择的 MTA (Postfix) 以及用于垃圾邮件过滤的 SpamAssassin。我使用装有 Netscape Communicator 的笔记本电脑通过 IMAP 读取电子邮件。我使用 Communicator 过滤器将所有收到的邮件分类到各种 IMAP 文件夹中。

今年夏天,在搬出旧金山湾区到科罗拉多州丹佛市后,这种简单的架构成为了历史。静态 IP DSL 供应商的奢侈享受消失了,一家纳粹式的 ISP 在该地区垄断成为了现实。静态 IP 在这里不可用(至少对我而言),而且 ISP 对常用 IP 端口使用了激进的过滤。我的新工作场所非常安全,以至于我忘记了携带笔记本电脑或使用我的工作互联网连接来访问我的电子邮件服务器。所有这些都是可以理解的,因为 ISP 保护自己免受垃圾邮件发送者的侵害,雇主需要更好的安全性。但是,我仍然想在白天阅读我的电子邮件。

我将克服这些障碍视为个人挑战。我采取的方向是使用智能手机 Treo 650 作为个人电子邮件阅读器,以绕过工作场所的安全性。我将我的家庭电子邮件服务器配置为使用新的隐身模式 ISP,这些 ISP 允许动态 DNS 和邮件中继到选择的端口。

以下是我在下面的分步配置详细信息中介绍的配置组件的摘要

  • 电子邮件服务器正在运行稳定的 Gentoo Linux,通过 VDSL(Qwest 的超高速 DSL)连接到互联网,使用 DHCP 分配的动态 IP 地址。我的 DNS 域名注册商是 No-IP.com。该注册商使用自定义动态 DNS 设置,可以检测我这边的 IP 地址更改。这是通过在我的服务器上运行自定义客户端程序来完成的——noip2 客户端连接到 No-IP.com 注册商 DNS 服务器,并以最快一分钟的间隔更新我的 DNS 记录。这称为 Plus Managed DNS。

  • 由于我的 ISP 阻止传入的 IP 端口 25,我使用 Mail Reflector No-IP.com 服务,该服务为我的域在其自己的服务器上设置 MX 记录,并将邮件传递到我服务器上的自定义端口。

  • 我的 ISP 还将我的 DHCP 地址列入互联网垃圾邮件黑名单,因此任何尝试直接从我的服务器传递电子邮件的尝试都注定要失败。为了克服这个问题,我使用了 No-IP.com 服务,称为 Alternate-Port SMTP,它充当传出邮件中继。我使用 SSL 身份验证将所有邮件发送到 No-IP.com 服务器,并且还使用了自定义端口,以防我的 ISP 阻止传出的 SMTP。

  • 我的 MTA 是 Postfix,它非常方便用于具有备用传入和传出端口的隐身配置。

  • 我使用 SpamAssassin 过滤垃圾邮件。它易于配置并且效果非常好。简而言之,它的功能仅限于处理邮件消息并附加自定义邮件标头字段——一个 X-Spam-Level 评级,用于将每条消息作为垃圾邮件候选者。垃圾邮件可能性的级别通过此字段中包含的星号数来衡量。单个 * 通常是垃圾邮件的良好指示。

  • 我不能指望在我的智能手机上存储电子邮件并在那里进行过滤。手机无法处理那么多电子邮件。因此,我用 Procmail 替换了客户端 Netscape Communicator 过滤器功能(将收到的邮件分类到 IMAP 文件夹中)。我创建了一个 .procmailrc 文件,实现了所有垃圾邮件和邮件列表规则,以将消息归档到服务器上的文件夹层次结构中。这证明非常有用,并打开了从任何位置访问我的存档电子邮件的通道。

  • IMAP 服务器对我来说是一个相当大的问题。我更喜欢传统的邮箱,其中多个消息存储在每个文件夹的单个文件中。大多数现代 IMAP 服务器(如 Courier 或 Cyrus)都使用现代 maildir 或 MH 格式,这些格式将每条消息存储在自己的文件中。这消耗了大量的 i-节点。不幸的是,我能找到的唯一使用传统文件夹的开源 IMAP 服务器是 uw-imap。(CommuniGate Pro 使用单个文件,但它是商业服务器。)uw-imap 服务器有许多缺点,尤其是在 SSL 协议实现方面。我对 uw-imap 和我为本项目设想的 SSL IMAP 客户端 (PalmOS VersaMail) 的测试显示连接失败或完全无法连接。为了获得我想要的——单文件邮件文件夹和正常工作的 SSL——我将 IMAP 和 SSL 的功能分拆到两个单独的服务器上:stunnel 和 uw-imap。Stunnel 在 SSL 配置以及日志记录和诊断消息的级别方面被证明非常复杂。

  • 我的电子邮件配置的客户端最初包括 Treo 650 随附的库存 PalmOS VersaMail 和 Sprint 计划的一部分。此决定的关键因素是以每月 15 美元的固定费用提供无限使用的互联网连接。VersaMail IMAP 支持非常好,并且与 Blazer Web 浏览器的集成促成了我的购买。不幸的是,更密集地使用 VersaMail 发现了其操作问题。整个设置取决于可靠的邮件服务器轮询新邮件。不幸的是,VersaMail 有一个影响轮询调度的错误,这使得它相当无效。我最终使用了 PalmOS 的 SnapperMail 邮件客户端,这很好地说明了新西兰的九个人如何能够超越像 Palm Software 这样的大公司。SnapperMail 是我迄今为止使用过的最好的 PalmOS 应用程序之一。

这里有很多移动部件,因此需要一张图表(图 1)。

Stealth E-Mail to the Rescue

图 1. 完整的电子邮件解决方案的布局

从图 1 可以看出,配置主要有三个方面:Linux 服务器、No-IP.com 服务和 Treo 650 邮件客户端。

Linux 服务器配置

我选择 Gentoo Linux 发行版用于该项目是由于 Portage 包管理非常方便。Portage 完全使用户无需寻找所需的软件包。在操作上,它类似于 Perl CPAN 或 Debian apt-get。有关 Gentoo 本身的安装,请参阅 gentoo.org 网站。操作系统的安装主要是手动的,而且可能是一个相当漫长的过程(有些安装甚至可能需要几天,因为您自己编译所有内容),但这项投资将在服务器管理和应用程序配置期间得到回报。

您还需要从上面提到的 No-IP.com 获取 DNS 和 SMTP 服务。No-IP.com 网站提供了他们提供的所有服务的文档。

以下说明是 Gentoo 特有的,但将此项目改编为不同的发行版应该相当容易。您只需确保您安装的应用程序具有用于此解决方案的功能(如 SASL)。

Postfix MTA

我们从核心组件 Postfix 开始安装。标准 Gentoo 安装附带一个简单的 MTA ssmtp,需要在安装 Postfix 之前将其删除。此外,Postfix 需要安装(编译)并支持 SASL。这是经过身份验证的邮件传递到 No-IP.com 中继主机(Alternate-Port SMTP 服务)所必需的。

SASL 选项通过将 sasl 关键字添加到 Gentoo USE 配置变量来启用。在 /etc/make.conf 中,添加

/etc/make.conf:

USE="sasl"

安装 SASL 库

# emerge dev-libs/cyrus-sasl

现在删除并添加 MTA

# emerge -C ssmtp
# emerge postfix

添加 init rc 脚本启动

# rc-update add postfix default

Postfix 配置相对简单——/etc/postfix 中的两个配置文件需要注意:main.cf 和 master.cf。

通过编辑 Postfix 的 main.cf 文件来更改描述您的网关主机的信息。在这里,您的网关的主机名是 mygateway,域名是 foobar.net。您将向其发送所有邮件的中继主机是 relayhost.no-ip.com,在端口 1234 上接收 SMTP。两者都将由 No-IP.com 作为 Alternate-Port SMTP 服务的一部分提供

myhostname = mygateway
mydomain = foobar.net
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain $mydomain
#home_mailbox = .maildir/
relayhost = relayhost.no-ip.com:1234
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =

在 Postfix master.cf 文件中,在 25 旁边添加一个额外的端口 (4321)。这将用于从 Mail Reflector No-IP.com 服务以及您的 Treo 650 接收 SMTP

4321      inet  n       -       n       -       -       smtpd

为主机 relayhost.no-ip.com 和用户 foobar.net@noip-smtp 创建一个 SASL 密码文件 /etc/postfix/saslpass,使用密码 ????——所有这些都由 No-IP.com 提供

/etc/postfix/saslpass:

relayhost.no-ip.com     foobar.net@noip-smtp:????

接下来,生成一个 dbm 映射

# cd /etc/postfix
# postmap saslpass

最后,您需要启用从您的 Treo 650 进行电子邮件中继。我们在这里使用 Sprint,您将需要找出 Sprint 交换机 IP 范围将连接到您的服务器。Postfix main.cf 参数 mynetworks 将必须包括交换机的网络地址。除了我的家庭网络和本地环回网络之外,我还使用 70.0.0.0/8。出于安全原因,最好尽可能缩小地址范围

mynetworks = 192.168.1.0/24 127.0.0.0/8 70.0.0.0/8
垃圾邮件过滤器

您需要安装两个软件包:spamassassin 和 procmail。步骤(对于 Gentoo)如下。

安装 Procmail

# emerge procmail

安装 SpamAssassin

# emerge spamassassin

更新 init rc 脚本以启动 SpamAssassin 服务器(如果您使用不同的软件包管理器,则可能已为您完成此操作)

# rc-update add spamd default

调整您的 Postfix 配置以使用 Procmail 传递所有邮件。将此添加到 /etc/postfix/main.cf

mailbox_command = /usr/bin/procmail

创建主 Procmail 配置文件 /etc/procmailrc,并添加此配方以使电子邮件通过 SpamAssassin

DEFAULT=/var/spool/mail/$LOGNAME
:0fw: spamassassin.lock
* < 256000
| /usr/bin/spamc

启动 spamd 服务器

# /etc/init.d/spamd start
邮件归档

建立 IMAP 文件夹层次结构和 Procmail 配置文件,以将邮件归档到这些文件夹中。如果您有多个用户,则必须为每个用户执行此操作。以下配置使用 ~/.m 作为文件夹根目录。每个用户的 Procmail 配置文件位于 ~/.prcmailrc 中。我使用以下 .procmailrc 文件模板,该模板实现了将垃圾邮件与邮件分开并归档邮件列表的基本功能。有关详细信息,请参阅 procmailrc(5)

PATH=/bin:/usr/bin:/usr/sbin
MAILDIR=$HOME/.m
DEFAULT=$MAILDIR/Mbox
LOGFILE=$HOME/.procmail.log
VERBOSE=yes

# File gentoo-user mailing list into ~/.m/lst/gentoo
:O:
* (^To.*|^Cc.*)gentoo-user@lists.gentoo.org
lst/gentoo

# File jobserve mail into ~/.m/lst/jobserve
:O:
* ^From.*jobserve.com
lst/jobserve

# File SPAM into ~/.m/Spam with some exceptions:
:O:
* ^X-Spam-Level:.*\*
 * !^From.*netflix
 * !^From.*vail
 * !^From.*ebay member
 * !^From.*cnet
Spam

# File SPAM that escaped spamassassin:
:O
* ^From.*eversave.com
Spam
:O:
* ^From.*sears.com
Spam

现在邮件处理设施已就绪,您可以启动 Postfix 并让邮件开始流入;我几乎可以保证第一个包含邮件的文件夹将是您的 ~/.m/Spam

# /etc/init.d/postfix start
IMAP 服务器

IMAP 配置包括 stunnel SSL 前端和 uw-imap 后端。uw-imap 的安装有点不标准,因为默认的 Gentoo 配置不允许您通过未加密的通道构建具有明文身份验证的 uw-imap。唯一有效的默认 uw-imap 配置是支持 SSL 的配置。这不是我们在 stunnel 后面的服务器所需要的。Gentoo 允许您使用特殊的 USE 设置来解决此问题,以禁用 SSL 并启用明文密码。

Gentoo 的安装命令是

# USE="-ssl clearpasswd" emerge uw-imap

接下来,stunnel 配置文件 stunnel.conf 需要包含 IMAP 部分。编辑 /etc/stunnel/stunnel.conf

pid = /var/run/stunnel/stunnel.pid
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
cert = /etc/ssl/certs/foobar.net.pem
[imaps]
accept  = 993
exec = /usr/sbin/imapd
execargs = imapd

您可以使用以下命令为 foobar.net.pem 生成自签名 SSL 证书

# cd /etc/ssl/certs
# openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 5000
        Country Name (2 letter code) [AU]:US
        State or Province Name (full name) [Some-State]:CO
        Locality Name (eg, city) []:Highlands Ranch
        Organization Name (eg, company) [Internet Widgits Pty Ltd]:
        Organizational Unit Name (eg, section) []:home
        Common Name (eg, YOUR name) []:foobar.net
        Email Address []:me@foobar.net

# cat cakey.pem cacert.pem > foobar.net.pem

使用 Gentoo,您现在必须配置 init rc 脚本以启动 stunnel

# rc-update add stunnel default
Treo 650 设置

正如我所提到的,PalmOS 有两个不错的 IMAP 客户端。一个是 Treo 附带的标准应用程序 VersaMail。另一个是商业应用程序 SnapperMail。我的选择是后者,即使它的成本相对较高(大约 60 美元)。

这两个应用程序都允许订阅服务器上的 IMAP 文件夹层次结构并处理电子邮件附件。SnapperMail 经过了更好的测试,并且具有许多功能可以证明其额外成本是合理的。

要安装 PalmOS 应用程序并通常使用 Linux 管理我的 Treo 650,我使用 pilot-link 软件。在 Gentoo 上,使用以下命令安装它

# emerge pilot-link

我使用 pilot-link 将我的 Treo 备份和恢复到 Linux 上的目录,以及安装 SnapperMail 等应用程序。

我使用蓝牙和 PPP 将我的 Treo 连接到 Linux 笔记本电脑。您也可以使用 USB 连接。pilot-link 工具的连接通道通过 PILOTPORT 环境变量方便地定义。对于 USB 电缆,请使用以下命令

# export PILOTPORT=/dev/tts/USB1

或者对于蓝牙,请使用

# export PILOTPORT=net:any

我在我的主目录中创建一个名为 treo 的目录,并运行此命令以在安装任何软件之前备份我的 Treo

# pilot-xfer -b treo

我使用以下命令将 Treo 与此备份目录同步(增量)

# pilot-xfer -s treo

要恢复备份,请使用以下命令

# pilot-xfer -r treo

www.snappermail.com 下载 SME231.zip 以安装 SnapperMail 应用程序。解压缩文件并运行此命令

# pilot-xfer -i SnapperMail-ent.prc

Treo 650 与 Sprint 网络的配置最好通过订购 Sprint PCS Vision Professional Pack 并让 Sprint 支持人员指导您完成设置来完成。

SnapperMail 还附带一本优秀的 60 页 PDF 手册,其设置非常直观。

Peter Ziobrzynski 是一位位于加拿大多伦多的独立顾问,为加利福尼亚州旧金山以及最近在科罗拉多州丹佛市的客户提供 UNIX 和 Linux 咨询服务。Peter 拥有波兰克拉科夫理工大学工程硕士学位。他于 1980 年代初移民到加拿大,此后一直将 UNIX 用于工作和娱乐。他最近的重点是 Linux,并且持有红帽 RHCE 认证。

加载 Disqus 评论