Як я можу використовувати подстановочні символи для sendmail TLS_Rcpt?


9

sendmail дозволяє на одне місце обмеження на TLS-розмови. Я хочу перевірити, що повідомлення, надіслані на сторінку example.com, надсилаються на сервер із сертифікатом * .messagelabs.com. Я хочу захистити від підробки DNS та MitM. Якби у повідомленнях були лише один сервер, це було б просто:

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


Отже, жодних відповідей (поки що?) Я б спробував відповісти на це сам, але я не впевнений, чи достатньо часу для інтеграції глави 28 книги поштового відправлення чи навіть дати відповідь.
Закон29

2
У мене немає достатньої впевненості, щоб надати остаточну відповідь, але я не думаю, що підкреслені підказки підтримуються відповідно до розділу "Обмеження в поточному впровадженні" цього повідомлення в блозі: security-skywalker.blogspot.com/2013/01/…
Майк Б

... і так, я знаю, що "wildcard certs" відрізняються від функціональних зразків відповідності шаблонів, які ви шукаєте, але стаття підкреслює статичний характер цієї функції. :-)
Майк Б

Можливо, ваша відповідь не є остаточною, але це найкраще, що я знайшов (чомусь я не знайшов цього допису в блозі, дякую за те, що ви звернули його на мою увагу)
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 була написана таким чином, що визначає простоту та ефективність для розбору програмного забезпечення цієї конфігурації, а не для легкої настройки та обслуговування людей. Просто не було вагомих причин для цього в останні десятиліття.

Сендмейл був жахливо таємною реліквією 15 років тому. Деякі розповсюдження Linux все ще надають його за замовчуванням, і це добре, якщо конфігурація за замовчуванням працює для вас, але як тільки ви виявите, що робите все, що займає більше декількох хвилин, вам краще викинути sendmail і встановити сучасний MTA .

Близько 15 років тому qmail, можливо, все ще був розумною заміною, але майже так довго я вважав постфікс кращим вибором. Документація з сайту postfix.org хороша, як тільки ви знайдете потрібний біт. У вашому випадку вам потрібно http://www.postfix.org/TLS_README.html для цієї проблеми.

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


Насправді я адмініструю постфікс довше, ніж я адмініструю sendmail з $ причин, і сьогодні у мене є 16 основних серверів sendmail у пристосованому середовищі, яке не так легко змінити. Оновлення до останньої версії - це питання хвилин, але зміни - інша справа. Однак ви правильні, що використання постфіксу "smtp_tls_policy_maps", що містить "example.com secure match = .messagelabs.com", схоже, це забезпечить безпеку, яку я шукаю. Цей випадок використання може насправді дати мені причину, що мені потрібно витратити час, необхідний для перевдягання.
Закон29
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.