По сути, я хочу переписать заголовок From:, используя header_checks, но только если почта отправляется на определенный домен.
Проблема с header_check заключается в том, что я не могу проверить комбинацию заголовков «Кому:» и «От:».
Теперь мне стало интересно, можно ли использовать header_checks в сочетании с smtpd_restriction_classes или чем-то подобным.
Я нашел много информации о header_checks и множественных полях заголовков, когда искал в сети. Все они в основном говорили мне, что нельзя объединить два заголовка для проверки. Но я не нашел никакой информации, можно ли было бы выполнить проверку заголовка только при соблюдении условия (например, почта отправляется на example.com).
Редактировать:
Проведя еще некоторые исследования, я обнаружил следующее:статьячто предполагает добавление службы в postfix master.cf, использование transportmap для передачи почты для домена в эту службу и определение отдельной проверки заголовка с помощью -o.
Дело в том, что я не могу заставить его работать...
На данный момент я добавил службу в master.cf:
example unix - - n - - smtpd
-o header_checks=regexp:/etc/postfix/check_headers_example
Добавляем следующую строку в transportmap:
example.com example:
И последнее, но не менее важное: у меня есть два файла регулярных выражений для проверки заголовков: один для недавно добавленной службы и один для перенаправления ответов на переписанный домен.
пример_проверки_заголовков:
/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2
Очевидно, что если кто-то ответит, почта отправится в нирвану, поэтому я определил следующие check_headers в основном процессе postfix:
/To:(.*)<(.*)@mydomain.example.com>(.*)/ REDIRECT [email protected]$2
Транспорт почему-то игнорируется. Любая помощь приветствуется.
Редактировать 2:
Я все еще в тупике... Я попробовал следующее:
smtpd_restriction_classes = header_rewrite
header_rewrite = regexp:/etc/postfix/rewrite_headers_domain
smtpd_recipient_restrictions = (some checks) check_recipient_access hash:/etc/postfix/rewrite_table, (more checks)
В списке rewrite_table
имеются следующие записи:
/From:(.*)@mydomain.ain>(.*)/ REPLACE From:[email protected]>$2
Все, что мне это дает, это NOQUEUE: reject: 451 4.3.5 Server configuration error
. Я не смог найти никаких ресурсов о том, как это сделать, но некоторые люди говорят, что это невозможно.
Редактировать 3:
Причина, по которой я задал этот вопрос, заключается в том, что у нас есть клиент (скажем, customer.com), который использует некоторые псевдонимы, которые пересылают почту на домен, скажем, example.com.
Почтовый сервер example.com не принимает почту с внешнего сервера, пришедшую от отправителя @example.com.
Итак, все письма, отправленные с example.com на[email protected]в конечном итоге будет отклонено.
Исключение на почтовом сервере example.com невозможно.
Мы на самом деле не решили эту проблему, но попробуем обойти ее, используя списки (mailman) вместо псевдонимов. Это не очень хорошо, но и не является настоящим решением.
Я был бы признателен за любые предложения о том, как это можно сделать надлежащим образом.
решение1
Я не уверен, удалось ли вам добиться желаемого. Я тестировал похожую вещь, мне нужна была фильтрация ключевых слов и т. д. на основе домена, и я смог использовать header_checks на домене или для нужных мне доменов с помощью функции многоэкземплярности postfix.
Вы создаете экземпляр, просто меняете smtp-порт на этом конкретном экземпляре. Вы используете transport_maps на первичном экземпляре для маршрутизации писем для определенного домена на smtp-порт вторичного экземпляра. И делаете все header_checks там и ретранслируете почту!
Ваше здоровье!
решение2
Вы можете настроить новый сервер, маршрутизировать все домены, которые вы хотите обработать, с помощью транспортного файла, а затем применить правила header_checks на новом сервере.