dovecot + AD (ldap) и email отличный от логина

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение m0ps » 2010-05-06 14:09:55

Нужно настроить почтовый сервер с интеграцией в AD. в качестве imap сервера используется dovecot. застрял на таком моменте: у юзверей логины вида user1, superuser2, anotheruser64, а email-ы нужны вида i.ivanov@, m.petrov@, g.sidorov@.
текущие конфиги постфикса:

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

root@intmail:/home/m0ps# cat /etc/postfix/main.cf | grep -v ^# | grep -v ^$
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = intmail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = EXAMPLE.COM
mydestination = intmail.example.com, localhost.example.com, localhost
relayhost = relay.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = /etc/postfix/domains.cf
virtual_mailbox_base = /var/mail
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_minimum_uid = 8
virtual_uid_maps = static:8
virtual_gid_maps = static:8
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
message_size_limit = 20480000
smtpd_sasl_auth_enable = no
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,permit

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

root@intmail:/home/m0ps# cat /etc/postfix/ldap-users.cf | grep -v ^# | grep -v ^$
version = 3
server_host = example.com:3268
search_base = OU=Example,DC=example,DC=com
query_filter = (&(objectclass=user)(mail=%s))
result_format = %s
result_attribute = mail
bind = yes
bind_dn = EXAMPLE\postfix
bind_pw = postfix
Конфиги довекота:

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

