我正试图在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友好格式重写正则表达式,我将不胜感激!
答案 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
我没有看到任何误报,即错过了垃圾邮件,因为现在启用了几天。