Страница 1 из 1

recipient/callout и авторизация

Добавлено: 2010-10-24 13:35:59
kotsur
Есть почтовый сервер1. Почта приходит на него, проходит всевозможные проверки, а потом отправляется на сервер2 где находится почтовая база юзера.

Для проверки юзера использую recipient/callout

Код: Выделить всё

       deny    message   = REJECTED - Recipient Verify Failed - User Not Found
                domains   = +relay_to_domains
                !verify   = recipient/callout=2m,defer_ok,use_sender
Все прекрасно работало.

Поставили на сервере2 аутентификацию.
(в конфиге эксима в секциях транспортов и аутентификаторов нужные изменения внесли)
В итоге получили ситуацию когда проверка любого получателя оказывается неудачной, ибо как я понял, при проверке recipient/callout
сервер1 не аутентифицируется на сервере2.
В итоге пришлось проверку отключить, что не есть хорошо.

Как сие побороть?

Re: recipient/callout и авторизация

Добавлено: 2010-10-24 17:51:19
dikens3
И в заключении хочу показать как работает следующий фильтр:

Код: Выделить всё

# Проверка существования E-Mail'a отправителя для внешних клиентов
deny      log_message   = Отправитель неправильный
          !authenticated = *
          !verify       = sender/callout=20s,defer_ok,maxwait=30s
Предположим что отправитель dmitry@mail.ru , тогда проверка exim'ом будет выглядеть так:

Код: Выделить всё

>>> Connecting to mxs.mail.ru [194.67.23.20]:25 ... connected
>>>   SMTP<< 220 Mail.Ru ESMTP
>>>   SMTP>> HELO mail.МОЙДОМЕН.ru
>>>   SMTP<< 250 mx21.mail.ru ready to serve
>>>   SMTP>> MAIL FROM:<>
>>>   SMTP<< 250 OK
>>>   SMTP>> RCPT TO:<dmitry@mail.ru>
>>>   SMTP<< 250 OK
>>>   SMTP>> QUIT
Т.к. на mail.ru не блокируются сообщения на этапе rcpt, пришлось использовать yandex для примера, когда проверка неудачна.
Отправителем сделал dsaasdkljhaslkdlkajsdlkj@yandex.ru и проверка exim'ом будет выглядеть так:

Код: Выделить всё

>>> Connecting to mx1.yandex.ru [213.180.200.11]:25 ... connected
>>>   SMTP<< 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Fri, 1 Jun 2007 10:21:29 +0400
>>>   SMTP>> HELO mail.МОЙДОМЕН.ru
>>>   SMTP<< 250 mxfront6.yandex.ru Hello mail.МОЙДОМЕН.ru
>>>   SMTP>> MAIL FROM:<>
>>>   SMTP<< 250 2.1.0 Sender syntax Ok;
>>>   SMTP>> RCPT TO:<dsaasdkljhaslkdlkajsdlkj@yandex.ru>
>>>   SMTP<< 550 5.1.1 <dsaasdkljhaslkdlkajsdlkj@yandex.ru> user unknown
>>>   SMTP>> QUIT
В случае если будут превышены интервалы подключения и т.п. (вобщем всё что не выдаёт ответ от сервера 5xx) сообщение будет пропущено через фильтр.
Собственно это всё. :-)

http://forum.lissyara.su/viewtopic.php?f=20&t=3577
И причём тут авторизация? Я же не вводил пароль на яндекс...

Re: recipient/callout и авторизация

Добавлено: 2010-10-24 19:10:43
kotsur
ваш пример хорош и понятен, но он не подходит к моей ситуации.
я проверяю не отправителя, а получателя, который находится на моем внутреннем сервере.
и этот внутренний сервер требует аутентификации у всех.

Re: recipient/callout и авторизация

Добавлено: 2010-10-24 20:47:49
kotsur
дополню преидущее сообщение
т.е. ситуация вот такая

Код: Выделить всё