base_dir = /var/run/dovecot
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_greeting = Welcome to IMAP/POP3 server. Dovecot ready.
mail_location = maildir:/var/mail/%d/%n
mail_privileged_group = mail
mail_debug = yes
first_valid_uid = 8
last_valid_uid = 8
first_valid_gid = 8
last_valid_gid = 8
maildir_copy_with_hardlinks = yes
protocol imap {
  login_executable = /usr/lib/dovecot/imap-login
  mail_executable = /usr/lib/dovecot/imap
  imap_max_line_length = 65536
  imap_client_workarounds = outlook-idle outlook-idle netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
  login_executable = /usr/lib/dovecot/pop3-login
  mail_executable = /usr/lib/dovecot/pop3
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol managesieve {
}
protocol lda {
  postmaster_address = postmaster@example.com
  hostname = intmail.example.com
  sendmail_path = /usr/lib/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
}
auth_username_format = %Lu
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = no
auth default {
  mechanisms = plain
  passdb pam {
  }
  passdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
  userdb passwd {
  }
  userdb static {
    args = uid=8 gid=8 allow_all_users=yes
  }
  user = nobody
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = mail
      group = mail
    }
    client {
      path = /var/run/dovecot/auth-client
      mode = 0660
      user = postfix
      group = postfix
    }
  }
  !include_try /etc/dovecot/auth.d/*.auth
}
dict {
}
plugin {
}
!include_try /etc/dovecot/conf.d/*.conf

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

root@intmail:/home/m0ps# cat /etc/dovecot/dovecot-ldap.conf | grep -v ^# | grep -v ^$
hosts = example.com:3268
dn = postfix@EXAMPLE.COM
dnpass = postfix
auth_bind = yes
ldap_version = 3
base = OU=Example,DC=EXAMPLE,DC=COM
deref = never
scope = subtree
pass_filter = (&(objectClass=user)(mail=%n@%d))
default_pass_scheme = CRYPT
при такой конфигурации, почта доставляется успешно для юзверя user1 (на email - i.ivanov@example.com, который указан в учетке AD), но для авторизации нужно указывать имя пользователя не как user1@example.com а i.ivanov@example.com. возможно ли сделать так, что бы во время авторизации указывать как имя пользователя не его e-mail адрес, а имя пользователя AD (поле sAMAccountName)

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

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

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение Alex Keda » 2010-05-06 16:16:37

боюсь, вы этот изврат на постфиксе не осилите...
я пару недель назад реализовал такое на exim - замечу далеко нетривиальная конфигурация получилась.
но на выхлопе всё красиво - юзера зовут v.pupkin - а когда он отправляет получают от sale1
пишут на sale1 - получает пупкин
отдельные без перезаписи выпущщены.
многим наружу слать нельзя, тока внутри почтой обмениваться.
при увольнении сотрудника, и блокировке его в AD c его перезаписей и альясов автоматом создаются новые альясы на его начальника - есть такое поле в AD
да, и у меня три почтовых домена при том что AD одна - это сильно осложняло работу
Убей их всех! Бог потом рассортирует...

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение m0ps » 2010-05-06 16:32:56

Alex Keda писал(а):боюсь, вы этот изврат на постфиксе не осилите...
я пару недель назад реализовал такое на exim - замечу далеко нетривиальная конфигурация получилась.
но на выхлопе всё красиво - юзера зовут v.pupkin - а когда он отправляет получают от sale1
пишут на sale1 - получает пупкин
отдельные без перезаписи выпущщены.
многим наружу слать нельзя, тока внутри почтой обмениваться.
при увольнении сотрудника, и блокировке его в AD c его перезаписей и альясов автоматом создаются новые альясы на его начальника - есть такое поле в AD
да, и у меня три почтовых домена при том что AD одна - это сильно осложняло работу
да с постфиксом я вроде пока проблем не вижу... меня вот интересует как можно сделать так, что б при авторизации пользователя в довекоте в переменной home выглядела не как /var/mail/%d/%u (где u%=sAMAccountName) а /var/mail/%d/mail (где mail=поле mail в AD, точнее его часть до собачки)

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

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение Alex Keda » 2010-05-06 22:08:37

в запросе к mysql этип оля можно подменять...
думаю и к лдап можно
Убей их всех! Бог потом рассортирует...

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение CrazyPilot » 2010-05-07 14:15:03

Alex Keda писал(а): при увольнении сотрудника, и блокировке его в AD c его перезаписей и альясов автоматом создаются новые альясы на его начальника - есть такое поле в AD
Извиняюсь за вторжение в чужие тему, но очень интересно. Как реализовали? У меня ща при увольнении сотрудника приходится ручками альясы перепрописвать. Догадка: у вас exim смотрит на userAccountControl и если видит, что пользователь залочен - роутит письмо на мыло начальника, прописанное где-нить в залоченном аккаунте? Или как-то более умно сделали?

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

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение Alex Keda » 2010-05-07 21:03:30

не. экзим я в АД даже не пустил =)
зачем - у меня костыльный скрипт вытаскивает то что мен нужно и раскладывает по таблицам.

по вопросу - логика такая:

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

        if(user_is_disabled_in_AD($user_name)){
                $u_mail = $ref->{'u_mail'};
                #print "user disabled $user_name with mail " . $u_mail . "\n";

                # если у юзера указан начальник - надо сроутить почту на него
                # Надо найти email начальника для удалёного пользователя
                if (get_user_manager($user_name)){      # есть начальник
                        ($manager,$manager_mail) = split(':', get_user_manager($user_name));
                        #print "Начальнег для " . $user_name . " --> " . $manager . " (" . $manager_mail . ")\n";
                        if (get_rewrite($u_mail)){
                                $rewrite_to = get_rewrite($u_mail);
                                # удаляем перезапись
                                delete_rewrite($u_mail);
                                # прописываем альяс
                                create_alias($rewrite_to,$manager_mail);
                        }else{
                                create_alias($u_mail,$manager_mail);
                        }
                        # переписываем альясы пользователя
                        modify_aliases($u_mail,$manager_mail);
                }else{  # есть начальник --> нет начальника
                        #print "нет начальника для $user_name\n";
                        # проверяем есть ли перезапись
                        if (get_rewrite($u_mail)){
                                $rewrite_to = get_rewrite($u_mail);
                                # удаляем перезапись
                                delete_rewrite($u_mail);
                                # прописываем альяс
                                create_alias($rewrite_to,$static_alias);
                        }else{
                                create_alias($u_mail,$static_alias);
                        }
                        # переписываем альясы пользователя
                        modify_aliases($u_mail,$static_alias);
                }       # закрытие - у юзера нет начальника
                # удаляем пользователя
                delete_user($user_name);
        }
Убей их всех! Бог потом рассортирует...

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: dovecot + AD (ldap) и email отличный от логина

Непрочитанное сообщение CrazyPilot » 2010-05-08 8:26:52

Пнятна. Спасибо!