如果 From 标头中的友好名称与子字符串匹配,则删除 Exim ACL

如果 From 标头中的友好名称与子字符串匹配,则删除 Exim ACL

我收到了一种特别可怕的垃圾邮件,可以通过发件人标头中的纯文本名称轻松识别。

基本上格式如下:

From: "foo" <[email protected]>

我想编写一个 ACL 数据条件来检查是否foo在发件人标头中。你会怎么做?

我相信它会在数据访问控制部分。

答案1

根据标题字段有条件地丢弃邮件:

进出控制配置文件

system_filter = /etc/exim/system_filter.conf

系统过滤器配置文件

if $header_from matches "foo.*<"
or $header_from contains "@morespam.com"
or $h_subject contains "Viagra"
then
  seen finish
endif

第一个条件仅当 foo 出现在 From 标头的友好部分时才会匹配。正则表达式不区分大小写。

最好在进行任何更改后测试过滤​​器文件。语法错误system_filter.conf会导致传入消息暂时无法投递。

测试

exim -bF /etc/exim/system_filter.conf <spam.eml

垃圾邮件邮件列表

Subject: This is Spam Viagra
From: Fred Foo Jones <[email protected]>
To: John Smith <[email protected]>
Date: Mon, 22 Aug 2016 07:26:20 -0500

This is the body of the e-mail.

测试将告诉您消息是否会被传递、丢弃(“已完成”),或者过滤文件中是否存在错误(您会收到类似的消息,Filter error: unknown filtering command "asldkf" near line 75 of filter file


虽然不是 ACL 解决方案,但对我来说维护起来很容易。我只需要在条件发生变化时更新 system_filter.conf。

我将其放在exim.confsystem_filter文件(主要配置设置)的顶部。seen finish黑洞命令;它指示 Exim 已完成消息处理。

参考:Exim 过滤文件

答案2

我认为 Jim U 的答案可能是实现我的目标的更好方法,但根据记录,以下是我在 DATA ACL 中执行此操作的方式:

acl_check_data:
  # Blacklist if friendly name matches any patterns.
  drop
    condition = ${if match{$h_from:}{"foo"}}
    message = Blacklisted.
    log_message = Blacklisted nasty.

这会导致550 Blacklisted.SMTP 客户端出现错误并立即关闭连接。

相关内容