Postfix relay user if not found on local mail server

У меня есть конкретная потребность, которая, казалось, может быть реализована с помощью Postfix.

В моем распоряжении 2 почтовых сервера.

  • первый на локальном linux сервере, который управляется Postfix с Dovecot
  • второй управляется gmail (pro) для некоторых пользователей (это не @gmail.com почта)

Например, у меня есть user.a@domain.com на локальном сервере, и user.b@domain.com управляемый gmail. Если я посылаю письмо на user.a@domain.com, его принимает локальный сервер. Но если я отправляю письмо на user.b@domain.com, я бы хотел, чтобы это письмо было перенаправлено на gmail.

В настоящее время локальная часть работает отлично, однако когда я пытаюсь отправить письмо на user.b@domain.com (пользователь, управляемый gmail), письмо отклоняется: "Адрес получателя отклонен: Пользователь неизвестен в таблице виртуальных почтовых ящиков".

Есть идеи? Вот моя конфигурация main.cf (Postfix)

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no

smtpd_tls_cert_file=/etc/letsencrypt/live/domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.com/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_helo_required = yes
smtpd_helo_restrictions = reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,reject_unknown_helo_hostname

disable_vrfy_command = yes
smtpd_delay_reject = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,reject_invalid_hostname,reject_non_fqdn_hostname,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_sender_domain,reject_rbl_client sbl.spamhaus.org,reject_rbl_client cbl.abuseat.org

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
relay_recipient_maps = hash:/etc/postfix/relay_recipients
transport_maps = hash:/etc/postfix/transport 

myhostname = domain.com
alias_maps = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.ovh.net, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_milters = inet:localhost:12301 inet:localhost:54321
non_smtpd_milters = inet:localhost:12301 inet:localhost:54321

Содержание файла relay_recipients :

user.b@domain.com

Содержание транспортного файла

user.b@domain.com relay:[smtp.google.com]:587
* local

Возможно ли это?


Моя новая конфигурация:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no

readme_directory = no

smtpd_tls_cert_file=/etc/letsencrypt/live/maws.fr/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/maws.fr/privkey.pem
smtpd_tls_security_level=may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_auth_enable = yes
smtp_sender_dependent_authentication = yes
smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_security_options = noanonymous

smtpd_helo_required = yes
smtpd_helo_restrictions = reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,reject_unknown_helo_hostname

disable_vrfy_command = yes
smtpd_delay_reject = yes
transport_maps = hash:/etc/postfix/transport

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

myhostname = vps42.ovh.net 
alias_maps = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname localhost.$mydomain localhost $mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
relayhost = [smtp.gmail.com]:587
inet_protocols = ipv4
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = hash:/etc/postfix/transport  mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_milters = inet:localhost:12301 inet:localhost:54321
non_smtpd_milters = inet:localhost:12301 inet:localhost:54321

Содержание транспортного файла:

user.b@domain.com relay:[smtp.gmail.com]:587

Теперь, когда я отправляю письмо на user.a@domain.com (мой локальный пользователь), оно управляется в local. Если я отправляю письмо на user.b@domain.com (управляемый gmail), я получаю свое письмо (победа!), но оно отправляется в цикле (печально...) :

postfix/smtp[6097]: A601C44494: to=<user.b@domain.com>, relay=smtp.gmail.com[142.251.4.108]:587, delay=2.3, delays=0.38/0.03/1.3/0.51, dsn=2.0.0, status=sent (250 2.0.0 OK  1622552412 j10sm9603207ilk.87 - gsmtp)
postfix/smtp[6097]: 2CC4844494: to=<user.b@domain.com>, relay=smtp.gmail.com[173.194.76.108]:587, delay=1.1, delays=0.42/0/0.3/0.34, dsn=2.0.0, status=sent (250 2.0.0 OK  1622552415 o3sm3206340wrm.78 - gsmtp)

(небольшая часть логов, это результат отправки, полный лог: https://mclo.gs/wOo6BFB)

Я отправил письмо с user-test@orange.com на user.b@domain.com, и после цикла появляется отправка с user.b@domain.com на user.b@domain.com

Есть идеи?

0
задан 1 June 2021 в 23:08
1 ответ

Где ваши relay_domains ? Все, что у вас есть в $ mydestination , - это имя вашего локального сервера.

Согласно базовой конфигурации README :

ВАЖНО: Если ваш компьютер является почтовым сервером для всего домена, вы также должны указать $ mydomain.

  Example 2: domain-wide mail server.

    /etc/postfix/main.cf:
        mydestination = $myhostname localhost.$mydomain localhost $mydomain

Если вы не собираетесь указывать $ myhostname в качестве полного доменного имени (по умолчанию Postfix извлекает $ mydomain , удаляя первую часть), вам лучше не указывая $ myhostname , а вместо этого укажите $ mydomain , поскольку Postfix будет извлекать для вас имя хоста из этого (более подробная информация в README базовой конфигурации).

Затем для транспортного файла необходимо убедиться, что, если вы используете relay на своей транспортной карте, вы установили $ relayhost с адресатом Gmail и имели действительные учетные данные в sasl_passwd для него.

В этом руководстве есть полезная информация по настройке $ relayhost и sasl_passwd : https://www.linuxbabe.com/mail-server/postfix-transport- map-relay-map-flexible-email-delivery

Кроме того, я достаточно старомоден, я бы также хотел явно указать свой домен в transport_maps , если я разделяю получателей:

user.b@domain.com smtp:[smtp.google.com]:587
domain.com        local
0
ответ дан 28 July 2021 в 14:39

Теги

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