У меня есть сервер cPanel / WHM с exim и SpamAssassin. Я заметил проблему, из-за которой электронные письма приходят с поддельными заголовками spamassassin в обход некоторых фильтров. Я хочу удалить все заголовки SpamAssassin до того, как он пройдет через spamassassin, а затем отфильтрован в папки входящих / спам.
Поискав в сети, я смог найти только один подобный экземпляр с 2004 г.. Однако конфигурации exim, сделанные мной и этим пользователем, очень разные. Я не знаю, как это применить. Я могу запустить formail для файла, содержащего сообщение, чтобы удалить заголовки, но я не знаю, как заставить exim это сделать.
В качестве примера приведу сообщение с такими заголовками:
X-Spam-Status: No, score=1.3
X-Spam-Score: 13
X-Spam-Bar: +
X-Ham-Report: Spam detection software, running on the system "serv02.example.com", has
identified this incoming email as possible spam. The original message *snip*
X-Spam-Flag: NO
My SpamAssassin добавит в сообщение следующие заголовки:
X-Spam-Status: Yes, score=6.8
X-Spam-Score: 68
X-Spam-Bar: ++++++
X-Spam-Report: Spam detection software, running on the system "serv02.example.com", has
identified this incoming email as possible spam. The original message *snip*
X-Spam-Flag: YES
Но поскольку правила exim vfilter читают первые заголовки X-Spam, электронное письмо попадает в папку «Входящие» пользователя, а не в папку для спама.
Exim для cPanel использует vfilters, хранящиеся в / etc / vfilters, и полагается на заголовок X-Spam-Bar. Другие системы могут использовать X-Spam-Flag-Status или Score, чтобы определить, сохранять ли сообщение в папке входящих сообщений, в папке для спама или удалять его. К сожалению, vfilter будет использовать самое первое совпадение, что и составляет суть проблемы.
Найдено устаревшее решение http://wiki.exim.org/ExiscanExamples#Replacing_foreign_Spamassassin_headers_with_local_ones
Добавить в ACL где-нибудь warn spam = exiscan: true set acl_m0 = ($ spam_bar) $ spam_score set acl_m1 = $ spam_report
Это установит переменные ACL соответствующим образом для следующей обработки в системном фильтре:
Добавить в системный фильтр:
if first_delivery then
# ...
headers remove X-Spam-Score:X-Spam-Report:X-Spam-Checker-Version:X-Spam-Status:X-Spam-Level
if $acl_m2 is not ""dd then
headers add "X-Spam-Score: $acl_m0"
headers add "X-Spam-Report: $acl_m1"
endif
endif
В cPanel системным фильтром является / etc / cpanel_exim_system_filter, а переменные acl_mX разные, поэтому давайте разберемся с ними. Добавьте это в конец cpanel_exim_filters
# work out our acl variables!
if first_delivery then
headers add "X-acl-m0: $acl_m0"
headers add "X-acl-m1: $acl_m1"
headers add "X-acl-m2: $acl_m2"
headers add "X-acl-m3: $acl_m3"
headers add "X-acl-m4: $acl_m4"
headers add "X-acl-m5: $acl_m5"
headers add "X-acl-m6: $acl_m6"
headers add "X-acl-m7: $acl_m7"
end
--- сделал это и получил: X-acl-m1: user1 X-acl-m2: 1 X-acl-m3: X-acl-m4: X-acl-m5: X-acl-m6: X-acl- m7:
Итак, я нахожу раздел exim.conf, который добавляет заголовки, и вижу все переменные $ spam. Интересно, перенесутся ли они? Давайте разберемся.
headers add "X-Test-Spam-Subject: ***SPAM*** $h_subject"
headers add "X-Test-Spam-Score:$spam_score"
headers add "X-Test-Spam-Score-Int: $spam_score_int"
headers add "X-Test-Spam-Bar: $spam_bar"
headers add "X-Test-Spam-Report: $spam_report"
Таким образом, $ spam_score_int переносится вместе с $ h_subject, но не spam_bar, что очень важно.
X-Test-Spam-Subject: ***SPAM*** test
X-Test-Spam-Status:
X-Test-Spam-Score: 33
X-Test-Spam-Bar:
X-Test-Spam-Report:
Но ... я понял, что заголовки проходят, что может сработать
headers add "X-Test-Spam-Bar: $h_X-Spam-Bar"
приводит к:
X-Test-Spam-Bar: +
+++
Таким образом, заголовки $ h содержат как полученные, так и добавленные заголовки.
Решение?
Добавьте пользовательские фильтры спама в exim.conf, а затем замените их в cpanel_exim_filter
log_message = "SpamAssassin as ${acl_m1} detected message as spam ($spam_score)"
add_header = X-989Spam-Subject: ***SPAM*** $h_subject
add_header = X-989Spam-Status: Yes, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report
add_header = X-989Spam-Flag: YES
add_header = X-989Spam-Status: No, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Ham-Report: $spam_report
add_header = X-989Spam-Flag: NO
log_message = "SpamAssassin as ${acl_m1} detected message as NOT spam ($spam_score)"
Хорошо, теперь сделаем это более настойчивым. Сначала скопируйте фильтр cpanel_exim_system:
cp /etc/cpanel_exim_system_filter /etc/custom_exim_system_filter
Войдите в WHM Main >> Service Configuration >> Exim Configuration Editor и нажмите Advanced Editor.
Прокрутите вниз и измените раздел заголовка спама, как показано ниже. Обратите внимание, что вы просто меняете заголовки X-Spam на заголовки X-989Spam (вы, конечно, можете использовать любое собственное имя, которое вам нравится, при условии, что ваши custom-exim-system-Filters совпадают. Поскольку файл конфигурации может изменяться со временем, сделайте убедитесь, что вы изменяете только строки add_header.
add_header = X-989Spam-Subject: ***SPAM*** $h_subject
add_header = X-989Spam-Status: Yes, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report
add_header = X-989Spam-Flag: YES
-- и --
add_header = X-989Spam-Status: No, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Ham-Report: $spam_report
add_header = X-989Spam-Flag: NO
Сохраните конфигурацию и дождитесь обновления WHM.
Вернитесь к Main >> Service Configuration >> Exim Configuration Editor >> Filters
Измените файл системного фильтра, чтобы он указывал на / etc / custom_exim_system_filter
Проверьте, есть ли SpamAssassins remove_header
или clear_headers
параметры файла конфигурации буду делать то, что ты хочешь.
Принятый ответ, возможно, был лучшим, что вы могли сделать в 2012 году, или с общедоступными версиями exim в 2012 году, но в настоящее время exim имеет remove_header
директива, которую можно использовать в списках ACL. Было добавлено с версией 4.82:
- Новый модификатор ACL "remove_header" может удалять заголовки до того, как сообщение будет обработано маршрутизаторами / транспортами.