Как я могу использовать шаблоны для 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-адресами и сертификатами для одного и того же имени. Все в порядке, я просто хочу проверить, что сервер, на который я отправляю почту, сертифицирован как принадлежащий ярлыкам.

я пытался

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).

Law29
источник
Итак, ответов нет (пока?) Я бы попробовал ответить сам, но я не уверен, достаточно ли одного дня или около того для интеграции главы 28 книги sendmail, или даже даст ответ.
Закон 29
2
У меня нет достаточной уверенности, чтобы дать точный ответ, но я не думаю, что подстановочные знаки поддерживаются согласно разделу «Ограничения в текущей реализации» этого сообщения в блоге: security-skywalker.blogspot.com/2013/01/…
Майк Б
... и да, я знаю, что "сертификаты с подстановочными знаками" отличаются от функциональности шаблонов сопоставления с подстановочными знаками, которую вы ищете, но в статье подчеркивается статическая природа этой функции. :-)
Майк Б
Возможно, ваш ответ не является окончательным, но это лучшее, что я нашел (по какой-то причине я не нашел этот пост в блоге, спасибо за то, что вы привлекли его внимание)
Law29
Хотите протестировать поддержку тега CNRE? Это будет проверять $ & {cn_subject} против вашего пользовательского регулярного выражения.
AnFi

Ответы:

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 для поддержки вышеуказанной записи

ВНИМАНИЕ: помните о TAB (\ t) между RHS и LHS в 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}срабатывания по префиксу 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
Анфи
источник
Принял это, хотя я еще не проверял это; это было именно то, что я считал возможным, но не смог понять, как это сделать.
Закон 29
1

Это не совсем ответ на поставленный вопрос, но мне кажется, что вы делаете что-то нелегко.

Конфигурация Sendmail была написана таким образом, чтобы отдавать предпочтение простоте и эффективности для программного обеспечения, выполняющего разбор этой конфигурации, а не для простой настройки и обслуживания людьми. В последние десятилетия просто не было веских причин для этого.

Sendmail был ужасно загадочной реликвией 15 лет назад. Некоторые дистрибутивы Linux по-прежнему предоставляют его по умолчанию, и это нормально, если конфигурация по умолчанию работает для вас, но как только вы обнаружите, что делаете что-то, что занимает более нескольких минут, лучше всего выбросить sendmail и установить современный MTA ,

Около 15 лет назад qmail, возможно, все еще был разумной заменой, но почти так долго я считал postfix лучшим выбором. Документация с сайта postfix.org хороша, когда вы найдете то, что вам нужно. В вашем случае вам понадобится http://www.postfix.org/TLS_README.html для решения этой проблемы.

Я понимаю, что вы, скорее всего, уже потратили некоторое время на решение нескольких проблем в sendmail, но вместо того, чтобы тратить больше времени на эту дыру, переключитесь при первой же возможности. Если вы когда-нибудь оглянетесь назад, вы съежитесь

mc0e
источник
На самом деле, я управлял postfix дольше, чем администрировал sendmail, по $ причинам, и сегодня у меня есть около 16 основных серверов sendmail в настраиваемой среде, которую не так легко изменить. Обновление до последней версии занимает считанные минуты, а изменение - другое. Однако вы правы, что использование постфикса «smtp_tls_policy_maps», содержащего «example.com secure match = .messagelabs.com», похоже, обеспечит безопасность, которую я ищу. Этот вариант использования может фактически дать мне причину, по которой мне нужно тратить время, необходимое для перехода.
Закон 29