Назад | Перейти на главную страницу

Dovecot не используется Postfix в качестве LDA

Я пытаюсь настроить почтовый сервер на Ubuntu с помощью Postfix, Dovecot и LDAP. Пока я могу отправлять и получать почту с помощью Postfix и могу подключаться к Dovecot через telnet (порт 143) с пользователем LDAP.

В качестве следующего шага я хотел бы настроить Dovecot в качестве моего LDA, как это было предложено в книге Postfix Р. Хильдебрандта и П.Б. Кёттер. Однако до сих пор Postfix пытается использовать локальный демон для доставки почты локальному получателю.

Пока что я настроил следующее (фактический домен заменен на example.com):

Активировать доставку голубятни в /etc/dovecot/conf.d/15-lda.conf:

protocol lda {
  postmaster_address = postmaster@example.com
}

service auth {
  unix_listener auth-master {
    mode = 0600
    user = vmail
  }
}

Установить голубятню в /etc/postfix/master.cf:

dovecot   unix  -       n       n       -       -       pipe
  flags=ODRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -e -f ${sender} -d ${recipient}

Настроил виртуальный транспорт в /etc/postfix/main.cf:

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Когда я даю команду echo foo | /usr/sbin/sendmail -f ttester@dtvvolleyball.de ttester@dtvvolleyball.de Я получаю следующий вывод журнала:

postfix/qmgr[25582]: 2AA0060E36: from=<ttester@example.com>, size=272, nrcpt=1 (queue active)
postfix/local[26102]: 2AA0060E36: to=<ttester@example.com>, relay=local, delay=0.01, delays=0.01/0/0/0, dsn=5.1.1, status=bounced (unknown user: "ttester")

Пользователь ttester существует в дереве LDAP и может быть найден Dovecot. Например, если я выдам deliver команда вручную отправлено письмо. Однако только если не укажите домен:

/usr/lib/dovecot/deliver -e -f ttester@example.com -d ttester

Подводя итог проблеме, я подозреваю, что по какой-то причине Postfix не делегирует доставку в Dovecot. Любая помощь высоко ценится.

Заранее спасибо!

Вот что postconf -n производит:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = $mydomain, $myhostname, localhost, localhost.$mydomain
myhostname = mail.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_data_restrictions = reject_multi_recipient_bounce
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_non_fqdn_sender reject_unknown_recipient_domain reject_unknown_sender_domain permit_mynetworks reject_sender_login_mismatch reject_unauth_destination check_recipient_access hash:/etc/postfix/roleaccount_exceptions reject_multi_recipient_bounce reject_non_fqdn_helo_hostname reject_invalid_helo_hostname check_helo_access pcre:/etc/postfix/helo_checks check_sender_mx_access cidr:/etc/postfix/bogus_mx permit
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot

Postfix будет использовать классы адресов, чтобы определить, какой класс домена и его транспорт для доставки электронной почты.

На основе вашего postconf выход, $domain/example.com перечислен в mydestination, поэтому он будет использовать классы локальных адресов и использовать $local_transport параметр (запустить postconf local_transport), чтобы доставить электронное письмо.

Поэтому virtual_transport был проигнорирован постфиксом. Предлагаемое решение - удалить $ mydomain из mydestination и поместить его в virtual_mailbox_domains.