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

Exim auth

Добавлено: 2008-08-25 10:31:42
CrazyPilot
Доброго времени суток!

что у мну есть:

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

[root@flanker /]# uname -a
FreeBSD flanker.domain.com 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
[root@flanker /]# pkg_info | grep exim
exim-4.69           High performance MTA for Unix systems on the Internet
[root@flanker /]# pkg_info | grep dov
dovecot-1.1.2_1     Secure and compact IMAP and POP3 servers
Exim авторизуется через dovecot, который в свою очередь авторизует через AD.
Нашел косяк в своей настройке, у меня экзим при получении письма проверяет наличие такого мыла в ldap.
Аутентификаторы экзима:

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

dovecot_login:
  driver = dovecot
  public_name = LOGIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1

dovecot_plain:
  driver = dovecot
  public_name = PLAIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth2
Заметил косяк, когда ставил раундкуб. Залогинившийся пользователь может отправить письмо с любого мыла, присутствующего в AD, что мне совсем не нравится.
В спецификации экзима прочитал, что можно запомнить username в $authentificated_id с помощью server_set_id - как я понимаю в аутентификаторах это и происходит. Хочу это поле использовать в запросе для одновременной проверки соответсвия поля mail и sAMAccountName (Поле mail в AD у юзера может принимать любые значения...). В роутере прописал perl'овый скрипт, который мне сообщает что $authentificated_id пустое. Соответственно запрос в ad ничего не возращает. Подскажите, плз, как побороть?

Re: Exim auth

Добавлено: 2008-08-25 11:42:25
CrazyPilot
Что-то я совсем запутался. С аутентификаторами разобрался вроде: в plain аутентификаторе username пишется в $auth1 а не $auth2.

С этим ок.

Но теперь я вообще не могу ничего понять.

Объясните мне вообще схему в целом, пожалуйста.

Допустим mx mail.ru хочет мне послать mail на адрес ldap@domain.com
Exim проверяет наличие такого мыла в AD, оно есть, и exim разрешает доставку и отдает письмо довекоту. Эта сессия происходит без всяких аутентификаций.

Теперь другая ситуация.
Мой юзверь хочет послать письмо на mail.ru. Соответственно ему нужно авторизоваться для этого. Он авторизуется и посылает письмо. Exim ищет в AD аккаунт, у которого атрибуты mail и sAMAccountName совпадают с теми, что предоставил юзер. Если они совпадают - exim принимает письмо и посылает его на mx mail.ru. Если не совпадают - exim должен послать данного юзвера лесом.

Как это сконфигурить в роутерах? Mx mail.ru общается с exim по smtp, и мой юзверь общается с ним по smtp. То есть должно быть два роутера, как я понимаю, один срабатывает когда sender не в локальном домене, а второй когда sender в локальном домене. То есть письмо с mx mail.ru будет кидаться на "внешний" роутер, который будет проверять только наличие такого mail в AD. А письмо от юзера будет кидаться на "внутренний" роутер, который будет проверять совпадение данных авторизации юзера.

Я правильно мыслю?

Re: Exim auth

Добавлено: 2008-08-25 12:48:29
CrazyPilot
Хм, вроде так и должно быть как написал выше.

Только сейчас authenticated_id у меня в роутере используется для выцепляния мыла, куда слать письмо. И как я понял это неверно - нужно проверять sender'a. Как это сделать?

Re: Exim auth

Добавлено: 2008-08-25 12:53:55
dikens3
Проверка корректного поля from от аутентифицированных клиентов. (У меня только аутентифицированные)

Есть несколько доменов и проверятся будут все:

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

# Прибиваем всех, у кого домен отправителя не тот, что при аутентификации
  deny    message       = "Sender only $authenticated_id@domain1.ru or $authenticated_id@domain2.ru"
          authenticated = *
          condition     = ${if and{{!eq{$authenticated_id@domain1.ru}{$sender_address}}{!eq{$authenticated_id@domain2.ru}{$sender_address}}}{yes}{no}}
В $authenticated_id у меня $local_part без домена.

Re: Exim auth

Добавлено: 2008-08-25 13:14:24
CrazyPilot
dikens3 писал(а):Проверка корректного поля from от аутентифицированных клиентов. (У меня только аутентифицированные)

Есть несколько доменов и проверятся будут все:

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

# Прибиваем всех, у кого домен отправителя не тот, что при аутентификации
  deny    message       = "Sender only $authenticated_id@domain1.ru or $authenticated_id@domain2.ru"
          authenticated = *
          condition     = ${if and{{!eq{$authenticated_id@domain1.ru}{$sender_address}}{!eq{$authenticated_id@domain2.ru}{$sender_address}}}{yes}{no}}
В $authenticated_id у меня $local_part без домена.
Хм, ну с таким раскладом я в этом же condition могу написать ldap запрос, который будет проверять соответствие authenticated_id атрибуту sAMAccountName и local_part@domain атрибуту mail в AD, да?
Спасибо за мысль, ща буду пробовать...

Re: Exim auth

Добавлено: 2008-08-25 14:32:30
dikens3
CrazyPilot писал(а):Хм, ну с таким раскладом я в этом же condition могу написать ldap запрос, который будет проверять соответствие authenticated_id атрибуту sAMAccountName и local_part@domain атрибуту mail в AD, да?
Спасибо за мысль, ща буду пробовать...
нужно проверять sender'a. Как это сделать?
Да что угодно, ты правильно вопрос формулируешь, а потом радуешься, что в exim это можно сделать.

Re: Exim auth

Добавлено: 2008-08-25 15:54:30
CrazyPilot
dikens3 писал(а):Да что угодно, ты правильно вопрос формулируешь, а потом радуешься, что в exim это можно сделать.
Ну извините :-)

Если бы вы не показали запись с ACL - я бы долго еще допирал как это сделать. Exim я в первый раз настраиваю, документацию читаю активно, но советы людей, у которых это уже работает, все же существенно помогают.