[exim-conf] вопрос про дополнительный хост для confSMTP_AUTH_SMTPTLS_HOST

Nikolai V. Ivanyushin nvi на sven.ru
Сб Ноя 1 21:02:05 EET 2008


Victor Ustugov пишет:
> Nikolai V. Ivanyushin wrote:
>> Здоров, аксакалы.
> 
> привет
> 
>> Вить, а вот имею вопрос по паровозу.
>> У меня есть хост у которого написано:
>> define(`confSTARTTLS',                  `YES')
>> define(`confSMTP_AUTH',                 `YES')
>> define(`confSMTP_AUTH_RESTRICT',        `DISABLE_AUTH_WITHOUT_TLS')
>> define(`confSMTP_AUTH_SOURCE',          `SMTPTLS')
>> define(`confSMTP_AUTH_SMTPTLS_HOST',    `mail.domain1.tld')
>> define(`confSMTP_AUTH_SMTP_MECH',       `LOGIN')
> 
> confSMTP_AUTH_SMTP_MECH нужен только при SMTP в confSMTP_AUTH_SOURCE.
> при указании SMTPTLS нет необходимости указывать метод аутентификации в 
> явном виде.
> 
>> И вот случилось так, что для еще одного домена надо  в другом месте 
>> проверять smtp_auth_tls_host, т.е. что-то типа конструкции:
>> define(`confSTARTTLS',                  `YES')
>> define(`confSMTP_AUTH',                 `YES')
>> define(`confSMTP_AUTH_RESTRICT',        `DISABLE_AUTH_WITHOUT_TLS')
>> define(`confSMTP_AUTH_SOURCE',          `SMTPTLS')
>> define(`confSMTP_AUTH_SMTPTLS_HOST',    `mail.domain1.tld')
>> define(`confSMTP_AUTH_SMTP_MECH',    `LOGIN')
>> define(`confSMTP_AUTH_SMTPTLS_HOST2',    `mail.doman2.tld')
>> define(`confSMTP_AUTH_SMTP_MECH2',       `LOGIN')
>> Возможно такое?
>> И если этих хостов больше чем два, то что тогда делать?
>>
>> PS. Под другим доменом имеется в виду другая доменная часть smtp-логина.
> 
> паровоз при этом можно использовать почти без переделок.
> 
> я лишь в паре мест заменил компиляцию параметра, отвечающего за скипание 
> TLS, на вычисление его значения при каждой попытке аутентификации.
> 
> т. е. я заменил
> 
> server_condition = ${perl{smtptls_login}\
> {confSMTP_AUTH_SMTPTLS_HOST}{confSMTP_AUTH_SMTPTLS_PORT}{ifelse(confSMTP_AUTH_SMTPTLS_NOTLS, 
> `NO', `0', `1')}{$qualify_domain}{$auth1}{$auth2}}
> 
> на
> 
> server_condition = ${perl{smtptls_login}\
> {confSMTP_AUTH_SMTPTLS_HOST}{confSMTP_AUTH_SMTPTLS_PORT}{${if 
> eq{confSMTP_AUTH_SMTPTLS_NOTLS}{NO}{0}{1}}}{$qualify_domain}{$auth1}{$auth2}} 
> 
> 
> это был пример для метода LOGIN.
> 
> теперь в качестве значений переменных confSMTP_AUTH_SMTPTLS_HOST, 
> confSMTP_AUTH_SMTPTLS_PORT и confSMTP_AUTH_SMTPTLS_NOTLS можно применять 
> не статический текст, а лукапы в отдельный файл со списком внешних SMTP 
> серверов, портов и признаков скипания TLS.
> 
> пример:
> 
> client_smtp_auth_db:
> domain1.tld:mail.domain1.tld:25:NO
> domain2.tld:mail.domain2.tld:25:NO
> 
> define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}') 
> 
> define(`confSMTP_AUTH_SMTPTLS_PORT',`${extract{2}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}') 
> 
> define(`confSMTP_AUTH_SMTPTLS_NOTLS',`${extract{3}{:}{${lookup{${domain:$auth1}}lsearch{CONFDIR/client_smtp_auth_db}}}}') 
> 
> 
> 
> правда есть подводный камень. при использовании методов аутентификации 
> LOGIN и PLAIN клиентские логины и пароли передатюся в разных переменных 
> ($auth1 и $auth2 для метода LOGIN и $auth2 и $auth3 для метода PLAIN). 
> поэтому конструкция лукапа будет более громоздкой. с другой стороны, ты 
> используешь дефолтовые значения confSMTP_AUTH_SMTPTLS_PORT и 
> confSMTP_AUTH_SMTPTLS_NOTLS. поэтому громоздкой конструкция лукапа будет 
> только для confSMTP_AUTH_SMTPTLS_HOST:
> 
> define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:${if 
> eq{$auth3}{}{$auth1}{$auth2}}}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
> 
> значения confSMTP_AUTH_SMTPTLS_PORT и confSMTP_AUTH_SMTPTLS_NOTLS можешь 
> не указывать.
> 
> 
> все это я не тестировал, а писал прямо в письмо.
> 
> если не будешь делать вычисляемым значение confSMTP_AUTH_SMTPTLS_NOTLS, 
> то можешь вышеуказанную конструкцию для confSMTP_AUTH_SMTPTLS_HOST 
> использовать на любом паровозе.
> 
> если же захочешь читать из файла и значение для 
> confSMTP_AUTH_SMTPTLS_HOST, то тебе придется обновить паровоз до 4.69.
> 
> 
> когда потестишь предложенную схему, маякни.
> 
ну, вот потестил. Добавил в конфиге(site/conf) по совету Виктора к 
имеющемуся:
define(`confSTARTTLS',                  `YES')
define(`confSMTP_AUTH',                 `YES')
define(`confSMTP_AUTH_RESTRICT',        `DISABLE_AUTH_WITHOUT_TLS')
define(`confSMTP_AUTH_SOURCE',          `SMTPTLS')
define(`confSMTP_AUTH_SMTPTLS_HOST',    `mail.domain1.tld')

ровно одну строку:

define(`confSMTP_AUTH_SMTPTLS_HOST',`${extract{1}{:}{${lookup{${domain:${if 
eq{$auth3}{}{$auth1}{$auth2}}}}lsearch{CONFDIR/client_smtp_auth_db}}}}')
Затем создал файл client_smtp_auth_db:
domain1.tld:mail.domain1.tld
domain2.tld:mail.domain2.tld
И все заработало.

-- 
SY
Nikolai





Подробная информация о списке рассылки exim-conf