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

Postfix (admin), Dovecot, MySQL: не работают псевдонимы

Я могу отправлять почту на почтовые ящики, которые я настроил с помощью postfixadmin. Это работает правильно, и я могу отправлять и доставлять им почту. Но теперь мне нужны псевдонимы для правильной работы. Я использовал руководство для настройки перечисленных Вот. Тем не менее, каким-то образом postfix продолжает попытки отправить почту в почтовый ящик для псевдонима.

Основной адрес электронной почты: name@domain.nl

Псевдоним электронной почты: alias@domain.nl

Записи в базе данных установлены правильно, и когда я запускаю эту команду:

postmap -q alias@domain.nl mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

я получаю правильный адрес электронной почты: name@domain.nl к которому прикреплен почтовый ящик. Что я делаю не так?

Журналы не содержат никакой полезной информации. Когда я отправляю письмо на свой псевдоним, журналы выглядят следующим образом:

Jun 10 10:38:13 localhost postfix/smtpd[3061]: C27DC614DD: client=mail-wm0-f41.google.com[74.125.82.41]
Jun 10 10:38:13 localhost postfix/cleanup[3072]: C27DC614DD: message-id=<CAGUk6whj3Drb-c=5N55TU80UoKR6sC2r4k+3jtxj9pBO5Gp5Pg@mail.gmail.com>
Jun 10 10:38:13 localhost postfix/qmgr[30229]: C27DC614DD: from=<some.personal.email@gmail.com>, size=2011, nrcpt=1 (queue active)
Jun 10 10:38:13 localhost postfix/smtpd[3061]: disconnect from mail-wm0-f41.google.com[74.125.82.41]
Jun 10 10:38:14 localhost postfix/smtp[3074]: C27DC614DD: to=<some.personal.email@gmail.com>, orig_to=<alias@domain.nl>, relay=gmail-smtp-in.l.google.com[74.125.136.27]:25, delay=0.32, delays=0.07/0.01/0.15/0.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1465547906 q2si2091788wme.1 - gsmtp)
Jun 10 10:38:14 localhost postfix/qmgr[30229]: C27DC614DD: removed

Но он не попадает в почтовый ящик name@domain.nl

Мой /etc/postfix/main.cf:

smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no

smtpd_tls_cert_file=/etc/letsencrypt/live/domain.nl/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.nl/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_auth_only = yes

smtpd_tls_mandatory_protocols=!SSLv2
smtpd_tls_ciphers = high
smtpd_tls_loglevel = 1
smtpd_tls_ask_ccert=yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = mail.domain.nl

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname

mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

disable_vrfy_command = yes
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_base = /var/mail

virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf

virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf

header_checks = regexp:/etc/postfix/header_checks

Мой /etc/dovecot/dovecot-sql.conf.ext выглядит так:

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=spieard123
default_pass_scheme = MD5-CRYPT
password_query = SELECT username as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

Мой /etc/dovecot/conf.d/auth-sql.conf.ext выглядит так:

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/%d/%n
}

Пообщайтесь с NickW.

Я открыл новую комнату, так как комната с NickW заморожена. Вы можете присоединиться здесь.

Настройка Postfixadmin:

Я думаю, проблема в том, что вы выбираете конечную точку из почтового ящика, а не из таблицы виртуальных пользователей, поэтому postfix знает, куда он должен идти, но не dovecot.

Изменить :

SELECT username as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

Кому:

password_query = SELECT email as user, password, '/var/mail/%d/%n' as userdb_home, 'maildir:/var/mail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u');

Очевидно, что имена БД и таблиц могут отличаться. AND active = '1' в этом нет необходимости, так как это не таблица почтового ящика ..

Не обращайте внимания на мой первый ответ (ниже) - он работает, но, вероятно, не является хорошим решением.

Есть ли шанс, что у вас есть receive_override_options = no_address_mappings в вашем Postfix main.cf или master.cf.

У меня это было как -o receive_override_options = no_address_mappings как для SMTP, так и для порта отправки. (У меня он еще для DSpam).

