Вы можете использовать SpamAssassin, чтобы оштрафовать почту, полученную в течение определенных часов, но это грязно.
Перед тем, как мы начнем, убедитесь, что основные защиты SA правильно настроены:
Если этого недостаточно, вы можете решить проблему, над которой вы работаете. Попробуйте:
- Плагин RelayCountry , чтобы наказывать страны, с которыми вы никогда не общаетесь, с помощью
- Плагин TextCat , чтобы различать языки, с которыми вы никогда не общаетесь в
Если все, что не поможет, тогда (и только тогда) вы можете рассмотреть то, что вы предложили. Читайте дальше.
Не забывайте о часовых поясах. По этой причине вы не можете использовать заголовок Date
. Этот тип правил небезопасен для развертываний, в которых разговоры охватывают слишком много часовых поясов , и вы должны убедиться, что все серверы записи MX согласованы и находятся в одном часовом поясе. Имейте в виду, что летнее время (так называемое «летнее время») может раздражать здесь.
Определите реле, которое добавляет ваша принимающая инфраструктура, но добавляется до запуска SpamAssassin ( так что SA может это увидеть). Это будет выглядеть как заголовок Received
в верхней части вашего письма. Опять же, убедитесь, что он действительно виден SpamAssassin; заголовок Received
, добавленный вашим сервером IMAP, не будет виден.
Возможно, у вас настроен SpamAssassin для запуска до того, как будет помечено любое внутреннее реле в сообщении. Если дело обстоит именно так, не продолжайте, поскольку вы не можете надежно определить местное время .
Хорошо, все оговорки в стороне, вот пример Полученный заголовок:
Received: from external-host.example.com
(external-host.example.com [198.51.100.25])
by mx.mydomain with ESMTPS id ABC123DEF456;
Fri, 13 Mar 2020 12:34:56 -0400 (EDT)
Это должен быть заголовок из , добавляемый вашей системой , иначе он может иметь другой часовой пояс, перекос часов или даже поддельную метку времени.
Соответствие что в правиле, которое четко обозначает вас как автора (условно, начните его с ваших инициалов):
header CL_RCVD_WEE_HOURS Received =~ /\sby\smx\.mydomain\swith\s[^:]{9,64}+:(?<=[0 ][2-4]:)[0-9:]{5}\s-0[45]00\s/
describe CL_RCVD_WEE_HOURS Received by our mx.mydomain relay between 2a and 5a EST/EDT
score CL_RCVD_WEE_HOURS 0.500
Прогулка по этому регулярному выражению (см. также интерактивное объяснение в Regex101 ):
- Сначала вам нужно убедиться, что это ваше реле, соответствующее имени:
by mx.mydomain with
- Затем пропустите 9-64 без символы двоеточия (быстро, без возврата, поэтому знак
+
). Вам нужно убедиться, что на вашем сервере нет двоеточий. - Настоящее мясо находится в поиске (так как мы пропустили более часа в целях скорости), которое ищет ведущий ноль (или еще пробел), а затем 2, 3 или 4 (а не 5, поскольку мы не хотим сопоставлять время, например 05:59:59)
- Наконец, есть проверка работоспособности, чтобы убедиться, что мы глядя на правильный часовой пояс. Я предположил, что вы находитесь в США на восточном побережье, что составляет -0400 или -0500 в зависимости от того, действует ли переход на летнее время
Так что вам нужно изменить имя сервера, проверьте, трюк с двоеточием работает с вашим реле и, возможно, настраивает регулярное выражение часового пояса.
Я также дал этому более низкий балл, чем вы хотели. Начните с низкого уровня и медленно поднимайте его по мере необходимости. 3.000 - действительно высокое значение.