黑客和 / - 垃圾邮件:火腿黑客

作者:Kyle Rankin

仔细想想,所有垃圾邮件实际上都是黑客火腿。对于这个词的两种含义来说都是如此。在食物意义上,它是由切碎的猪肉块组成的,这些猪肉块被重新组装以类似于(某种程度上)火腿。在电子邮件意义上,垃圾邮件只是切碎的文本位,它们被重新组装,以便在某种程度上类似于您想要阅读的合法电子邮件(火腿)。

无数文章谈论了您可以使用的开源工具来减少收件箱中垃圾邮件的数量,因此我不会再写一篇关于 SpamAssassin、Razor/Pyzor、垃圾邮件黑名单 (SBL) 甚至灰名单的文章,尽管如果您尚未这样做,我建议您研究一下这些对策。相反,我假设您已经采取了这些措施,因此我将讨论一些额外的工具,这些工具使垃圾邮件管理变得更加,嗯,可管理。

Postfix 中的虚拟地址

我不是基于 Web 的电子邮件的忠实粉丝,尽管在很长一段时间里,我确实认为它是捕获垃圾邮件的好工具。我会设置一个免费的 Web 电子邮件帐户,并且每当我在网上购买东西时,我都会使用该电子邮件地址作为联系方式。当然,每当我购买新东西时,我都必须先进入帐户并清除自上次使用该帐户以来积累的大量垃圾邮件。另一个缺点是我仍然不知道哪些公司出卖了我的电子邮件地址,哪些公司保护了它。

从那时起,我发现了一个更好的解决方案,即 Postfix 中的虚拟地址。既然我运行自己的邮件服务器,我可以免费设置任意数量的电子邮件地址,并将它们全部放入同一个收件箱。这不仅使以后更容易找到我的所有在线收据,而且由于我设置它的方式,我可以轻松找出哪些公司出卖了我,并且只阻止他们的电子邮件。

Postfix 中的虚拟地址的工作方式与大多数邮件服务器中的别名非常相似。它为您提供了一种设置大量 To 地址的方法,您的邮件服务器将接受这些地址,并将这些地址映射到一个或多个服务器上的真实地址,甚至将电子邮件转发到完全不同服务器上的地址。您所要做的就是设置一个新的数据库,定义虚拟地址和真实地址之间的映射,然后告诉 Postfix 使用它。

对于此示例,让我们假设我有一个邮件服务器,该服务器已接受 example.net 的邮件,而我的个人帐户是 kyle@example.net。每当我在社交网络或在线零售商(任何可能向我发送垃圾邮件的东西)上设置新帐户时,我都会设置一个以他们和年份命名的新虚拟地址。假设我在 CompanyX 的网站上创建了一个帐户,这样我就可以购买一件 T 恤,并在 TweetBookSpace 上注册了一个新个人资料——这个新的时尚社交网络、手机和 LOLcats 网站。

首先,我将创建一个名为 /etc/postfix/virtual 的常规文本文件,其中包含以下条目

# System accounts that should exist
kyle@example.net                  kyle@localhost
root@example.net                  kyle@localhost

# Spam-catching accounts
companyx2009@example.net          kyle@localhost
tweetbookspace2009@example.net    kyle@localhost

左列中的所有地址都对应于 Postfix 将接受邮件的地址,右列告诉 Postfix 将邮件转发到哪个真实帐户。除了 @localhost 地址之外,我还可以将其转发到其他外部电子邮件地址,甚至列出用逗号分隔的多个地址。一旦我设置了文件并在我进行任何更改时,我需要对它运行 postmap 命令,以便它创建 Postfix 实际将读取的自定义数据库文件

$ sudo postmap /etc/postfix/virtual

最后,我只需要在我的 /etc/postfix/main.cf 中添加一些新行,以定义我将为我的虚拟别名使用哪些域,并告诉它使用我刚刚创建的文件。我在这里只添加了一个域,但是如果您已经在 mydestination 行中定义了多个域,请将您想要由此文件管理的域尽可能多地移动到 virtual_alias_domains 设置中

virtual_alias_domains = example.net
virtual_alias_maps = hash:/etc/postfix/virtual

