domain.com
и domain.net
размещены на одном сервере server1
. Чтобы избежать спама и вирусов, все исходящие электронные письма (даже в локальные домены) подлежат сканированию с помощью сторонней службы. Таким образом, письмо от mail@domain.com
к mail@domain.net
следует оставить server1
, то он будет проверяться вне server1
, а затем доставить в соответствии с записью MX в server1
, откуда он и возник.
И вот мы заканчиваем циклом: Too many "Received" headers - suspected mail loop
.
А вот что у меня:
smarthost_relay:
driver = manualroute
ignore_target_hosts = 127.0.0.0/8
condition = ${if !inlist{$sender_host_address}{<; 46.xxx.xxx.xxx }}
condition = ${if or {{!eq{$sender_address}{}} {!eq{$sender_host_address}{}}}}
condition = '${perl{check_limits}}'
transport = auth_relay
route_list = $domain 46.xxx.xxx.xxx::587
same_domain_copy_routing = yes
no_more
В $sender_host_address
здесь не работает, как я ожидал. Поскольку он пуст, когда приходит электронное письмо после удаленной проверки. Что я скучаю? Как этого добиться?
С уважением, Алекс.
Вы можете захотеть установить переменную ACL в ACL во время обработки сообщения, чтобы указать, что сообщение было получено от фильтра спама. Для этого можно использовать несколько списков ACL, которые обычно не определены. Подобный блок ACL должен обнаруживать спам-фильтр по IP или DNS-имени:
warn
hosts = 46.xxx.xxx.xxx : spamfilter.example.com
set acl_c9 = SPAMFiltered
logwrite = Received from SPAM Filter server
Затем воспользуйтесь простой проверкой переменной в транспорте.
condition = ${if eq {$acl_c9}{}}
Вы можете удалить log_write из ACL, если убедитесь, что он работает.
Чтобы это работало, вам необходимо убедиться, что вы не используете TURN или ETRN для получения почты обратно через соединение, которое вы использовали для отправки сообщения для фильтрации спама.
Если вы хотите попробовать изменить свои условия, вы можете посмотреть на оператор match_ip вместо in_list.
Чтобы отфильтровать маршрутизацию сообщений в том же домене, попробуйте выполнить условие маршрутизатора, например:
domains = ! $sender_address_domain
Я добавил следующие строки в acl_check_mail:
warn hosts = ! 46.xxx.xxx.xxx
set acl_m_filtered = 0
add_header = X-Received-SPAM-Filtered: $acl_m_filtered
warn hosts = 46.xxx.xxx.xxx
set acl_m_filtered = 1
add_header = X-Received-SPAM-Filtered: $acl_m_filtered
и использовать condition = ${if eq {$acl_m_filtered}{0}{yes}{no}}
проверьте в моем роутере.
Циклов пока нет;)