Smtp
如何為 sendmail TLS_Rcpt 使用萬用字元?
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.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
解釋:
- 使用剝離“第一個點之前”部分的
Local_tls_rcpt
規則集儲存${cn_subject}``${cn1_subject}
- 在規則集
${cn1_subject}
的“額外部分”中添加由 CN1 前綴觸發的檢查TLS_req
測試它的範例腳本
#!/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