我如何使用通配符发送邮件TLS_Rcpt?

sendmail允许一个地方限制TLS对话。 我想检查发送到example.com的消息是否发送到具有* .messagelabs.com证书的服务器。 我想防止DNS欺骗和MitM。 如果messagelabs只有一个容易的服务器:

TLS_Rcpt:example.com VERIFY:256+CN:mx.messagelabs.com 

然而,messagelabs拥有大量不同服务器的服务器和集群,并具有唯一的IP和相同名称的证书。 所有这一切都很好,我只是想检查我给的邮件服务器是authentication属于messagelabs。

我努力了

 TLS_Rcpt:example.com VERIFY:256+CN:messagelabs.com TLS_Rcpt:example.com VERIFY:256+CN:*.messagelabs.com TLS_Rcpt:example.com VERIFY:256+CN:.*.messagelabs.com 

但我得到的错误

 CN mail31.messagelabs.com does not match .*.messagelabs.com 

我该怎么做? 这是我们经常性的请求(主要是像TLS_Rcpt这样的configuration:example.com VERIFY:256 + CN:*。example.com),所以我准备修改sendmail.cf,但是我无法理解

 STLS_req R $| $+ $@ OK R<CN> $* $| <$+> $: <CN:$&{TLS_Name}> $1 $| <$2> R<CN:$&{cn_subject}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2> R<CN:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " CN " $&{cn_subject} " does not match " $1 R<CS:$&{cert_subject}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2> R<CS:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " Cert Subject " $&{cert_subject} " does not match " $1 R<CI:$&{cert_issuer}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2> R<CI:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " Cert Issuer " $&{cert_issuer} " does not match " $1 ROK $@ OK 

Sendmail 8.14.7(即将升级到8.15.2)。

使sendmail.cf将${cn_subject}的主机部分存放在${cn1_subject}
它使完成实施几乎微不足道。

警告:在未在testing环境中部署它之前,请在news:comp.mail.sendmail征求意见。 它可能会工作,但sendmail使避免“意想不到的副作用”比我准备“投资”更多的辛苦。 我用sendmail-8.15.2“干”testing了它。

访问条目:

 TLS_Rcpt:example.com VERIFY:256+CN1:messagelabs.com 

sendmail.mc修复以支持上面的条目

警告:记住R行与RHS之间的TAB(\ t)。
这只是通过sendmail.mc更加肮脏的实现。

 define(`_LOCAL_TLS_RCPT_')dnl LOCAL_RULESETS SLocal_tls_rcpt R$* $: $&{cn_subject} R$-.$+ $@ $(macro {cn1_subject} $@ $2 $) R$* $@ $(macro {cn1_subject} $@ $) # Ruleset continued STLS_req R<CN1:$&{cn1_subject}> $* $| <$+> $@ $>"TLS_req" $1 $| <$2> R<CN1:$+> $* $| <$-:$+> $#error $@ $4 $: $3 " CN-1 " $&{cn_subject} " does not match " $1 ROK $@ OK divert(0)dnl 

说明:

  1. 使Local_tls_rcpt规则集存储${cn_subject}中的“之前第一个点”部分剥离${cn1_subject}
  2. TLS_req规则集的“额外部分”中添加由CN1前缀触发的${cn1_subject}检查

示例脚本来testing它

 #!/bin/sh # -C sendmail-test.cf -- use non standard cf file # -d60.5 -- trace (access) map lookus # -d21.12 -- trace R lines rewriting sendmail -C sendmail-test.cf -bt -d60.5 <<END .D{verify}OK .D{cn_subject}mail31.messagelabs.com .D{server_name}mail31.messagelabs.com tls_rcpt [email protected] END 

这不完全是对这个问题的回答,但是在我看来,你正在以艰难的方式做事。

Sendmailconfiguration的编写方式是优先parsing该configuration的软件,而不是简单的人工configuration和维护。 近几十年来,这样做根本没有什么好的理由。

Sendmail在15年前是一个非常神秘的遗迹。 有些Linux发行版仍然提供默认configuration,如果默认configuration适合你,那也可以,但是一旦你发现自己做了几分钟的任何事情,你最好把sendmail扔出去,安装一个现代的MTA 。

大约15年前,qmail可能仍然是一个明智的替代品,但几乎这么长时间以来,我认为postfix是一个更好的select。 一旦你find你需要的位,postfix.org网站的文档是很好的。 在你的情况下,你会想要http://www.postfix.org/TLS_README.html这个问题&#x3002;

我意识到你已经花了一些时间在sendmail上解决了一些问题,而不是把更多的时间放在这个漏洞上,尽早切换。 如果你回头看,你会畏缩。