Здравствуйте! Надеюсь, Вы внимательно прочитали мой предыдущий пост и сознательно выбираете сложный путь, то есть хотите настроить полноценную доставку почты средствами postfix и подстроить под неё dovecot. Шурупы можно забивать и молотком, но шуруповёртом, IMHO, всё же сподручнее. Тем не менее, можно сделать и по-сложному.
И ещё пара замечаний, прежде чем мы приступим к настройкам.
1. Не сочтите за занудство, но без понимания того, как работают программы, то есть без чтения документации к ним, настроить их грамотно не получится. А судя по той каше в настройках, которые Вы приводите, понимания нет. Применительно к postfix и нашему случаю, нужно, как минимум, разобраться с работой
виртуального транспорта,
картами postfix вообще и
LDAP-картами, а о конкретных параметрах настройки почитать в соответствующих man-страницах
postconf(5) и
ldap_table(5). Поверьте мне, даже если удастся что-то по быстрому запустить по какому-нибудь HOWTO, Вы всё равно в будущем будете спотыкаться на каждом шагу, и рано или поздно читать документацию всё-равно придётся.
2. Не нужно пытаться настроить всё сразу. Разбейте задачу на части, и пока не добьётесь правильной работы одной из них, не переходите к следующим. Так значительно проще искать ошибки.
В целом задача для нашего сложного случая будет сформулирована так. Есть каталог, в котором хранятся записи пользователей, в том числе их учётные данные (логин и пароль) и адрес электронной почты, например, такая:
dn: uid=ivan,ou=Users,dc=mycompany,dc=ru
objectClass: inetOrgPerson
cn: Ivan Ivanov
sn: Ivanov
uid: ivan
userPassword: 123
mail: ivan@mycompany.ru
При получении запроса на отправку письма, если Postfix определит, что именно он отвечает за доставку письма в почтовый ящик пользователя, он, средствами одного из своих транстпортов (в данном случае virtual), обратится к каталогу (согласно настроек LDAP-карты), чтобы определить валидность адреса и место доставки, и собственно, выполнит доставку в почтовый ящик. В свою очередь, dovecot, при получении запроса от клиента, произведёт аутентификацию пользователя по учётным данным из каталога, определит на основании содержимого записи каталога, соответствующей этим учётным данным, местонахождение почтового ящика пользователя, и вернёт клиенту содержимое этого ящика.
Предлагаю начать с доставки почты виртуальным транспортом Postfix. Я поставил себе на ноутбук postfix, мой файл main.conf сейчас выглядит так:
### Настройки виртуальных пользователей ###
# домены, рассылка на которые будет обрабатываться транспортом virual
virtual_mailbox_domains = mycompany.ru
# транспорт по умолчанию
virtual_transport = virtual
# путь к корневой папке, где будут находится почта всех виртуальных пользователей
virtual_mailbox_base = /var/mail
# вся почта виртуальных пользователей будет принадлежать одному системному пользователю
# (например, mail), с uid=8 и gid=12
virtual_uid_maps = static:8
virtual_gid_maps = static:12
virtual_minimum_uid = 8
# место (относительно virtual_mailbox_base), куда будет складываться почта
# определяется из LDAP-карты
virtual_mailbox_maps = ldap:/etc/postfix/ldap_mailboxes.cf
Надеюсь, из комментариев всё понятно. Тут используются две статические карты (virtual_uid_maps и virtual_gid_maps) и одна LDAP-карта (virtual_mailbox_maps), вынесенная в отдельный файл (хотя, строго говоря, можно было и не выносить). Сама LDAP-карта выглядит так:
# настройки подключения к серверу, анонимный запрос
timeout = 10
server_host = ldap://127.0.0.1:389
# настройки поиска записи пользователя: от указанной базовой записи
search_base = ou=Users,dc=mycompany,dc=ru
# отбираются записи с объектным классом inetOrgPerson и тем адресом почты,
# который поступил в запросе
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
# место (относительно virtual_mailbox_base), куда будет складываться почта
# берётся из значения атрибута uid найденной записи
result_attribute = uid
# шаблон для результата, к значению атрибута uid добавляется слеш,
# чтобы формат почтового ящика был maildir (директория с письмами в отдельных файлах),
# а не mailbox (все письма в одном файле)
result_format = %s/
LDAP-карты НЕ НУЖНО переконвертировать postmap-ом, это точно.
Можно проверить работу карты с помощью
postmap -q:
$ postmap -q ivan@mycompany.ru ldap:/etc/postfix/ldap_mailboxes.cf
ivan/
После перезапуска postfix я попробовал отправить почту на адрес ivan@mycompany.ru, файл с письмом успешно лёг в каталог /var/mail/ivan/new/ . В данном случае /var/mail взят из значения параметра virtual_mailbox_base, а ivan -- из значения атрибута uid записи пользователя. Файлы и подкаталоги принадлежат системному пользователю mail и его группе mail (значения параметров virtual_uid_maps и virtual_gid_maps). Всё просто и логично.
Если Вы этого добьётесь, можно переходить к настройке почтовых псевдонимов, аутентификации и т.п., а потом и к настройкам dovecot.
Егор.