我的服务器:
- CentOS 7.6
- Exim 4.91-5
我希望实现什么目标
使用 Exim 我想默默地丢弃来自用户设置列表的传入电子邮件通配符匹配。 SpamAssassin 和其他工具不适合这种情况。
例如:
我想阻止来自以下域名的任何电子邮件.icu
:
到目前为止我读了什么?
为此,我已阅读这个答案以及进出口文件然而我的第一次尝试失败并导致全部发送到服务器的电子邮件被拒绝。
我的编辑方法
我的系统有一个额外的 Exim 列表自定义过滤规则在文件夹中;/usr/local/cpanel/etc/exim/sysfilter/options/
我在该文件夹中的文件如下:
#block email domains
if
( $h_from: matches ".*@.*\.opskee\.gq\$"
or $h_from: matches ".*@.*\.icu\$" )
#then noerror seen finish
then
deliver "SpamTest <[email protected]>"
seen finish
endif
上述 PCRE 的目的:
阻止任何来自域以<anything>@<anything>.opskee.gq
或结尾的电子邮件<anything>@<anything>.icu
。
测试
我尝试使用中的参考来测试系统其他问题但这只是挂起了 SSH。
/usr/sbin/exim -bF <scriptfile> -f <sender>
问题:
- 我的上述 PCRE 是否正确(或者至少避免了明显的进出口特定错误)?
<sender>
可以为上述提示中的命令 提供/链接完整的示例吗?- 一些文档(第三方)在
if
声明周围引用括号(我目前有这个),而其他文档则没有;哪个更好?
答案1
正确的方法是使用exim的ACL而不是过滤。
找到以这样的行开头的配置部分:
acl_rcpt:
您的配置可以不同,但 acl、rcpt 和分号应该存在。然后应该有很多块,从accept、deny、require等动词开始。
您必须添加新块:
deny condition = ${lookup{$sender_address}nwildlsearch{/path/black.list}{yes}}
message = Not that time, sorry.
文件 /path/black.list 应包含禁止的地址和/或正则表达式,每行一个:
## You can block the certain sender
^some_spammer@domain\.icu
## Or everybody from some domain
^.*@domain\.icu
## Or even all top-level domain at once
^.*@.*\.icu
这.
是一个 PCRE 令牌,表示any symbol
,.*
表示any number of any symbols
while\.
表示the dot
。严格地说,该模式^.*@domain\.icu
意味着:
Sender address starting with any number (0..n) of any symbols,
then symbol '@',
then 'domain' substring,
and ending with '.icu' symbols
字符串[email protected]
将与 RE 匹配。
请记住,ACL 规则按照它们在配置文件中定义的顺序应用。您想要实现的 ACL 应放置在 RCPT 阶段的 ACL 定义的顶部。
重新配置后重新启动exim。