The Answer Guy 的技巧

作者:James T. Dennis
Netscape 邮件阻止

我需要拒绝接收来自特定人员的电子邮件。如何配置 Netscape 和/或 CND1.0 以将此人的邮件退回给他们?—Mitch,阿拉巴马州,移动市

答案是...

我将使用 procmail,这是一种专门为处理邮件而编写的小型编程语言。CND 默认使用 procmail 作为“本地投递代理”。这意味着 sendmail 会将任何发送给本地帐户的邮件传递给 procmail,然后让 procmail 完成最终投递到您的邮箱,/var/spool/mail/您的登录名。同时,procmail 会检查您主目录中是否存在 .procmailrc 文件,并为您执行一些所有权和权限检查。

.procmailrc 文件的作者可以指定各种设置和子句,这些设置和子句称为“配方(recipes)”,并且还可以通过使用各种 INCLUDE 指令来模块化文件。这是一个简单的示例,应该可以帮助您入门

:0 hr
* ^From.*spammer.you.despise@spamhaven.com
* !^FROM_MAILER
* !^FROM_DAEMON
* !^X-Loop: ${USERNAME}i@`hostname`"
| (formail -r -A"X-Loop:
${USERNAME}@`hostname`" \
-A"Precedence: junk";\
   echo "Your mail is not welcome here."\
   echo "Please don't mail me again."\
   echo\
   cat ~/your.signature.or.flame
)

:0 将此标记为新配方——每个新配方都以这一行开头。该行上的 hr 标志告诉 procmail 将消息的哪些部分传递给您的操作行(即,以管道符 | 开头的行)。

  • h 表示:“给我标头。”

  • r 表示:“将传入数据视为原始数据。”

给出 r 标志是为了防止您的响应在发件人未能在其消息末尾放置空行时失败。

脚本中的以下四个“星号”行是条件。第一个指定标头将显示消息“来自”您的垃圾邮件发送者,即您不需要的发件人。此地址将完全匹配任何包含您的目标电子邮件地址的“from”或“From:”行。脚本的下两行确保您不会响应守护程序和邮件程序(邮件列表)。最后一行 *,您应该用您的用户名和主机名填写,确保您不会响应您自己的响应。包含这三个条件是为了保护您的脚本不被欺骗执行不良操作。将它们视为您编写的任何自动回复器的最低开销。

脚本的下一行,以“|”管道字符开头,描述要执行的操作。在 procmail 中,有三种类型的操作

  1. 文件名指定一个 mbox(兼容 elm、pine 或 mailx)文件夹,用于存储消息。

  2. 目录名指定一个 mhmmdf 文件夹用于邮件存储。mhmmdf 为其文件夹目录中的消息使用不同的命名方案,但除非您使用它们的邮件用户代理之一,否则您无需担心此差异。

  3. !(感叹号)行指定要将消息退回到的电子邮件地址。|(管道符)行指定要通过本地程序过滤消息。

formail 是 procmail 包附带的程序。它“格式化邮件标头”。这个特定的 formail 命令格式化一个“回复”(-r)标头,并添加两个额外的标头行——一个标准的“Precedence: junk”行和一个个人的“X-”行。RFC822 规范允许您使用 X- 行将自定义信息嵌入到标头中。也是在 formail 命令行中,您可以通过将您的响应路由回您自己的脚本来防止攻击,即邮件循环。

echocat 语句在 formail 行之后提供输出,这些输出附加在邮件标头之后,并成为您的响应正文。您可以添加额外的 echo 行,也可以创建一个文件并使用 cat 在此处添加它。

如果您是 procmail 的新手(鉴于您的问题几乎可以肯定——自动回复器是 procmail 用户学习的首批内容之一),您可能会担心破坏某些东西并丢失一些邮件。为了保护自己,您需要使用以下简单配方启动您的 .procmailrc

:0 c
fallback

如果此配方是脚本中的第一个配方,则默认情况下,它会将每条传入消息的副本附加到您的 ~/Mail 目录中名为 fallback 的文件中。您可以将该文件夹的内容与您的收件箱进行比较,直到您确信一切都按您的预期工作为止。

请阅读 procmail 和 procmailex(示例)手册页以获取更多详细信息。作者 Stephen van der Berg 还编写了一个名为 SmartList 的自动化邮件列表管理包,在我认识的使用过它的人中,它备受推崇。我比 Majordomo 更喜欢 SmartList。—Jim

处理 POP3 服务器上的电子邮件

是否有任何方法(或任何程序)不仅可以从一个帐户的 POP3 服务器获取我的电子邮件,还可以通过 from:subject: 行将其分发给系统上的多个用户?

也许 popclient 可以获取邮件并保存到 temp。然后,程序可以遍历保存的邮件并说,“嗯,这封邮件来自 johndoe@linux.org,它发送给 root——然后下一封邮件来自 mike@canoe.net,它发送给 Dave。”是否有程序可以做到这一点?—Moe Green,starved@ix.netcom.com

答案是...

可以编写 procmail 脚本来为您执行此类操作。虽然我不推荐这种方法,但我会告诉您如何操作。