然后,我可以运行sudo postfix reload重新加载我的设置。如果我开始注意到我收到了发送到 companyx2009@example.net 的垃圾邮件,我所要做的就是注释掉 /etc/postfix/virtual 中的该行,然后再次运行 postmap。尽管没有必要在电子邮件地址中添加年份,但我发现这在我定期浏览旧的临时电子邮件地址并注释掉它们时很有帮助——毕竟,下次我想订购东西时,我总是可以取消注释它们。

Mutt 用户的垃圾邮件技巧

我知道很多人使用花哨的图形电子邮件程序,其中许多程序也有花哨的按钮和图标,当电子邮件可能是垃圾邮件时会闪烁。好吧,如果您从我之前的专栏中还不知道,我非常喜欢 mutt,我不想被排除在所有这些花哨的垃圾邮件管理技术之外。再一次,mutt 强大的自定义功能派上了用场。

为临界垃圾邮件着色

尽管我确实在我的个人帐户上设置了垃圾邮件过滤器,但有时消息会突破我的防御。当您调整垃圾邮件阈值时,这始终是一种微妙的平衡行为,因此我不仅想查看通过的垃圾邮件与阈值的接近程度,而且还想知道我的任何合法电子邮件是否接近阈值。

我已将 SpamAssassin 配置为通过自定义 X-Spam-Status 标头将分数添加到我的电子邮件标头中。假设我的垃圾邮件阈值为 6 分;然后我设置了两个规则:一个规则是将得分为 2 或 3 的任何消息着色为红色,另一个规则是将得分为 4 或 5 的消息着色为鲜红色。这样,两种类型的消息都会突出显示——尤其是刚好在我的阈值边缘的消息。以下是我添加到我的 mutt 配置中的 folder-hook 规则

folder-hook . "color index red default '~h 
 ↪\"X-Spam-Status:.*score=(2|3)\.\"'"
folder-hook . "color index brightred default '~h 
 ↪\"X-Spam-Status:.*score=(4|5)\.\"'"

现在,像很多人一样,我有一个专门的垃圾邮件文件夹,以便我可以训练 SpamAssassin。我时不时地进入那里寻找任何误报,因此我也想突出显示任何高于阈值的消息。以下规则将任何得分为 6、7 或 8 的消息着色为洋红色

folder-hook . "color index magenta default '~h
 ↪\"X-Spam-Status:.*score=(6|7|8)\.\"'"
快速保存到垃圾邮件文件夹的宏

现在,每当我浏览我的收件箱并看到带有可疑主题行的消息时,如果我注意到它是红色或鲜红色,我可能甚至懒得打开它。因为我知道它接近阈值,所以我只需将其移动到我的垃圾邮件文件夹。在 mutt 中,您只需按几下按键即可完成此操作,但这当然不会阻止我进一步自动化它。毕竟,当我可以将 S 键绑定到自动保存到我的垃圾邮件文件夹时,为什么要按几下按键呢?我所要做的就是将以下内容添加到我的 mutt 配置中

# make S automatically save spam to the spam folder
macro index	S "simaps://mail.example.net/INBOX.spam"
macro pager	S "simaps://mail.example.net/INBOX.spam"

当然,更改imaps://mail.example.net/INBOX.spam以便它指向您的 IMAP 服务器上的垃圾邮件文件夹,但是一旦您这样做,您既可以按 S 将单个消息保存到垃圾邮件文件夹,也可以使用 T 键标记收件箱中的所有垃圾邮件,然后按 ;S 一次性将所有垃圾邮件保存到垃圾邮件文件夹。

当然,如果我们一开始就没有垃圾邮件就好了,但是尽管我可以选择在杂货店购买哪种罐头食品,但我可能永远无法完全摆脱收件箱中的垃圾邮件。毕竟,一个人切碎的猪肉副产品是另一个人的美味罐装火腿替代品。如果人们不订购那些男性增强药,他们就不会宣传它们。至少通过一些额外的步骤,我可以减少管理垃圾邮件的时间。

Kyle Rankin 是旧金山湾区的一名高级系统管理员,也是许多书籍的作者,其中包括 O'Reilly Media 出版的 Knoppix HacksUbuntu Hacks。他目前是 North Bay Linux 用户组的主席。

加载 Disqus 评论