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

Postfix virtual_alias крадет письма из virutal_mailbox

Я пытаюсь настроить общий адрес. В моей таблице virtual_mailbox я настроил электронную почту следующим образом:

select * from virtual_users;

 id | domain_id |      password     |           email
----+-----------+----------------------------------------------
  3 |         1 | ***************** | drewag@domain.com
  4 |         1 | ***************** | catchall@domain.com

Это отлично работает само по себе. Когда я пытаюсь добавить виртуальный псевдоним для catchall:

select * from virtual_aliases;

 id | domain_id |      source       |        destination
----+-----------+-------------------+---------------------------
  1 |         1 | @domain.com       | catchall@domain.com

Как только я добавлю этот virtual_alias, вся электронная почта будет перехвачена, и я могу отправить любую на drewag@domain.com.

Что мне нужно сделать, чтобы изменить приоритет?

Вот что я получаю в журналах постфиксов:

Oct 20 23:24:26 localhost postfix/qmgr[8002]: C23A711DF9: from=<drewag@example.com>, size=1712, nrcpt=1 (queue active)
Oct 20 23:24:26 localhost postfix/lmtp[8148]: C23A711DF9: to=<catchall@domain.com>, orig_to=<drewag@domain.com>, relay=domain.com[private/dovecot-lmtp], delay=0.42,     delays=0.4/0.01/0.01/0.01, dsn=2.0.0, status=sent (250 2.0.0 <catchall@domain.com> 8V9DA4q6ZFLVHwAA0J78UA Saved)
Oct 20 23:24:26 localhost postfix/qmgr[8002]: C23A711DF9: removed

Я нашел решение здесь (в частности, в разделе «Черная магия»: https://workaround.org/book/export/html/58

По сути, псевдонимы всегда имеют приоритет над почтовыми ящиками. Итак, чтобы это работало, к псевдонимам также необходимо добавить фактические адреса электронной почты. Вместо того, чтобы дублировать данные, мы можем создать сопоставление email2email и добавить его к сопоставлениям псевдонимов. В случае PostgreSQL /etc/postfix/main.cf будет включать следующее:

# /etc/postfix/main.cf
virtual_alias_maps = pgsql:/etc/postfix/pgsql-virtual-alias-maps.cf,pgsql:/etc/postfix/pgsql-email2email.cf

Примечание: есть две разные карты virtual_alias

Тогда pgsql: /etc/postfix/pgsql-email2email.cf выглядит так:

user = mailuser
password = mailuserpass
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email='%s';

Примечание: это идентично конфигурации virtual_mailboxes_map, за исключением того, что мы выбираем «email» вместо 1.