当前版本的 popclient 称为 fetchmail,因为它支持 IMAP 和其他一些邮件存储和转发协议。fetchmail 的默认设置是从您的 POP 或 IMAP 服务器获取邮件,并将其馈送到您本地主机上的 smtpd (sendmail)。这意味着将自动完成由别名或 .forward 文件完成的任何特殊处理(尤其是通过 procmail 脚本的任何处理)。

可以覆盖该功能,并通过管道或文件馈送消息。也可以使用 procmail 或任何脚本语言来解析和分派文件。使用 procmail 以外的任何东西都需要您了解很多关于 RFC822(Internet 邮件标头的标准)以及一般电子邮件的知识。

我写了一篇关于 procmail 的文章,发表在二月份的 Linux Gazette 第 14 期中。它的要点也可以在我的邮件服务器上找到,可以通过发送邮件至 info@starshine.org,主题为 procmailmailbot 来获取。

我不建议以这种方式使用 procmail 的原因是它违反了 Internet 电子邮件的意图和设计。更好的解决方案是找到 UUCP(Unix-to-Unix CoPy)服务提供商,或者至少是 SMTP/MX(简单邮件传输协议)服务提供商。UUCP 是为断开连接(拨号)主机和网络提供电子邮件的 正确方法。它是在 25 年前设计和实施的,Internet 上的所有邮件系统都知道如何网关到 UUCP 站点。

至于断开连接的主机/网络的 SMTP/MX 服务,在过去几年中,已经开发了各种破解 sendmail 和 DNS(域名服务)配置的方法,其中包含各种 shell 脚本和自定义程序来支持它们。所有这些方法都提供与通过 TCP 的 UUCP 邮件基本相同的服务,但不符合任何标准,这意味着您从一个 ISP 学习和配置的任何内容可能都无法在下一个 ISP 上使用。—Jim

安全问题

最近,一个黑客侵入了我在 Internet 上的 Linux 系统。他没有造成太多破坏,但我想他确实关闭了系统日志记录,因为我看不到他做了什么。现在我无法让它再次工作。这是到目前为止我所做的

  1. 我已经使用 ps 确保 syslogd 程序正在运行。

  2. 我已经阅读了 syslogd.conf 文件,以确保它记录所有内容以及记录到哪里。

  3. 我已经检查了日志文件的权限。

  4. 我对 syslogd 进程执行了 kill -HUP,它将 restart 写入日志。

  5. 当我运行 logger 时,它什么也不做(没有日志条目,没有错误)。

  6. 我所有写入 syslog 的 C 程序都不再写入。

任何人有什么好主意接下来该怎么做吗?—Jayjay@shadow.ashpool.com

答案是...

我有,但今晚打字对我来说太麻烦了。但是,我强烈建议您在您认为系统的 root 权限已被泄露时,从头开始重新安装操作系统和所有二进制文件。我知道这是一个耗时的建议,但这是真正确保安全的唯一方法。

我还推荐 tripwire 程序,可以在 ftp.cs.perdue.edu 的 COAST 存档及其镜像中找到。

如果您继续遇到系统安全问题,请随时写信给我 jimd@starshine.org。

很抱歉回复这么晚。我这个月一直忙得不可开交。—Jim

关于安全的更多信息

我发现黑客用数据包嗅探器替换了我的 syslogd。我认为他复制了 syslogd 代码,并用他的嗅探器替换了其中的一部分。它似乎有一些功能,但不多...

我还发现在我的 /tmp 目录中有一个 SUID 版本的 bash。我的想法是这是他最初获得 root 访问权限的方式。—Jay

并不太令人惊讶。他可能使用了 rootkit;但是,他显然没有很好地掩盖他的踪迹。您应该认为本地网络上所有系统的所有密码都已泄露。强制全面更改密码,并考虑安装 sshstelnet。两者都是 rlogin/rshtelnet 的安全加密替代品。

他可能是通过“Leshka”sendmail 漏洞进入的,该漏洞允许任何 shell 用户在任何具有 SUID root 副本 sendmail(版本 ~8.6.x 到 8.7.x?)的系统的 /tmp/ 中创建 root 拥有的 SUID shell。该漏洞涉及 sendmail 对 ARGV[0] 的处理及其随后的 SIGHUP(断开连接信号)处理。所有使用早期版本 sendmail 的人都应升级到 8.8.3 或更高版本(详见 http://www.sendmail.org/)。

此系统和同一 LAN 网段上的其他系统对您的业务有多重要?我认真考虑聘请一位合格的顾问进行为期一天的风险评估和审计。不幸的是,您可能至少需要为任何值得交谈的人支付 125 美元/小时,而且那里有很多“安全顾问”是江湖骗子,所以要小心。—Jim

本文最初发表于 LinuxGazette.com 第 14 期,这是一个以前由 Linux Journal 出版的在线电子杂志。

Jim Dennis 是 Starshine Technical Services 的所有者。他的专业经验包括为 Quarterdeck、Symantec/Peter Norton Group 和 McAfee Associates 等软件公司提供技术支持、质量保证和信息服务 (MIS) 工作,以及在较小的 VAR 中任职。他从 0.99p10 版本开始使用 Linux,并且是不断变化的邮件列表和新闻组列表的积极参与者。他刚刚开始合作编写关于 Unix 系统管理的第二版书籍。Jim 是一位狂热的科幻小说迷——最近在阿纳海姆的世界科幻小说大会上结婚

加载 Disqus 评论