Я исследую новую почтовую установку для замены Exchange в нашей организации с помощью Cyrus-IMAP, Постфикса и Гибели прокси-сервер IMAP. Я сталкиваюсь с проблемами, имеющими дело с отправкой электронных писем различным почтовым хранилищам на основе атрибута LDAP (extensionAttribute15), который содержит трехбуквенный отдел пользователя (напр. FIN, ПЛАТА, и т.д.). Мы в настоящее время выполняем Active Directory, и я пытаюсь решить то, что лучший способ состоял бы в том, чтобы отобразить отдел на конкретное почтовое хранилище, так как они не хотят устанавливать атрибут почтового узла для каждого пользователя. Я в настоящее время использую файл hosts для отображения трехбуквенного отдела на почтовое хранилище, так как они не хотят запрашивать DNS больше, чем необходимый, хотя я не чувствую, что это - жизнеспособное долгосрочное решение.
Существует два сервера бэкэнда Cyrus и один frontend сервер Гибели/Постфикса. У меня есть прокси IMAP, работающий правильно и вытягивающий от корректного почтового хранилища на основе отдела пользователя с помощью файла hosts, как упомянуто выше, но я испытываю затруднения при получении Постфикса, работающего правильно.
Постфикс ldap_table документация упоминает под result_format опцией, что возврат почтового узла обращается как "smtp: [% s] может служить основанием для транспортной таблицы, хотя, когда я пытаюсь сделать это, я получаю ошибку в постфиксном почтовом входе в систему прокси-сервер:
postfix/qmgr[1593]: warning: connect to transport private/ldap: No such file or directory
Соответствующие части файлов конфигурации, отправленных ниже:
#/etc/postfix/main.cf
myhostname = perdition.test.domain.com
mydomain = test.domain.com
mydestination = $myhostname, localhost
mynetworks_style = subnet
virtual_transport = ldap:/etc/postfix/ldap-virtual-transport.cf
virtual_mailbox_domains = email.test.domain.com
virtual_mailbox_maps = ldap:/etc/postfix/ldap-aliases.cf
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#/etc/postfix/ldap-virtual-transport.cf
version = 3
server_host = ldap.domain.com
search_base = <email user search base>
bind_dn = <bind user dn>
bind_pw = <bind user pw>
query_filter = (sAMAccountName=%u)
result_attribute = extensionAttribute15
result_format = smtp:[%s]
#/etc/postfix/ldap-aliases.cf
version = 3
server_host = ldap.domain.com
search_base = <email user search base>
bind_dn = <bind user dn>
bind_pw = <bind user pw>
query_filter = (sAMAccountName=%u)
result_attribute = mail
result_format = %s
#/etc/postfix/master.cf
smtp inet n - n - - smtpd
-o smtp_dns_support_level=disabled
submission inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628 inet n - n - - qmqpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - n - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
#/etc/hosts
172.29.99.43 store01 store01.test.domain.com FIN
172.29.99.41 store02 store02.test.domain.com PAY
Я успешно использую эту же конфигурацию (в основном). Она очень похожа на вашу, так что она должна работать с несколькими настройками. Я бы слегка изменил result_format:
result_format = smtp:%s
Вы можете запросить эту таблицу поиска, чтобы посмотреть, получите ли вы ожидаемые результаты:
postmap -q user@test.domain.com ldap:/etc/postfix/ldap-virtual-transport.cf
В любом случае, я думаю, что ваша ошибка заключается в использовании virtual_transport в качестве таблицы поиска, когда это не так. Вместо этого вы должны использовать transport_maps:
transport_maps = ldap:/etc/postfix/ldap-virtual-transport.cf