root[/root]> telnet mail.internalserver.ru 25
Connected to mail.internalserver.ru.
Escape character is '^]'.
ehlo 220 mail.internalserver.ru ESMTP Service (Lotus Domino Release 7.0.2) ready at Sun, 24 Oct 2010 21:36:16 +0400 mail.externalserver.ru
250-mail.internalserver.ru Hello mail.externalserver.ru ([********]), pleased to meet you
250-HELP
250-AUTH LOGIN
250-SIZE
250 PIPELINING
mail from:<test@mail.ru>
530 Authentication required
т.е. external сервер не может проверить у internal сервера существует ли получатель

Re: recipient/callout и авторизация

Добавлено: 2010-10-24 22:04:52
dikens3
Почему вы не понимаете намёков?
ваш пример хорош и понятен, но он не подходит к моей ситуации.
я проверяю не отправителя, а получателя, который находится на моем внутреннем сервере.
Принцип проверки пользователя почти одинаковый, как отправителя, так и получателя.

Код: Выделить всё

>>> Connecting to mx1.yandex.ru [213.180.200.11]:25 ... connected
>>>   SMTP<< 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Fri, 1 Jun 2007 10:21:29 +0400
>>>   SMTP>> HELO mail.МОЙДОМЕН.ru
>>>   SMTP<< 250 mxfront6.yandex.ru Hello mail.МОЙДОМЕН.ru
>>>   SMTP>> MAIL FROM:<>
>>>   SMTP<< 250 2.1.0 Sender syntax Ok;
>>>   SMTP>> RCPT TO:<dsaasdkljhaslkdlkajsdlkj@yandex.ru>
>>>   SMTP<< 550 5.1.1 <dsaasdkljhaslkdlkajsdlkj@yandex.ru> user unknown
>>>   SMTP>> QUIT
Сессия явно показывает, что получатель не существует.
Так же можно понять, что яндексу для проверки пользователя не требуется аутентификация. Если вы решили нарушать все описанные стандарты, и изобретать что-то своё, то и подумали бы заранее как решить будущие проблемы,которые могут быть и не предусмотрены почтовым сервером.(вы же нарушаете RFC.)
Ладно, это я так.

1. Какая-то проблема исключить из аутентификации один хост?
2. Думаю можно написать отдельный роутер, с аутентификацией.
3. Можно изменить проверку проверку пользователя (качать какой-нибудь файл с пользователями и не подключаться вообще. Можно подключаться к базе данных напрямую, а не через сервер. И т.д.)

Re: recipient/callout и авторизация

Добавлено: 2010-10-25 10:08:44
kotsur
Спасибо за развернутый ответ. Но...
Так же можно понять, что яндексу для проверки пользователя не требуется аутентификация. Если вы решили нарушать все описанные стандарты, и изобретать что-то своё, то и подумали бы заранее как решить будущие проблемы,которые могут быть и не предусмотрены почтовым сервером.(вы же нарушаете RFC.)
Ладно, это я так.
А где я rfc нарушил? Когда не принял mail from без аутентификации?

Код: Выделить всё

mail from:<test@mail.ru>
530 Authentication required
1. Какая-то проблема исключить из аутентификации один хост?

2. Думаю можно написать отдельный роутер, с аутентификацией.
3. Можно изменить проверку проверку пользователя (качать какой-нибудь файл с пользователями и не подключаться вообще. Можно подключаться к базе данных напрямую, а не через сервер. И т.д.)
1. В Lotus Domino такого нет. По крайней мере до 8.0
2. Роутер с аутентификацией есть. И почту он прекрасно доставляет. Но вот при recipient/callout аутентификация почему-то не используется.
3. По моему мнению recipient/callout это самый эффективный способ в данном случае. Файл - надстройка непонятно какая... Можно конечно через ldap, но это отдельная песня.

Re: recipient/callout и авторизация

Добавлено: 2010-10-25 11:31:14
kotsur
1. В Lotus Domino такого нет. По крайней мере до 8.0
Хотя пожалуй с этим утверждение я погорячился.. сейчас именно в этом направлении и копаю.

