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

Полное изменение получателя на Postfix

Я пытаюсь добиться того, чтобы любое письмо, приходящее на joe@example.com переписывается на bob@example.com и доставлен в bob@example.com.

Обе canonical_maps и virtual_alias_maps работа для доставки альтернативному получателю. Когда я прочитал док это говорит мне, что с canonical_maps, cleanup делает полную перезапись.

Однако на практике в электронном письме все еще есть to исходного получателя. Поэтому, глядя на письмо в почтовом ящике Боба, он показывает письмо Джо.

Почему-то я чувствую, что здесь чего-то не хватает.

Конфигурация:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
bounce_queue_lifetime = 2d
canonical_maps = hash:/etc/postfix/canonical
config_directory = /etc/postfix
header_checks = pcre:/etc/postfix/header_checks
home_mailbox = Maildir/
html_directory = /usr/share/doc/postfix/html
inet_interfaces = all
mailbox_size_limit = 0
maximal_queue_lifetime = 4d
milter_default_action = accept
milter_protocol = 2
mydestination = ...
myhostname = ...
mynetworks = ...
myorigin = /etc/mailname
non_smtpd_milters = inet:localhost:8891
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
relayhost =
smtp_fallback_relay = ...
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_milters = inet:localhost:8891
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_access        permit_mynetworks       reject_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
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = hash:/etc/postfix/virtual

Журналы:

Sep 25 09:40:30 server1 postfix/smtpd[28285]: connect from mail-la0-f66.google.com[209.85.215.66]
Sep 25 09:40:31 server1 postfix/smtpd[28285]: 7CA784EDB6: client=mail-la0-f66.google.com[209.85.215.66]
Sep 25 09:40:31 server1 postfix/cleanup[28339]: 7CA784EDB6: message-id=<CAJjncucnGM532xhcn37VAwmwQoYEwOUfE_A33-oyJJH5PqPUcA@mail.gmail.com>
Sep 25 09:40:31 server1 postfix/qmgr[7593]: 7CA784EDB6: from=<sender@email.com>, size=1813, nrcpt=1 (queue active)
Sep 25 09:40:32 server1 postfix/smtpd[28285]: disconnect from mail-la0-f66.google.com[209.85.215.66]
Sep 25 09:40:32 server1 postfix/smtp[28593]: 7CA784EDB6: enabling PIX workarounds: disable_esmtp delay_dotcrlf for ...[...]]:25
Sep 25 09:40:33 server1 postfix/smtp[28593]: 7CA784EDB6: to=<bob@example.com>, orig_to=<joe@example.org>, relay=...[...]:25, delay=1.6, delays=0.45/0/0.42/0.73, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 98F729600E)
Sep 25 09:40:33 server1 postfix/qmgr[7593]: 7CA784EDB6: removed

Из журнала mail.log похоже, что вы хотите переписать электронную почту с удаленного клиента. Настройка по умолчанию перезаписи постфикса предотвращает это.

Отрывок из README для перезаписи Postfix

Postfix версии 2.2 дает вам возможность либо вообще не перезаписывать заголовки сообщений от удаленных клиентов SMTP, либо помечать неполные адреса в таких заголовках сообщений как недопустимые. Вот как это работает:

  • Postfix всегда перезаписывает заголовки сообщений от локальных клиентов SMTP и от команды Postfix sendmail и добавляет свой собственный домен к неполным адресам. В local_header_rewrite_clients Параметр определяет, какие SMTP-клиенты Postfix считает локальными (по умолчанию только адреса локальных сетевых интерфейсов).

  • Postfix никогда не перезаписывает адреса заголовков сообщений от удаленных клиентов SMTP, когда remote_header_rewrite_domain значение параметра пустое (настройка по умолчанию).

  • В противном случае Postfix перезаписывает заголовки сообщений от удаленных клиентов SMTP и добавляет remote_header_rewrite_domain значение для неполных адресов. Эту функцию можно использовать для добавления зарезервированного домена, такого как «domain.invalid», чтобы неполные адреса нельзя было ошибочно принять за локальные.

Итак, самое простое решение - не оставлять параметр remote_header_rewrite_domain с пустым значением. Вам необходимо указать значение этого параметра со значением, например

remote_header_rewrite_domain = domain.invalid

Или вы можете использовать static:all по параметру local_header_rewrite_clients поэтому postfix будет считать всех удаленных клиентов локальными.

local_header_rewrite_clients = static:all

Источник: Официальные документы по переписыванию адресов Postfix