sendmail R命令正则表达式向Kcheckaddress regex -a @ MATCH添加排除项

时间:2017-02-22 18:59:21

标签: regex sendmail spam-prevention

我正试图在R command的sendmail正则表达式中添加一些排除项。以下配置&正则表达式工作:

LOCAL_CONFIG
#
Kcheckaddress regex -a@MATCH
    [a-zA-Z_0-9.-]+<@[a-zA-Z_0-9-]+?\.+[a-zA-Z_0-9.-]+?\.(us|info|to|br|bid|cn|ru)
LOCAL_RULESETS
SLocal_check_mail
# check address against various regex checks
R$*                             $: $>Parse0 $>3 $1
R$+                             $: $(checkaddress $1 $)
R@MATCH                         $#error $: "553 Your Domain is Blocked for Unsolicited Mail"

所以我们阻止anything@subdomain.domain.us而不是anything@domain.us。我想为城市和学校添加排除项,以便允许user@ci.somedomain.us和user @ subdomain。[state] .us。 (注意,[state]表示50个州中的1个,包括DC)。

此正则表达式无法正常工作(使用CA for California作为测试):

(?!.*\@ci\..+?\.us$)(?!.*\@*\..+?\.ca.us$)([a-zA-Z_0-9.-]+@[a-zA-Z_0-9-]+?\.+[a-zA-Z_0-9.-]+?\.(us)$)

我收到此错误:

sendmail -bt
/etc/mail/sendmail.cf: line 199: pattern-compile-error: Invalid preceding regular expression

令我感到惊讶的是,为了获得正确的正则表达式,它需要前导空格,而且我不确定正则表达式的+<@部分的功能是什么?什么是少于(&lt;)在这做什么?是否需要将其添加到更大的正则表达式中?

编辑:我很确定sendmail's R & K命令不支持负面预测。所以,如果有人能帮助以sed友好格式重写正则表达式,我将不胜感激!

2 个答案:

答案 0 :(得分:1)

您的标准不明确,您说阻止所有子域名但是也允许它们? 除非您专门使用用户名,否则请勿与之匹配。

块  sub.domain.us 允许  sub.sub.domain.us 或domain.us

Ksubsubdomains regex -a@MATCH @([a-zA-Z_0-9-]+\.){2}us

Ssubsub
R$+             $: $(subsubdomains $1 $)
R@MATCH         $#error $: "553 No Thank You."



# sendmail -bt                     
Enter <ruleset> <address>
 > subsub a@sub.sub.us
 subsub             input: a @ sub . sub . us
 subsub           returns: $# error $: "553 No Thank You."
> subsub a@sub.sub.sub.us
subsub             input: a @ sub . sub . sub . us
subsub           returns: a @ sub . sub . sub . us


since states have 2 letter abbreviations, block sub domains of 3 or more characters 

Ksubstates regex -a@MATCH @[a-zA-Z_0-9-]+\.([a-zA-Z_0-9]){3,}+\.us

答案 1 :(得分:0)

我最终采用了不同的方法作为suggested on the SpamAssassin mailing列表。我使用了sendmail的access.db。由于locality namespaces我想要的白名单都是表格的第四级域名注册&#34; <organization-name>.<locality>.<state>.us&#34;我只为下面的所有状态创建了50个条目,从拒绝任何东西开始:

From:us     REJECT
From:ma.us  OK
From:mi.us  OK

我没有看到任何误报,即错过了垃圾邮件,因为现在启用了几天。