对于非本地发件人,让 Exim 将退回邮件发送给邮政局长而不是发件人

对于非本地发件人,让 Exim 将退回邮件发送给邮政局长而不是发件人

我有几个电子邮件别名会转发到外部主机。目前,如果外部主机拒绝某封邮件,Exim 会生成一封退回邮件并将其发送给原始发件人。这很糟糕,因为如果外部主机将该邮件作为垃圾邮件拒绝(常见情况),那么我就是反向散射垃圾邮件的来源。

因此,如果发件人不是本地人,我想将退回邮件发送给邮政局长(我)。或者,发送全部退回给邮政局长就足够了。

Exim 文档提示可以做到这一点(“当消息传递失败时...Exim 会向原始发件人或备选配置地址“,强调添加),但我找不到如何操作。

例如,以下是显示正在创建反向散射垃圾邮件的日志摘录(在这种情况下,假定的源服务器不接受连接)。[email protected]是一封垃圾邮件的假定发件人[email protected],该垃圾邮件随后转发到[email protected];然后 GMail 拒绝该邮件,我的服务器会创建一个退回到 的邮件[email protected]。我希望该退回邮件转到[email protected]。(用户名已模糊处理;日志的其余部分是逐字记录的。)

2011-10-03 12:03:08 1RAkyw-0000cj-45 <= [email protected] H=(gyajnj.com [113.190.35.111] P=esmtp S=33927 [email protected]
2011-10-03 12:03:09 1RAkyw-0000cj-45 ** [email protected] <[email protected]> R=dnslookup T=remote_smtp: SMTP error from remote mail server after end of data: host gmail-smtp-in.l.google.com [74.125.47.26]: 552-5.7.0 Our system detected an illegal attachment on your message. Please\n552-5.7.0 visit http://mail.google.com/support/bin/answer.py?answer=6590 to\n552 5.7.0 review our attachment guidelines. i3si13239001yhk.107
2011-10-03 12:03:09 1RAkyz-0000cm-H5 <= <> R=1RAkyw-0000cj-45 U=Debian-exim P=local S=35124
2011-10-03 12:03:09 1RAkyw-0000cj-45 Completed
2011-10-03 12:03:30 1RAkyz-0000cm-H5 nacha.net [64.212.215.180] Connection timed out
2011-10-03 12:03:30 1RAkyz-0000cm-H5 == [email protected] R=dnslookup T=remote_smtp defer (110): Connection timed out

相关路由器如下:

dnslookup:
  debug_print = "R: dnslookup for $local_part@$domain"
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  same_domain_copy_routing = yes
  # ignore private rfc1918 and APIPA addresses
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
                        172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
                        255.255.255.255
  no_more

答案1

有些规则很愚蠢,因为它们造成的伤害大于好处!提倡和制定这些规则的人都知道这一点。我更关心邮政局长的道德而不是愚蠢的规则。我讨厌愚蠢的规则,当然也讨厌制定这些规则的人。如果你和我一样,知道后果(见上文)并想破坏规则,那么当然,

1)建立发件人和收件人验证来确保自己的安全,或者

2) 使所有空的 postmaster 退回失败或冻结。使用 exim 系统过滤器执行此操作

system_filter = /etc/exim/screwtherules.exim
vi /etc/exim/screwtherules.exim
if $sender_address is ""
then
if ${lookup{${extract{2}{@}{$recipients}}}lsearch{/etc/localdomains}{yes}{no}} is "no"
then
fail text "Delayed bounce message ignored"
seen finish
endif
endif

3) 或者在 acl_smtp_data 检查时创建 ACL,以转发、拒绝或冻结发送到或不发送到特定主机的空退回电子邮件。您可以按照中所述提取收到的标头信息https://grepular.com/Exim_Trick_to_Extract_Received_Header_IP_Addresses

答案2

要做到这一点,可以使用errors_to路由器中的指令。我相信 Exim 还支持一些条件来有选择地执行此操作。

答案3

您的做法违反了 RFC 5321,您必须将邮件投递或退回给发件人。只有非常有限的例外情况:https://www.rfc-editor.org/rfc/rfc5321#section-6.2

所以你有三个选择

  1. 将所有退回邮件发送给邮局局长
    这是无效的。没有例外。因为有些情况下,您会丢弃所有发件人的合法退回邮件(超出配额、磁盘错误等)。合法客户和邪恶的垃圾邮件发送者。
  2. 将中继邮件的退回邮件发送给邮件管理员
    这是合法的。但是它留下了一个漏洞,您可以丢弃与内容违规(垃圾邮件、病毒)无关但与用户未知、邮箱已满等相关的退回邮件。
  3. 将指示内容违规的中继邮件退回给邮政局长
    完美的解决方案,但引入了扩展配置。

选择选项 3。但更好的方法是禁止转发邮件或在转发这些邮件之前增加垃圾邮件过滤。

相关内容