Postfix alias mail получает сообщения только из локальных почтовых ящиков

Я установил почтовый сервер Postfix-Dovecot, следуя руководству (How to Set Up an Email Server With Postfix, Dovecot and MySQL), которое определяет простую настройку с виртуальными почтовыми ящиками и базой данных, которая отображает виртуальные домены, виртуальных пользователей и виртуальные псевдонимы.

Ниже, домен сервера называется server.com. Почтовый сервер обрабатывает также другой домен, который здесь называется example.com.

mail@example.com имеет псевдоним, alias@example.com. Вот что происходит:

  1. письмо от mail@server.com на alias@example.com: доставлено
  2. письмо от mymail@gmail.com на main@example.com: доставлено
  3. письмо mymail@gmail.com на alias@example.com: rejected

В последнем случае ответ:

554 5.7.1 <alias@example.com>: Recipient address rejected: Unknown user

Другими словами, псевдоним получает сообщения только от локальных почтовых ящиков.

Ограничения получателя следующие:

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unlisted_recipient,
        reject_unauth_destination,
        check_policy_service inet:localhost:12345
1
задан 26 June 2021 в 13:52
1 ответ

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

В данном случае это последний из smtpd_recipient_restrictions :

check_policy_service inet: localhost: 12345

Собственно проблема исчезает после ее удаления.

Когда выполняется проверка квоты, журнал показывает следующее:

dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): Started userdb lookup
dovecot: auth: master in: USER#0111#011alias@example.com#011service=quota-status
dovecot: auth: static(alias@example.com): Performing userdb lookup
dovecot: auth: sql(alias@example.com): Performing passdb lookup
dovecot: auth-worker: conn unix:auth-worker: Handling PASSL request
dovecot: auth-worker: sql(alias@example.com): Performing passdb lookup
dovecot: auth-worker: sql(alias@example.com): query: SELECT email as user, password FROM virtual_users WHERE email='alias@example.com';
dovecot: auth-worker: sql(alias@example.com): unknown user
dovecot: auth-worker: sql(alias@example.com): Finished passdb lookup
dovecot: auth-worker: conn unix:auth-worker: Finished
dovecot: auth: sql(alias@example.com): Finished passdb lookup
dovecot: auth: static(alias@example.com): Finished userdb lookup
dovecot: auth: userdb out: NOTFOUND#0111
dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): auth USER input: 
dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): Userdb lookup failed
postfix/smtpd: NOQUEUE: reject: 554 5.7.1 <alias@example.com>: Recipient address rejected: Unknown user; from=<mymailgmail.com> to=<alias@example.com>

Проблема в том, что запрос, определенный в etc / dovecot / dovecot-sql.conf.ext , ищет электронную почту только в virtual_users таблица:

query: SELECT email as user, password FROM virtual_users WHERE email='alias@example.com';

В учебнике Linode , упомянутом выше, в какой-то момент говорится:

Чтобы использовать псевдоним в качестве имени пользователя:

Добавьте псевдоним в качестве источника и назначения адрес электронной почты в таблицу virtual_aliases. Измените значение password_query файла /etc/dovecot/dovecot-sql.conf.ext на:

  password_query = SELECT email as user, password FROM virtual_users WHERE email = (SELECT destination FROM virtual_aliases WHERE source = '% u'); 
 

Я выбрал немного другое решение, сделав ОБЪЕДИНЕНИЕ двух запросов, чтобы сначала выполнить поиск виртуального пользователя, а затем виртуальный псевдоним:

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u' \
 UNION SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u');

Это прекрасно работает. Ниже приводится отрывок из журнала:

dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): Started userdb lookup
dovecot: auth: master in: USER#0114#011alias@example.com#011service=quota-status
dovecot: auth: static(alias@example.com): Performing userdb lookup
dovecot: auth: sql(alias@example.com): Performing passdb lookup
dovecot: auth: sql(alias@example.com): username changed alias@example.com -> mail@example.com
dovecot: auth: sql(mail@example.com): Finished passdb lookup
dovecot: auth: static(mail@example.com): Finished userdb lookup
dovecot: auth: userdb out: USER#0114#011mail@example.com#011uid=5000#011gid=5000#011home=/var/mail/vhosts/example.com/mail
dovecot: auth-worker: conn unix:auth-worker: Handling PASSL request
dovecot: auth-worker: sql(alias@example.com): Performing passdb lookup
dovecot: auth-worker: sql(alias@example.com): query: SELECT email as user, password FROM virtual_users WHERE email='alias@example.com' UNION SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source='alias@example.com');
dovecot: auth-worker: sql(alias@example.com): username changed alias@example.com -> mail@example.com
dovecot: auth-worker: sql(mail@example.com): Finished passdb lookup
dovecot: auth-worker: conn unix:auth-worker: Finished
dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): auth USER input: mail@example.com uid=5000 gid=5000 home=/var/mail/vhosts/example.com/mail
dovecot: quota-status(alias@example.com): auth-master: userdb lookup(alias@example.com): Finished userdb lookup
dovecot: quota-status(alias@example.com): changed username to mail@example.com
dovecot: quota-status(mail@example.com): Effective uid=5000, gid=5000, home=/var/mail/vhosts/example.com/mail
dovecot: lmtp(mail@example.com): auth-master: userdb lookup(mail@example.com): Started userdb lookup
dovecot: lmtp(mail@example.com): auth-master: userdb lookup(mail@example.com): auth USER input: mail@example.com uid=5000 gid=5000 home=/var/mail/vhosts/example.com/mail
dovecot: lmtp(mail@example.com): auth-master: userdb lookup(mail@example.com): Finished userdb lookup
dovecot: auth: master in: USER#0112#011mail@example.com#011service=lmtp
dovecot: auth: static(mail@example.com): Performing userdb lookup
dovecot: auth: sql(mail@example.com): Performing passdb lookup
dovecot: auth: sql(mail@example.com): Finished passdb lookup
dovecot: auth: static(mail@example.com): Finished userdb lookup
dovecot: auth: userdb out: USER#0112#011mail@example.com#011uid=5000#011gid=5000#011home=/var/mail/vhosts/example.com/mail
dovecot: auth-worker: conn unix:auth-worker: Handling PASSL request
dovecot: auth-worker: sql(mail@example.com): Performing passdb lookup
dovecot: auth-worker: sql(mail@example.com): query: SELECT email as user, password FROM virtual_users WHERE email='mail@example.com' UNION SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source='mail@example.com');
dovecot: auth-worker: sql(mail@example.com): Finished passdb lookup
dovecot: auth-worker: conn unix:auth-worker: Finished
dovecot: lmtp(mail@example.com): lmtp-server: conn unix: rcpt mail@example.com: Effective uid=5000, gid=5000, home=/var/mail/vhosts/example.com/mail
dovecot: lmtp(mail@example.com): lmtp-server: conn unix: rcpt mail@example.com: Mailbox INBOX: Mailbox opened because: lib-lda delivery
dovecot: lmtp(mail@example.com): saved mail to INBOX
postfix/lmtp: to=<mail@example.com>, orig_to=<alias@example.com>, relay=server.example.com[private/dovecot-lmtp], status=sent
0
ответ дан 28 July 2021 в 13:23

Теги

Похожие вопросы