我很难弄清楚如何为将在容器内运行的 Postfix 实例创建特定的 Postfix 配置。
以下是我的要求:
- 除非发件人来自一小组 IP 地址或发件人是本地程序,否则不允许中继(尽管如何允许容器外的程序为容器中运行的 Postfix 排队邮件是一个有趣的难题)。
- 通过一小组检查运行来自非中继 IP 地址的每一封传入邮件,如果没有全部通过则拒绝投递:
- 如果发件人 IP 在指定的 RBL 中,则拒绝它。
- 我以前没有接受过邮件的灰名单传入 IP。
- 如果目标地址的用户部分与一小组正则表达式中的任何一个都不匹配,则拒绝它。
- 如果邮件没有通过一些简单快速的 spamassassin 检查,请拒绝它。
- 对于所有本地交付,使用程序来确定最终处置。这个程序将有四个结果之一。
- 投递到不同的本地地址(Delivered-To 将更新以提供循环保护,本地投递程序将再次运行)。
- 转发到远程地址(如 gmail 帐户或其他东西)。
- 传送到特定用户(现在始终是同一用户)拥有的本地 Maildir 目录。
我只需要处理发往一个域的邮件。在某些时候,我想添加一个新域,其中所有邮件都由 Mailman 处理,尽管在投递之前拒绝任何不存在的列表地址的邮件会很不错。
是否有任何指向说明如何实现其中一个或多个目标的文档的指针?本地和运输的 Postfix 手册太迟钝,无法真正提供帮助。最好有一个文档来说明邮件通过系统的流向以及如何在各个点进行更改。
另外,虽然我可以编写自己的程序来发送到 Maildir 邮箱,但完全正确地这样做是相当棘手的,如果可能的话,我想避免它,并且让 Postfix 的部分已经知道如何处理这个问题它。
Postfix 将在容器中运行。queue 目录和 Maildir 目录将是挂载在容器内的持久文件系统。我认为实现我之前谈到的东西所需的所有程序(postgrey、spamassassin、决定如何处理本地邮件的东西)也将在同一个容器中运行。我可能必须安排 postgrey 和 spamassassin 保持的状态在容器调用中也保持不变。
我将使用 mutt 来阅读邮件。目前,我将是唯一一个将在本地发送邮件的人,尽管我将有几个不同的 Maildir 目录来发送邮件。我可能会在同一个系统上运行 Dovecot(可能容器化在不同的容器中)来执行此操作。
另外,我有几百个本地收件人地址,我希望以相同的方式处理其中的大部分。它们都符合一种模式,但一些符合这种模式的人需要与其他人区别对待。我事先知道哪个,而无需参考电子邮件的内容,因此我可以为这些创建更具体的模式。
许多项目都可以在Postfix 配置参数
smtpd_client_restrictions
部分中介绍这是我的客户限制:
此配置删除了大约 99% 的传入垃圾邮件。该列表是一个有序列表。每张支票都会落到下一张。一旦发生故障,邮件就会被拒绝。我发现我需要为我的规则创建一些例外,这些例外包含在
client_checks
db 文件中。此异常文件如下所示:
制作纯文本柱状文件后,您需要发出
postmap
命令,以便将文件输出为 db 文件。具有一个或两个收件人的系统的转发规则应该很容易通过别名设置。
文件格式和过程几乎相同。逐行输入别名,然后发出
postaliases
命令来创建数据库。对于更复杂的别名,可以在别名表中包含正则表达式: