exim + dovecot + AD + Несколько почтовых ящиков в поле mail

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-02 18:10:23

Здравствуйте.
Настроил Exim + dovecot по статье с этого сайта, всё замечательно работает. Но есть одна проблема. В нашей организации около 20 почтовых доменов, и у одного пользователя AD могут быть почтовые ящики во всех этих доменах. Чтобы проще было всё это администрировать решили заносить их в поле e-mail с каким-либо разделителем.

Вопросы:
1. Какой лучше использовать разделитель.
2. Что необходимо изменить в конфигурациях exim'а и dovecot'а, чтобы они правильно обрабатывали это поле.

Заранее, спасибо.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2520 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-02 18:51:31

kdesys писал(а):Чтобы проще было всё это администрировать решили заносить их в поле e-mail с каким-либо разделителем.
Вопросы:
1. Какой лучше использовать разделитель.
Я поторопился, AD проверяет правильность ввода e-mail адреса в поле mail, т.е. придется еще и модифицировать схему AD.
Посоветуйте пожалуйста как быть в такой ситуации?

P.S. И еще, хотелось бы, чтобы при удалении юзера из AD, также прибивались все его папки в /var/mail/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35019
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение Alex Keda » 2008-09-02 20:53:57

1. не стоит.
2. скриптом. но не прибивать а двигать куданить и потом удалять. а то прибьёт не то, или чухнуться что нужно
Убей их всех! Бог потом рассортирует...

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-03 8:17:58

lissyara писал(а):1. не стоит.
Что значит не стоит? А какие варианты то?
lissyara писал(а): 2. скриптом. но не прибивать а двигать куданить и потом удалять. а то прибьёт не то, или чухнуться что нужно
Есть наработки? Честно говоря даже не знаю куда копать.

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-03 11:20:01

Значит так:
В AD есть атрибут otherMailbox, он в отличии от mail многозначный, поэтому в него можно внести несколько почтовых адресов.
Я перенастроил exim на выполнение запросов из этого атрибута, и всё работает отлично.
Но, dovecot работать не хочет, т.к. при выполнении запроса по параметру user_attrs=otherMailbox=home=/var/mail/%$, ему возвращается значение этого многозначного атрибута в виде bla@mydomain.local;bla-bla@otherdomain.local;bla3@newdomain.ru.
И он начинает ругаться, что не может создать такую папку. Естественно такая папка нам и не нужна, а нужна та, с учетными данными которой залогинился юзер.

Подскажите пожалуйста подробно, как изменить user_attrs=, чтобы dovecot правильно обрабатывал эту строку.

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-03 13:32:20

Как я понимаю, нужно сделать следующим образом:
1. В почтовом клиенте указывать в поле логин, его почтовый ящик.
2. Ящик ищется dovecot`ом в AD.
3. Находится у определенного юзера, затем у этого юзера вытаскивается sAMAccountName.
4. Юзер авторизуется.

Как реализовать? Помогите пожалуйста.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35019
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение Alex Keda » 2008-09-03 19:52:46

писать свой внеший аутентифкатор...
Убей их всех! Бог потом рассортирует...

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-04 10:42:55

lissyara писал(а):писать свой внеший аутентифкатор...
Ok, направьте пожалуйста на путь истинный с чего начать? куда смотреть? какие доки курить?

Также интересует алгоритм аутентификации в dovecot.
Смотрим dovecot-ldap.conf:
В комментах написано, что user_filter используется для поиска пользователя.
Расшифруйте пожалуйста следующую строку и какое значение она возвращает dovecot'у:

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

user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%u))
Правильно ли я понимаю, что dovecot просто осуществляет запрос по ldap и если строка найдена, то возвращается значание, например, 1, а если нет, то 0. Т.е. dovecot используя этот запрос не читает никаких данных из AD или всётаки читает?

Теперь строка user_attrs:

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

user_attrs=mail=home=/var/mail/%$
mail - это ldap запрос к AD, который возвращает содержимое этого атрибута и вставляет его в home, а дальше я не пойму... расшифруйте пожалуйста подробнее, а также, где находится строка запроса ldap к AD по этому параметру (mail)?

Ну не доходит что-то до меня алгоритм работы dovecot + ldap. wiki уже курил, но всёравно пока не могу понять.
Последний раз редактировалось Alex Keda 2008-09-04 22:52:51, всего редактировалось 1 раз.
Причина: [code][/code] - для кого?

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-04 12:24:37

Значит так, получилось сделать аутентификацию пользователя с разными почтовыми доменами, но с одним и тем же именем, т.е. в домене AD есть пользователь bla, у него в атрибуте otherMailbox имеются записи bla@mydomail.ru;bla@myotherdomain.ru;bla2@mydomain.ru
Так вот, аутентификация работает только для двух первых почтовых ящиков, что видно из настроек dovecot-ldap.conf:

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

user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%n))
pass_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%n))
в качестве имени пользователя в MUA ввожу его email, например bla@myotherdomain. Всё работает нормально.

делаю:

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

user_filter = (&(objectClass=organizationalPerson)(!(objectClass=computer))(otherMailbox=%u))
pass_filter = (&(objectClass=organizationalPerson)(!(objectClass=computer))(otherMailbox=%u))
не работает, почему?
Последний раз редактировалось Alex Keda 2008-09-04 22:52:32, всего редактировалось 1 раз.
Причина: [code][/code] - для кого?

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-18 9:11:08

Подскажите, как заставить dovecot deliver доставлять почту в определенную папку, указанную в качестве параметра в строке запуска deliver'а?
Например, вот это не работает:

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

dovecot_delivery:
  driver = pipe
  delivery_date_add
  envelope_to_add
  return_path_add
  check_string = ""
  debug_print = yes
  command=/usr/local/libexec/dovecot/deliver -m /var/mail/blablabla
  user = mailnull
  group = mail
  message_prefix = ""
  message_suffix = ""
  log_output
Последний раз редактировалось Alex Keda 2008-09-18 11:20:48, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35019
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение Alex Keda » 2008-09-18 11:21:23

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

dovecot_spam_delivery:
        driver = pipe
        command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -m SPAM
        message_prefix =
        message_suffix =
        delivery_date_add
        envelope_to_add
        return_path_add
        log_output
        user = mailnull
а у меня такое работает.
Убей их всех! Бог потом рассортирует...

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-18 11:45:52

lissyara писал(а):

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

dovecot_spam_delivery:
        driver = pipe
        command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -m SPAM
        message_prefix =
        message_suffix =
        delivery_date_add
        envelope_to_add
        return_path_add
        log_output
        user = mailnull
а у меня такое работает.
Дело в другом:
У меня юзеры авторизуются так: в поле Имя пользователя вводят bla@domain.ru
вот вырезки из dovecot.conf:

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

mail_location = maildir:%h
auth_username_format = %Lu
  passdb ldap {    args = /usr/local/etc/dovecot-ldap.conf  }
  userdb ldap {    args = /usr/local/etc/dovecot-ldap.conf  }
вот вырезки из dovecot-ldap.conf:

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

user_attrs=sAMAccountName=home=/var/mail/%$@%d
user_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%n))
pass_filter = (&(objectClass=user)(!(objectClass=computer))(sAMAccountName=%n))
При этой конфигурации пользователи авторизуются, для них создаются maildir`ы в /var/mail/ по их e-mail`ам (например, /var/mail/bla@domain.ru).
Всё чудесно, но! Когда запускается deliver с параметрами deliver -d {$localpart} он кладет всё в "/var/log/bla@". Как ему сказать, чтобы он положил в bla@domain.ru?
Что мне изменить в настройках?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35019
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение Alex Keda » 2008-09-18 12:03:18

ну так передавай полный адрес
Убей их всех! Бог потом рассортирует...

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-09-18 12:16:40

kdesys писал(а):Как ему сказать, чтобы он положил в bla@domain.ru? Что мне изменить в настройках?
Прошу прощения, сам ступил, сейчас всё раскладывается нормально.

Теперь у меня стоит еще одна задача. Это решить вопрос с аутентификацией. Т.к. логин в домене у юзера один (например, Ivanov_II), а e-mail`ов может быть много и с разными именами (например, Ivanov_II@domain.ru, ivan@domain2.ru, ivanov@domain3.ru), и все они записаны в поле otherMailbox юзера Ivanov_II, нужно, чтобы dovecot авторизовал всё это через реальный юзерский логин, несмотря на то, что ему в поле Имя пользователя говорят Ivanov_II@domain.ru или ivan@domain2.ru или ivanov@domain3.ru.