Если вы удалите его, Postfix сообщает Dovecot, какому пользователю он должен доставить почту:

userdb { 
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}

/etc/dovecot/dovecot-sql.conf:

user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox, domain WHERE username = '%u' AND mailbox.active = '1' AND domain.domain = '%d' AND domain.active = '1'

Таким образом, Dovecot может знать, какие учетные записи действительно существуют (и имеют почтовые каталоги), а Postfix сообщает Dovecot, какой учетной записи сопоставляется адрес.


Вы пробовали allow_all_users = yes в /etc/dovecot/conf.d/auth-sql.conf.ext

userdb {
  driver = static
  args = uid=vmail gid=vmail allow_all_users=yes home=/var/mail/%d/%n
}

Может потребоваться символическая ссылка на псевдонимов пользователей / доменов

cd /var/mail
ln -s domain.tld alias_domain.tld
or
ln -s domain.tld/user domain2.tld/user_alias

что делает его не таким элегантным, как рабочий SQL-запрос userdb для dovecot ...

userdb { 
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}

Лучшее, что у меня есть, это:

user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox, domain WHERE local_part = '%u' AND domain.domain = '%d';

(при условии 5000: 5000 = vmail: vmail)

что, по крайней мере, заставляет user_aliases работать (мне не удается заставить псевдонимы пользователей работать с псевдонимами доменов)

Postbox будет правильно отклонять неизвестных виртуальных пользователей из-за множества SQL-запросов, предоставляемых Postfixadmin, но в SQL-запросе userdb, предоставленном для dovecot, отсутствуют таблицы alias и alias_domain, и я недостаточно хорошо разбираюсь в SQL, чтобы исправить это.

Чтобы убедиться, что ваш псевдоним работает правильно, вы можете попробовать проверить свой MySQL прямо в первую очередь.

Из вашего журнала я не вижу попыток доставки на ваш почтовый ящик

Выбрать goto из псевдонима

Для псевдонима вы должны увидеть что-то подобное в своем журнале

29 06:46:59 mail postfix/local[15339]: A8967BF907: to=<yourmailbox@domain.com>, orig_to=<youralias@domain.com>, relay=local, delay=1.1, delays=1/0.02/0/0.11, dsn=2.0.0, status=sent (delivered

Глядя на свой журнал, похоже, что это псевдоним вашего адреса Gmail.

Отредактировано Я прочитал ваш комментарий и смоделировал тот же сценарий. Если вы проследите свой ход, вы должны увидеть в своем журнале следующее.

Jun 29 08:15:31 mail postfix/qmgr[9259]: D803DC04BD: from=<someone@gmail.com>, size=741, nrcpt=2 (queue active)
Jun 29 08:15:31 mail postfix/smtpd[18918]: disconnect from micro.sg[128.199.136.21] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Jun 29 08:15:31 mail dovecot: lda(someone@domain.com): msgid=<ee6c9f45452e0afa0b7028fccc380362@domain.com>: saved mail to INBOX
Jun 29 08:15:31 mail postfix/pipe[18984]: D803DC04BD: to=<name@domain.com>, orig_to=<alias@domain.com>, relay=dovecot, delay=0.06, delays=0.01/0.01/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Jun 29 08:15:33 mail postfix/smtp[18941]: D803DC04BD: to=<your-personal@gmail.com>, orig_to=<alias@domain.com>, relay=gmail-smtp-in.l.google.com[74.125.200.27]:25, delay=1.4, delays=0.01/0/0.87/0.49, dsn=2.0.0, status=sent (250 2.0.0 OK 1467202533 f205si352653oib.152 - gsmtp)
Jun 29 08:15:33 mail postfix/qmgr[9259]: D803DC04BD: removed

обратите внимание, было 2 разных вызова и доставки по smtp. Не могли бы вы проверить и убедиться, что ваша доставка в локальный почтовый ящик проверяется администратором постфикса. См. Экран postfixadmin -> Виртуальный список -> Почтовый ящик -> Псевдоним. Вы должны проверить местный почтовый ящик

Если вы установили флажок выше, значит, это другой набор проблем.