Страница 1 из 1
Exim, ldap lookup ...
Добавлено: 2007-09-26 18:07:07
gmn
Привет.
Есть Exim.
Проверяет юзеров в Active Directory ldap-запросами.
И на адрес типа "user"@domain.com - говорит "ОК".
А вот Exchange уже говорит не "ОК".
Т.е. надо на Exim запретить в local part символ кавычек.
Что есть в конфиге:
Код: Выделить всё
deny message = Restricted characters in address
domains = +local_domains : +virtual_domains
local_parts = ^[.'] : ^.*[@%!?/|]
А это такой роутер:
Код: Выделить всё
exchange_router_user:
driver = manualroute
transport = exchange_transport
domains = +virtual_domains
route_data= ${lookup ldap \
{LDAP_AUTH \
ldap:///DC=***,DC=UA?proxyAddresses?sub?\
(&(proxyAddresses=smtp:${quote_ldap:$local_part}@$domain)(!(userPrincipalName=*@internal))\
(!(objectClass=group))(msExchUserAccountControl=0)(!(proxyaddresses=SMTP:SystemMailbox*))\
(objectclass=user)\
)\
}\
{exchange}fail}
"quote_ldap" добавил сегодня. До этого небыло. Но всеравно не помогло.
Т.е., похоже, что надо в "Restricted characters in address" добавить символы кавычек. Но чего-то сходу не получилось.
Re: Exim, ldap lookup ...
Добавлено: 2007-09-26 18:11:29
Alex Keda
э.... а вариантов-то
да
да
какой нужен - даже не скажу.
надо будет в своём поковырять
Re: Exim, ldap lookup ...
Добавлено: 2007-09-26 18:16:23
gmn
lissyara писал(а):э.... а вариантов-то
- не работает.
- не работает.
- не работает.
lissyara писал(а):какой нужен - даже не скажу.
надо будет в своём поковырять
Вот поэтому и спросил.
Проверял, добавляя условия так:
Re: Exim, ldap lookup ...
Добавлено: 2007-09-26 20:11:43
gmn
Проверил глубже ...
Кавычки пропускаются и для домена тоже.
Запустил Exim так - exim -bt -d+route+verify+lookup
Ввел адрес получателя "user"@domain.com
Смотрю роутеры.
Код: Выделить всё
--------> dnslookup router <--------
local_part=user domain=domain.com
...
Т.е. в роутере local_part видится без кавычек.
И вот в таком виде идет запрос в LDAP:
Код: Выделить всё
ldap:///DC=***,DC=UA?proxyAddresses?sub?(&(proxyAddresses=smtp:user@domain.com)
И даже Exchange принимает адрес с кавычками по smtp
Только потом не знает что с таким адресом делать
Exchange переделать не получится, значит надо запретить такие адреса с кавычками на Exim.
P.S. Первый раз попался грамотей, отправивший письмо на адрес "user"@domain.com
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 0:27:35
Alex Keda
Код: Выделить всё
server# pcretest
PCRE version 7.2 2007-06-19
re> /\"/
data> user
No match
data> "user"
0: "
data> us"er
0: "
data> ^C
server#
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 8:44:35
gmn
Да, так работает через pcretest.
А вот в Exim не получается
Или так
И так тоже
Всеравно "250 Accepted"
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 9:59:40
Alex Keda
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 10:19:11
cyrus_user
вокруг local_part кавычки игнорируются
Код: Выделить всё
15:38:14 12523 SMTP<< RCPT TO:<"testuser"@sanctus.local.adm>
15:38:14 12523 using ACL "acl_check_rcpt"
15:38:14 12523 processing "deny"
15:38:14 12523 check local_parts = ^.*["@%!/|]
15:38:14 12523 testuser in "^.*["@%!/|]"? no (end of list)
что и видно в debug
однако можно выкрутится, если использовать $recipients:
Код: Выделить всё
15:38:14 12943 using ACL "acl_check_predata"
15:38:14 12943 processing "warn"
15:38:14 12943 expanding: $recipients
15:38:14 12943 result: "testuser"@sanctus.local.adm
и уже вот этот список обрабатывать подобной логикой
Код: Выделить всё
condition = ${if forany{$recipients}{match{${extract{1}{@}{$item}}}{^.*["%!/|]}}{yes}{no}}
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 10:26:04
gmn
cyrus_user писал(а):вокруг local_part кавычки игнорируются
однако можно выкрутится, если использовать $recipients:
Код: Выделить всё
15:38:14 12943 using ACL "acl_check_predata"
15:38:14 12943 processing "warn"
15:38:14 12943 expanding: $recipients
15:38:14 12943 result: "testuser"@sanctus.local.adm
и уже вот этот список обрабатывать подобной логикой
Код: Выделить всё
condition = ${if forany{$recipients}{match{${extract{1}{@}{$item}}}{^.*["%!/|]}}{yes}{no}}
Работает.
Но получается, что если в сессии несколько получателей - и один из адресов с кавычками, то письмо будет отброшено полностью. Что не совсем хорошо.
Ведь менеджеру всеравно, как он адрес напишет.
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 10:38:14
cyrus_user
gmn писал(а):
Но получается, что если в сессии несколько получателей - и один из адресов с кавычками, то письмо будет отброшено полностью. Что не совсем хорошо.
Ведь менеджеру всеравно, как он адрес напишет.
я не говорил что письмо будет отброшено
надо расширить условие для каждого $item в $recipients списке или пока временно воткните это условие только для одного получателя
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 16:54:11
gmn
cyrus_user писал(а):gmn писал(а):
Но получается, что если в сессии несколько получателей - и один из адресов с кавычками, то письмо будет отброшено полностью. Что не совсем хорошо.
Ведь менеджеру всеравно, как он адрес напишет.
я не говорил что письмо будет отброшено
надо расширить условие для каждого $item в $recipients списке или пока временно воткните это условие только для одного получателя
Пока добавил запись в лог таких инцидентов.
Потом посмотрим ...
Re: Exim, ldap lookup ...
Добавлено: 2007-09-27 23:58:30
Alex Keda
кста - в расслке дали верный совет - кавычки надо удалять из адреса, и дальше его обрабоатывать как обычно.
мона роутер специальный даже замутить под это - чтобы без подпорок и прозрачно - а в роутере перловую процедуру.
==========
ну или средствами exim - yj тогда по всему конфигу придётся вносить вызов соответствующего оператора.
Re: Exim, ldap lookup ...
Добавлено: 2007-09-28 9:23:44
gmn
lissyara писал(а):кста - в расслке дали верный совет - кавычки надо удалять из адреса, и дальше его обрабоатывать как обычно.
мона роутер специальный даже замутить под это - чтобы без подпорок и прозрачно - а в роутере перловую процедуру.
В рассылке дали еще один хороший совет.
Код: Выделить всё
можно в acl_smtp_rcpt проверить на соответствие регулярному выражению не $local_part, а $smtp_command_argument. в нем точно кавычки присутствуют.
только нужно заложиться на то, что некоторые товарищи могут не окаймлять угловыми скобками адрес получателя, что в принципе не особо
соответствует RFC.
вот такой кондишин вполне покатить
condition = ${if match{$smtp_command_argument}{\N^\s*<?".*"@\N}{yes}{no}}
Пока не проверял.
Что касается "кавычки надо удалять из адреса" - да, так даже лучше. Ведь проверка адреса проходит без проблем.
Но:
1. Надо придумать, чем их красиво "выкусывать".
2. Что говорят всякие RFC на счет кавычек в адресе?
3. Забить на кавычки.
Exim с ними работает нормально. Это для него не проблема. Exchange тоже работает на 50%, потом, правда, спотыкается ... Да и письмо с кавычками в адресе за два года, примерно, было первый раз.
Re: Exim, ldap lookup ...
Добавлено: 2007-09-28 10:46:40
Alex Keda
1.
http://www.lissyara.su/?id=1211#sg
2. помоему разрешают... RFC разрешает в адресе вообще почти всё - в локальной части...
3. можно, но рано или поздно проблема всплывёт.
Re: Exim, ldap lookup ...
Добавлено: 2007-10-03 10:14:45
gmn
Не могу никак сообразить, как бы перезаписать кавычки
Этим acl пишу в лог команду, если в local_part есть кавычки:
Код: Выделить всё
warn condition = ${if match{${extract{1}{@}{$smtp_command}}} {\N^.*["%!/|](.*).*["%!/|]$\N} {yes}{no} }
log_message = smtp-command $smtp_command
Этим acl пишу в лог local_part из smtp_command без кавычек:
Код: Выделить всё
warn log_message = ${sg{${extract{1}{@}{$smtp_command}}} {\N^.*["%!/|](.*).*["%!/|]$\N} {\N$1\N} }
Но вот как эти два acl объединить и заставить делать то, что надо - перезаписывать локальную часть адреса, если она в кавычках?
Re: Exim, ldap lookup ...
Добавлено: 2007-10-03 13:54:28
Alex Keda
да сделай чтоли отдельный кондишен...
не так уж сильно нагрузка увеличиться - но для восприятия проще будет
я вот влёт вторую строку не понял например...
Re: Exim, ldap lookup ...
Добавлено: 2007-10-03 14:56:59
gmn
lissyara писал(а):да сделай чтоли отдельный кондишен...
не так уж сильно нагрузка увеличиться - но для восприятия проще будет
Объединить можно.
Первое условие проверяет, если ли кавычки и другие нехорошие символы в local_part.
Второе "выкусывает" кавычки.
Но не соображу как вернуть обратно для отработки local_part без кавычек.
Ладно, пока оставляю, все как есть. Позже при условии, что снова инцидент повториться, буду искать решение.
Re: Exim, ldap lookup ...
Добавлено: 2007-12-26 18:37:32
gmn
Вернусь снова к вопросу. Так как думал, что отловил адреса с кавычками, но, оказалось, что не полностью.
Условие работало и работает:
Код: Выделить всё
acl_check_predata:
# Блокируем адреса с кавычками и т.п. (Exchange их не понимает).
deny message = Bad address syntax in recipients.
condition = ${if forany{$recipients}{match{${extract{1}{@}{$item}}}{^.*["%!/|]}}{yes}{no}}
log_message = "REJECTED: Bad recipients addresses $recipients"
Письма с адресами типа
" msl"@mail.ru
блокировались.
Но ...
Попалось сегодня письмо, которое прошло успешно через описанное условие.
В списке получателей было 28 адресов. С 20 по 22 адрес локальная часть была в кавычках. И письмо ушло на Exchange, но потом тот его "выплюнул" обратно.
Почему прошло через правило - не понятно. То ли много символов, то ли еще почему-то - но прошло.
Вот что пишет мелкософт по кавычкам в локальной части адреса.
http://support.microsoft.com/kb/304897/ru
Код: Выделить всё
Тест 7
...
Поскольку символ кавычки («"») может использоваться в локальной части адреса электронной почты, сервер SMTP может принять подобное сообщение, а затем отправить сообщение NDR, если при поиске в каталоге не будет найден соответствующий пользователь. При использовании продуктов Microsoft SMTP пересылка подобных сообщений не выполняется и создается сообщение NDR.
Печально
Надо все же на Exim проблему решать, так как с чудом имени Microsoft не видится пути решения.
Но, вапрос. Как все же написать условие, чтобы однозначно выловить письма с символом кавычек в лок. части или домене?
(приведенное выше пропустило почему-то)