Здравствуйте. Посидел сегодня над Вашей задачей, сформулировав её так: на сервере обслуживается два почтовых домена post.com и other.com, настройки почтовых ящиков этих доменов берутся из каталога LDAP. Если письмо приходит на ящик some_user@mail.post.com, оно доставляется в ящик some_user@post.com, если письмо приходит на ящик some_user@mail.other.com, оно доставляется в ящик some_user@other.com. В итоге у меня получилось следующее.
Подготовка почтовой директории:
mkdir /home/mail/post.com
mkdir /home/mail/other.com
chown -R 10000:10000 /home/mail
Содержимое каталога LDAP:
# Корневая запись каталога
dn: dc=ldaptest,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldaptest.com
dc: ldaptest
# Контейнер для настроек почтовой системы
dn: ou=Mail,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: Mail
# Контейнер для почтовых ящиков домена post.com
dn: cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: applicationProcess
cn: post.com
# Контейнер для почтовых ящиков домена other.com
dn: cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: applicationProcess
cn: other.com
# Настройки почтового ящика new@post.com
dn: uid=new,cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: new
cn: new
sn: new
userPassword: newPassword
mail: new@post.com
# Настройки почтового ящика test3@post.com
dn: uid=test3,cn=post.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: test3
cn: test3
sn: test3
userPassword: test3Password
mail: test3@post.com
# Настройки почтового ящика user1@other.com
dn: uid=user1,cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: user1
cn: user1
sn: user1
userPassword: user1Password
mail: user1@other.com
# Настройки почтового ящика user2@other.com
dn: uid=user2,cn=other.com,ou=Mail,dc=ldaptest,dc=com
objectClass: inetOrgPerson
uid: user2
cn: user2
sn: user2
userPassword: user2Password
mail: user2@other.com
Настройки postfix. Файл /etc/postfix/main.conf:
mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination
virtual_mailbox_domains = post.com other.com
virtual_alias_domains = mail.post.com mail.other.com
virtual_transport = virtual
virtual_mailbox_base = /home/mail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_multi_domain_mailbox_maps.cf
virtual_alias_maps = hash:/etc/postfix/virtual_alias_domains_rewrite_map
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_minimum_uid = 10000
Файл /etc/postfix/ldap_virtual_multi_domain_mailbox_maps.cf:
server_host = ldap://127.0.0.1:389
search_base = ou=Mail,dc=ldaptest,dc=com
version = 3
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = mail
result_format = %d/%u/
Файл /etc/postfix/virtual_alias_domains_rewrite_map:
@mail.post.com @post.com
@mail.other.com @mail.other.com
Для него нужно сформировать файл virtual_alias_domains_rewrite_map.db:
postmap /etc/postfix/virtual_alias_domains_rewrite_map
Настройки dovecot. Файл /etc/dovecot/dovecot.conf:
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_debug = yes
auth_debug = yes
auth_verbose = yes
ssl = no
protocols = imap
namespace inbox {
inbox = yes
location =
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = no
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
prefix =
}
mail_uid = 10000
first_valid_uid = 10000
last_valid_uid = 10000
mail_gid = 10000
first_valid_gid = 10000
last_valid_gid = 10000
passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-bind-auth.conf
}
userdb {
driver = static
args = uid=10000 gid=10000 home=/home/mail/%d/%n mail=maildir:/home/mail/%d/%n
}
Файл /etc/dovecot/dovecot-ldap-bind-auth.conf:
hosts = 127.0.0.1:389
ldap_version = 3
base = ou=Mail,dc=ldaptest,dc=com
auth_bind = yes
pass_attrs = mail=user
pass_filter = (&(objectClass=inetOrgPerson)(mail=%u))
Будьте внимательны -- изменения внесены ВО ВСЕ файлы и структуру каталога. При настройках thunderbird в качестве имени пользователя для аутентификации нужно использовать полное название почтового ящика, то есть не new, а new@post.com, во избежание путаницы, которая может возникнуть, когда в разных доменах будут почтовые ящики с одинаковым именем пользователя, например, new@post.com и new@other.com.
Егор