Re: recipient/callout и авторизация

Добавлено: 2010-10-26 19:36:29
dikens3
А где я rfc нарушил? Когда не принял mail from без аутентификации?

Код: Выделить всё

mail from:<test@mail.ru>
530 Authentication required
На основании чего вы отказываете пользователю доставить вам почту? Ваше собственное предпочтение?

http://rfc2.ru/5321.rfc

Код: Выделить всё

MAIL FROM:<userx@y.foo.org>
RCPT TO:<@jkl.org:userc@d.bar.org>

Попытки такого использования трансляторов в настоящее время осуждаются. Поскольку хосты не обязаны транслировать почту, xyz.com может отвергнуть сообщение при получении команды RCPT, используя отклик 550 (отказ в соответствии с используемыми правилами).
Из этого сообщения вы должны понять только одно - что у почтового сервера есть НЕКИЕ обязанности.

Смысл и назначение почтового сервера.
Почтовый сервер, как правило (далее пункт 1), ОБСЛУЖИВАЕТ СВОЙ ДОМЕН(Ы), для которого он обязан принимать почту без аутентификации.
Почтовый сервер предназначен для отправки почтовых сообщений:
1. Сразу в папку пользователю - передаёт другому процессу. (dovecot и т.п.)
2. Другому серверу (relay)

Следовательно из вышеописанного, правило exim выглядит так:

Код: Выделить всё

accept - Т.е. принимать всё и от всех.
Далее начинаем понимать, что надо определяться с некоторыми вещами (пункты 1 и 2). Если Relay нам не нужен, тогда добавляем соответствующее условие и получаем:

Код: Выделить всё

# Принимаем письма для нашего домена
  accept    domains       = +local_domains
            endpass
            message       = "Unknown user"
            verify        = recipient

  deny      message - Это типа не релей
Далее начинам осознавать всю проблему. Спамеры начинают слать спам используя всевозможные механизмы (подделку адресов, хостов, фальшивые почтовые сервера, баги, вирусы, продажных или непутевых админов и т.д.)
Админы начинают придумывать защиту от спама для улучшения качества сервиса SMTP. Появляются рекомендации - типа настроек DNS.
Также появляется множество способов защиты от спама, но в общем случае это всего-лишь дополнение в правила описанные выше:

Код: Выделить всё

Своих пользователей лучше определить и исключить из проверок на спам. Т.е. ненужно их блокировать.
Всякие проверки на спам с блокировкой или нет, по желанию.

# Принимаем письма для нашего домена
  accept    domains       = +local_domains
            endpass
            message       = "Unknown user"
            verify        = recipient

  deny      message - Это типа не релей

P.S. Просто для понимания и без умных мыслей.

http://forum.lissyara.su/viewtopic.php?f=20&t=3577

Re: recipient/callout и авторизация

Добавлено: 2010-10-26 20:48:43
kotsur
да. согласен.
только вот неумный корпоративный сервер Lotus Domino по 25 порту доступен для из нета (исторически сложившийся факт).
А вот почту отправлять отправлять могут ТОЛЬКО те пользователи, которые аутентифицировались. Это нарушение? Его вообще в MX нет для данного домена... а есть именно тот промежуточный exim который и должен проверить наличие получателя на нем. А вот спамеры умные. Все помнят и все видят. И если я аутентификацию убираю с него, то... сами понимаете... все на него...
И дальше что прикажете мне делать?

Re: recipient/callout и авторизация

Добавлено: 2010-10-27 20:05:54
blade_007
А где домино держит БД пользователей, если не секрет? есть ли возможность использовать доминошный лдап?

Re: recipient/callout и авторизация

Добавлено: 2010-10-28 10:03:12
kotsur
blade_007 писал(а):А где домино держит БД пользователей, если не секрет? есть ли возможность использовать доминошный лдап?
база names.nsf. там все.
Использовать ldap конечно можно. но я, признаться, этим вопросом еще не занимался