Postfix 中使用 Mailman 拒绝早期邮件

Postfix 中使用 Mailman 拒绝早期邮件

我在一台机器上安装了 Postfix,它是以下邮件的唯一最终目的地:

  1. 机器的主机名(mail.example.org)和localhost
  2. Mailman 列表lists.example.org
  3. 多个虚拟域

相关设置main.cf为:

myhostname = mail.example.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination = localhost, $myorigin
relay_domains = $mydestination, lists.example.org
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

# Virtual domains
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains = hash:/etc/postfix/virtual_domains
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailboxes
virtual_alias_maps = hash:/etc/postfix/virtual_aliases
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# mailman configuration
mailman_destination_recipient_limit = 1
transport_maps = hash:/etc/postfix/transport

smtpd_relay_restrictions = permit_mynetworks,
  reject_invalid_hostname,
  reject_unknown_sender_domain,
  reject_unknown_recipient_domain,
  reject_unauth_destination,
  reject_unlisted_recipient,
  reject_rbl_client zen.spamhaus.org,
  permit

目前,邮件lists.example.org通过以下设置路由到 Mailman transport_maps

lists.example.org mailman:

这可行,但这意味着如果将电子邮件发送到未知列表,则 Postfix 会接受该邮件,然后在 Mailman 处理时将其退回。出于多种原因(尤其是减少反向散射和尽早拒绝邮件),我希望 Postfix 在看到与Mailman 列表RCPT TO匹配但不对应的邮件时立即拒绝邮件。@lists.example.org

我认为我可以通过创建一个包含所有 Mailman 列表别名的文件并将其指定为来实现此结果relay_recipient_mapsmain.cf但是,我的理解是relay_recipient_maps适用于relay_domains,并且我不希望$mydestination地址受到影响。

所以我的两个相关问题是:

  1. 我是否应该$mydestination从中删除relay_domains?如果删除的话,我现有的别名还能继续起作用吗?
  2. 如果relay_domains设置为lists.example.org,会relay_recipient_maps达到我想要的结果吗?

或者,如果 Postfix 有办法在接受邮件进行投递之前查询 Mailman 并获得响应(也许使用队列前过滤器 - 这是我处理发送给 SpamAssassin 的邮件的方式),那也能实现我想要的效果。

提前致谢。 :-)

答案1

我花了一段时间才完成这个任务,但我遵循的步骤如下:

  1. $mydestination从......中去除relay_domains
  2. 将所有 Mailman 别名的列表添加到名为 的散列文件中/etc/postfixo/relay_recipient_maps
  3. 添加relay_recipient_maps = hash:/etc/postfix/relay_recipient_mapsmain.cf

在进行任何垃圾邮件检查之前以及将邮件交给 Mailman 之前,发送到不存在列表的电子邮件现在作为初始 SMTP 事务的一部分被拒绝。

相关内容