Слегка запутано, но с помощью CrazyPilot'a родился вот такой скрипт:

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

#!/usr/bin/perl

use Net::LDAP;
sub superscript {

my $ldap_boss = Net::LDAP->new('domain.ru') or die "$@";
$mesg_boss = $ldap_boss ->bind('cn=ldapauth,cn=Users,dc=domain,dc=ru',password => '12345678');

$mesg_boss = $ldap_boss->search(filter=>"(&(objectClass=user)
                                (!(objectClass=computer))
                                  (otherMailbox=*)
                                  (sAMAccountName=*))",
                                        base=>"dc=domain,dc=ru",
                                        scope =>'sub',
                                        attrs=>['otherMailbox','sAMAccountName']);
$email = $_[0];

@entries_boss = $mesg_boss->entries;
foreach $boss_entry (@entries_boss) {
                my @boss_account_male1 = $boss_entry->get_value("sAMAccountName");
                my @boss_account_male = $boss_entry->get_value("otherMailbox")
;
                foreach $user (@boss_account_male1){
                
                foreach $mail (@boss_account_male){
                if ($mail eq $email) {
                         $value = $email;
                         break;}
                }
        }
}
$ldap_boss->unbind();
return "$value";}
который используется в exim, для проверки имеется ли такой email в AD:

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

dovecot_delivery:
  driver = pipe
  delivery_date_add
  envelope_to_add
  return_path_add
  check_string = ""
  debug_print = yes
  command=/usr/local/libexec/dovecot/deliver -d ${perl{superscript}{${local_part}@${domain}}}
  user = mailnull
  group = mail
  message_prefix = ""
  message_suffix = ""
  log_output
Если в этом скрипте заменить $value = $email; на $value = $user;, то мы получим имя пользователя в AD, в поле otherMailbox которого присутствует email, указанный в качестве параметра к скрипту.

А теперь внимание вопрос! Как заставить dovecot исполнять этот скрипт передавая ему в качестве параметра Имя пользователя (например, ivan@domain2.ru), затем забирая результат выполнения скрипта использовать этот результат в качестве имени для авторизации в домене?

О_о, круто завернул? :-)

P.S. В противном случае приходится заводить в домене дополнительных пользователей с именами ivan, ivanov и т.п., конечно запрещая им вход на компьютеры, но всёравно как-то криво получается.

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-10-23 17:47:27

Дорогие юниксоводы, помогите пожалуйста разобраться таки с этой проблемой.
Сейчас используется стандартная схема описанная в статье Lissyar`ы, один пользователь - один email.
Но очень уж некрасиво иметь в домене кучу пользователей не имеющих отношения к реально работающим, а заведенным только из-за того, что в их атрибутах прописаны нужные для работы email адреса.
Хочется чтобы было по-нормальному, т.е. у одного юзера в любом (выбранном нами, пусть это будет otherMailbox) многозначном атрибуте были прописаны его почтовые ящики.

Помогите реализовать, пожалуйста.

kdesys
рядовой
Сообщения: 20
Зарегистрирован: 2008-09-02 17:49:47

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле mail

Непрочитанное сообщение kdesys » 2008-11-10 15:31:25

lissyara писал(а):писать свой внеший аутентифкатор...
Подскажите пожалуйста, какие доки курить. Раз Вы говорите, что можно прикрутить внешний аутентификатор, значит знаете как. Очень хотелось бы.

SimbioS
проходил мимо
Сообщения: 2
Зарегистрирован: 2011-08-05 9:15:06

Re: exim + dovecot + AD + Несколько почтовых ящиков в поле m

Непрочитанное сообщение SimbioS » 2011-08-05 9:22:14

Привет.
Да тема старовата, но проблема актуально.
За пару месяцев поиска, я пришёл к выводу что решения нету, использования многих почтовых доменах прописанных в атрибуте АД.
Postfix & Dovecot не могут работать. Что ж печально.