![Конфигурация exim4 с демоном SRS](https://rvso.com/image/668767/%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20exim4%20%D1%81%20%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D0%BE%D0%BC%20SRS.png)
Я пытаюсь настроить exim 4 с внешним демоном SRS (пакет Debian srs). Srsd работает и конвертирует адреса туда и обратно просто отлично. Я не могу использовать встроенный код srs exim, так как он не включен в Debian (я знаю, что могу скомпилировать сам, но это не вариант).
У меня проблемы с маршрутизатором srs_forward в exim для добавления тегов SRS к пересылаемым письмам. У меня есть следующий маршрутизатор перенаправления, который должен работать только для сообщений без ошибок от нелокальных отправителей и нелокальных получателей, которые не ретранслируются для другого mx - по крайней мере, я понимаю, что srs применяется к таким сообщениям. Пожалуйста, поправьте меня, если это не так. У меня есть следующий код:
srs_forward:
debug_print = "R: srs_forward for $local_part@$domain"
driver = redirect
senders = ! :
condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}
domains = ! +local_domains : ! +relay_to_domains
address_data = ${readsocket{/tmp/srsd}\
{FORWARD $sender_address_local_part@$sender_address_domain $domain\n}\
{5s}{\n}{:defer: SRS daemon failure}}
errors_to = ${quote_local_part:${local_part:$address_data}}@${domain:$address_data}
data = ${quote_local_part:$local_part}@$domain
headers_add = X-SRS: Sender address rewritten from $sender_address to ${quote_local_part:${local_part:$address_data}}@$$
repeat_use = false
allow_defer
no_verify
Что я смог протестировать и что работает: Обратный путь генерируется правильно (строки с address_data и error_to, а также адрес to (строка, начинающаяся с data).
Я не уверен в предварительных условиях:
senders = ! :
Эта строка должна предотвратить запуск маршрутизатора при появлении сообщений об ошибках.
condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}
Эта строка должна запретить маршрутизатору обрабатывать сообщения от локальных отправителей.
domains = ! +local_domains : ! +relay_to_domains
Эта строка должна запретить маршрутизатору отправлять сообщения локальным получателям или ретранслировать сообщения.
Может ли кто-нибудь прояснить ситуацию?
(Я использовалруководствов качестве отправной точки, хотя и безуспешно.)
решение1
Вы не провели проверку должным образом. Ваша информация, которую вы передаете демону SRS, неверна:
FORWARD $sender_address_local_part@$sender_address_domain $domain\n
Это не то, что вам нужно: $domain содержит домен получателя, а не домен отправителя. Ваше намерение переписать обратный путь к домену, с которого было переслано сообщение, является честным, но не работает так: Сообщение попадает на ваш маршрутизатор SRSпослепересылка уже была выполнена, поэтому $domain больше не содержит домен, на который было отправлено сообщение. Вам следует использовать $primary_hostname или $original_domain. Таким образом, эта строка должна выглядеть так:
address_data = ${readsocket{/tmp/srsd}\
{FORWARD $sender_address_local_part@$sender_address_domain $original_domain\n}\
{5s}{\n}{:defer: SRS daemon failure}}
Что касается ваших предварительных условий, то они в порядке. Вы можете взять строки "отправители" и "условие" вместе:
senders = ! : ! *@+local_domains
Вам просто нужно убедиться, что список доменов local_domains действительно содержит все ваши локальные домены (по крайней мере, он должен содержать для текущего маршрутизируемого сообщения $original_domain и $sender_address_domain).
Пожалуйста, задокументируйте свою конфигурацию, если ваш код работает, и дайте нам несколько советов здесь. Вам нужно организовать еще несколько вещей: ACL для проверки входящих сообщений об ошибках с тегом SRS, снять тег с писем с тегом SRS для серого списка, снять тег с ошибок, убедиться, что вы не добавляете никаких других тегов, таких как BATV, к исходящим сообщениям, обойти, чтобы принимать сообщения с тегом SRS с разбитым случаем, переписать текст сообщения об ошибке ошибки, чтобы не включать адрес отправителя с тегом SRS, возможно, запретить любые не тегированные ошибки и т. д. Поэтому хорошее руководство было бы полезно. Спасибо!