如何对sendmail TLS_Rcpt使用通配符?


9

sendmail对TLS对话设置了一个位置限制。我想检查发送到example.com的邮件是否已发送到具有* .messagelabs.com证书的服务器。我想防止DNS欺骗和MitM。如果messagelabs只有一台服务器,那就容易了:

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

但是,messagelabs有许多服务器和不同服务器的群集,它们具有相同名称的唯一IP和证书。很好,我只想检查要向我发送邮件的服务器是否经过验证,属于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: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书籍的第28章,或者是否会给出答案。
Law29 2015年

2
我没有足够的信心,以提供一个明确的答案,但我不认为支持通配符按本博客文章中,“限制在当前推行”一节:security-skywalker.blogspot.com/2013/01/...
Mike B

...而且是的,我知道“通配符证书”与您要查找的通配符匹配模式功能不同,但本文重点介绍了该功能的静态性质。:-)
Mike B

也许您的答案不是确定的,但是这是我找到的最好的答案(由于某种原因,我没有找到该博客文章,谢谢您引起我的注意)
Law29 2015年

您想测试对CNRE标签的支持吗?它将针对您的自定义正则表达式测试$&{cn_subject}。
AnFi

Answers:


1

使sendmail.cf存储${cn_subject}中的主机部分被剥离${cn1_subject}
这使得完成实施几乎是微不足道的。

警告:news:comp.mail.sendmail在非测试环境中部署它之前,请征求意见。它可能可以工作,但是sendmail可以避免“意外的副作用”,这比我准备“投资”的痛苦要多得多。我使用sendmail-8.15.2对它进行了“干式测试”。

访问条目:

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

sendmail.mc修复以支持以上输入

警告:请记住有关RHS和LHS之间的TAB(\ t)的信息R
通过比较肮脏的实现。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. ${cn1_subject}TLS_req规则集的“额外部分”中添加由CN1前缀触发的检查

示例脚本进行测试

#!/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 user1@example.com
END

即使我还没有测试过,也接受了。这正是我认为必须能够做到的,但无法设法找到答案。
Law

1

这并不完全是对提出的问题的答案,但在我看来,您似乎在努力地做事。

Sendmail配置的编写方式优先考虑了用于解析该配置的软件的优先级和效率,而不是为了便于人工配置和维护。近几十年来,没有充分的理由这样做。

Sendmail在15年前是一个令人难以置信的神秘遗物。某些linux发行版仍默认提供它,如果默认配置适用于您就可以了,但是一旦发现自己花费了超过几分钟的时间,就最好扔出sendmail并安装一个现代的MTA。 。

大约15年前,qmail可能仍然是明智的替代品,但是将近一整年我一直认为postfix是更好的选择。找到所需的信息后,postfix.org网站上的文档将非常有用。对于您的情况,您需要http://www.postfix.org/TLS_README.html来解决此问题。

我意识到您很可能已经花了一些时间来解决sendmail中的一些问题,但是与其花更多的时间解决这个问题,不如尽早切换。如果您回头看,您会畏缩。


实际上,对于$理由,我管理Postfix的时间比管理sendmail的时间更长,而今天,我在一个易于定制的环境中拥有约16个核心sendmail服务器,该环境不那么容易更改。升级到最新版本仅需几分钟,但更改则是另一回事。但是您是正确的,使用包含“ example.com secure match = .messagelabs.com”的后缀“ smtp_tls_policy_maps”似乎确实可以提供我想要的安全性。该用例可能实际上为我提供了我需要花时间进行转换的原因。
Law29 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.