Здравствуйте! В postfix настроено два виртуальных домена domain1.ru и domain2.ru. Необходимо, чтобы адреса вида user@domain1.ru преобразовывались в user@domain2.ru. После прочтения документации вижу 2 варианта: virtual_alias_maps или recipient_canonical_maps(добавить строку вида: @domain1.ru @domain2.ru). Однако, так теряется проверка существования пользователя на этапе RCPT To в домене domain1.ru, то есть при несуществующем пользователе после rcpt to: всегда будет ok. До включения преобразования адресов всё было в порядке. Есть ли способ преобразования адресов, не теряя при этом возможности проверки существования пользователей?
Попробуйте так./etc/postfix/main.cf:
virtual_mailbox_domains = domain1.ru, domain2.ru
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/virtual/etc/postfix/virtual:
@domain1.ru @domain2.ru
>Попробуйте так.
>
>/etc/postfix/main.cf:
> virtual_mailbox_domains = domain1.ru, domain2.ru
> virtual_mailbox_maps = hash:/etc/postfix/vmailbox
> virtual_alias_maps = hash:/etc/postfix/virtual
>
>/etc/postfix/virtual:
> @domain1.ru @domain2.ruпробовал, проверка при таком раскладе для домена domain1.ru не работает
>пробовал, проверка при таком раскладе для домена domain1.ru не работает
Да, действительно. Тогда, как вариант, "повесить" второй postfix и насроить на нем переписывание доменов. На первом настроить пересылку через второй.
>>пробовал, проверка при таком раскладе для домена domain1.ru не работает
>Да, действительно. Тогда, как вариант, "повесить" второй postfix и насроить на нем
>переписывание доменов. На первом настроить пересылку через второй.
не нравится это, усложнение слишком сильное. Допустим я отключу проверку на этапе rcpt to, хотелось бы тогда не слать в ответ письма о том, что пользователь не найден. Можно ли это сделать в postfix?
Не так это и сложно, как кажется. Можно не настраивать второй postfix, а использовать, например, smtpd_proxy_filter (или content_filter), который обычно уже используется./etc/postfix/master.cf:
1.2.3.4:smtp inet n - n - - smtpd
-o smtpd_proxy_filter=127.0.0.1:10026
-o smtp_send_xforward_command=yes127.0.0.1:10026 inet n - n - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o cleanup_service_name=cleanup-int
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8cleanup-int unix n - n - 0 cleanup
-o virtual_alias_maps=hash:/etc/postfix/virtual_alias
/etc/postfix/main.cf:
virtual_mailbox_domains = domain1.ru, domain2.ru
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
/etc/postfix/vmailbox:
user@domain1.ru domain2.ru/user
user@domain2.ru domain2.ru/user
/etc/postfix/virtual:
@domain1.ru @domain2.ru
>Не так это и сложно, как кажется. Можно не настраивать второй postfix,
>а использовать, например, smtpd_proxy_filter (или content_filter), который обычно уже используется.
>
>/etc/postfix/master.cf:
>
>1.2.3.4:smtp inet n
> - n
> -
> - smtpd
> -o smtpd_proxy_filter=127.0.0.1:10026
> -o smtp_send_xforward_command=yes
>
>127.0.0.1:10026 inet n
> - n
> -
> - smtpd
> -o smtpd_authorized_xforward_hosts=127.0.0.0/8
> -o cleanup_service_name=cleanup-int
> -o smtpd_helo_restrictions=
> -o smtpd_client_restrictions=
> -o smtpd_sender_restrictions=
> -o smtpd_recipient_restrictions=permit_mynetworks,reject
> -o mynetworks=127.0.0.0/8
>
>cleanup-int unix n
>- n
> - 0
> cleanup
> -o virtual_alias_maps=hash:/etc/postfix/virtual_alias
>
>
>/etc/postfix/main.cf:
> virtual_mailbox_domains = domain1.ru, domain2.ru
> virtual_mailbox_maps = hash:/etc/postfix/vmailbox
> virtual_mailbox_base = /var/spool/mail/vhosts
> virtual_uid_maps = static:5000
> virtual_gid_maps = static:5000
>
>
>/etc/postfix/vmailbox:
> user@domain1.ru domain2.ru/user
> user@domain2.ru domain2.ru/user
>
>
>/etc/postfix/virtual:
> @domain1.ru @domain2.ruэто уже интереснее, попробую. Спасибо!
единственный момент, на smtp уже есть фильтр для проверки на вирусы\спам:
smtp inet n - n - - smtpd -o content_filter=spam:dummy
spam unix - n n - 100 pipe
flags=Rqu user=drweb argv=/usr/local/bin/spamc -u dovecot -e /usr/local/drweb/drweb-postfix --conf=/usr/local/etc/drweb/drweb_postfix.conf -f ${sender} -- ${recipient}
Как лучше в этом случае состыковать smtpd_proxy_filter и имеющийся content_filter?
smtp inet n - n - - smtpd
-o smtpd_proxy_filter=127.0.0.1:10026
-o smtp_send_xforward_command=yes127.0.0.1:10026 inet n - n - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o cleanup_service_name=cleanup-int
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o content_filter=spam:dummy
>smtp inet n
> - n
> -
> - smtpd
> -o smtpd_proxy_filter=127.0.0.1:10026
> -o smtp_send_xforward_command=yes
>
>127.0.0.1:10026 inet n
> - n
> -
> - smtpd
> -o smtpd_authorized_xforward_hosts=127.0.0.0/8
> -o cleanup_service_name=cleanup-int
> -o smtpd_helo_restrictions=
> -o smtpd_client_restrictions=
> -o smtpd_sender_restrictions=
> -o smtpd_recipient_restrictions=permit_mynetworks,reject
> -o mynetworks=127.0.0.0/8
> -o content_filter=spam:dummy
Всё сделал - работает. Большое спасибо за участие!