rspamd Белый/черный список для каждого домена перед фильтрацией

rspamd Белый/черный список для каждого домена перед фильтрацией

Поскольку, к сожалению, я не получаю никаких ответов на форуме обсуждений rspamd на GitHub, возможно, у кого-то здесь есть опыт работы с режимом предварительной фильтрации rspamd.

Я пытаюсь заставить rspamd принимать любую почту, пришедшую с заданного списка доменов, независимо от того, насколько сильно он считает ее спамом. К сожалению, это необходимо, поскольку слишком много людей считают хорошей идеей манипулировать отправителями или делать другие теневые вещи, обычно используемые людьми, которым есть что скрывать. Это должно быть проще всего сделать с помощью режима предварительной фильтрации, поскольку они должны запускаться даже до оценки того, является ли письмо спамом или нет. В качестве дополнительного бонуса это также можно использовать для списка блокировки, если некоторые печально известные спам-письма просто не распознаются. Конечно, rspamd можно научить, что должно быть спамом, а что нет, но это, похоже, недостаточно эффективно. Кроме того, в журналах я не могу понять, почему он отказывается применять предварительные фильтры для большинства доменов, так что, возможно, у кого-то из вас есть предложение.

Сейчас я использую конфигурацию multimap для настройки предварительных фильтров для списка разрешенных и заблокированных. Поэтому в local.d/multimap.conf у меня есть:

ACCEPTLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/acceptlist.sender.domain.map";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      score = 10.0;
      action = "add_header"; # Prefilter mode
  }

Два комментария вверху каждого блока относятся к тому моменту, когда я пытался фильтровать по заголовку, а затем по заголовку from, но поскольку вы можете фильтровать по нему напрямую, я попробовал этот, но это не помогло. Кроме того, я пробовал добавлять файлы в map как с помощью пути, так и file:///path/to/file, все равно безуспешно в любом случае. rspamd.log также не показывает ничего полезного (единственная постоянно появляющаяся ошибка — это невозможность загрузить ключ dkim, так как я не могу отключить этот модуль). Копирование этой конфигурации в overwrite.d также не помогает. Есть идеи?

Я работаю на Debian 11 и запускаю rspamd 3.4-1~bullseye прямо из репозитория rspamd.

решение1

Мой последний ответ действительно немного помог, но в целом я обнаружил, что некоторые проблемы все еще не решены:

по какой-то причине он все еще добавляет ACCEPTLIST_SENDER_DOMAINдля домена, который я удалил некоторое время назад из файла карты. Я даже перезапускал rspamd несколько раз, но он отказывается забывать об этом домене. И я не могу найти кэш, который я мог бы удалить, чтобы это помогло.

В дополнение к этому, multimap должен принимать почту, пришедшую с указанных доменов, несмотря ни на что. Но только когда домен есть в заголовке From:, и ни в каком другом случае. Домен, который я ранее ошибочно добавил в белый список, был доменом нашего списка рассылки. Поэтому rspamd никогда не должен был принимать эти письма изначально на основе multimap, поскольку ни один наш список рассылки не заменит заголовок From:своим собственным адресом. Но все равно многие спам-письма по-прежнему помечаются как спам, даже если теоретически они должны быть исключены с помощью false ACCEPTLIST_SENDER_DOMAIN. На данный момент я снова добавил prefilter=true; в конфигурацию multimap, возможно, это поможет. Но в целом rspamd все еще ведет себя не так, как ожидалось.

ПРАВКА: чтобы решить первую проблему, я переключился обратно на явную проверку From:заголовка, так как type:from проверит конверт from перед проверкой этого, так что это должно быть намного надежнее (конечно, довольно просто изменить заголовок From, но я могу пересчитать по пальцам одной руки инциденты, которые произошли за последние годы и которые не были обнаружены нашим основным спам-фильтром):

ACCEPTLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

Но по какой-то причине при появлении этих символов в заголовках писем появляется следующее:

X-Rspamd-Pre-Result: action=no action;
    module=multimap;
    Matched map: ACCEPTLIST_SENDER_DOMAIN

Действие в этом случае однозначно должно быть "принять", как указано в конфигурации. Вот как это выглядит в дампе конфигурации:

multimap {
    ACCEPTLIST_SENDER_DOMAIN {
        action = "accept";
        map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
        description = "Sender domain is on allowed";
        symbol = "ACCEPTLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    BLOCKLIST_SENDER_DOMAIN {
        action = "add_header";
        map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
        description = "Sender domain is on blocked";
        symbol = "BLOCKLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    [...]
}

решение2

Я не думаю, что следует заключать значение предварительного фильтра в кавычки:

prefilter = true;

Кроме того, настройка оценки в карте предварительной фильтрации может оказаться бесполезной, поскольку действие уже выполнено.

Я надеюсь, что это помогает !

решение3

Это должно работать. Мне удалось реализовать именно то, что вы хотите. Мой local.d/multimap.conf содержит:

Для приема писем с определенных доменов

WHITELIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/whitelist.sender.domain.map";
      symbol ="WHITELIST_SENDER_DOMAIN";
      description = "WHITELIST map for SENDERS Domain - Action accept";
      action = "accept";
  }
# For rejecting domains
BLACKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/blacklist.sender.domain.map";
      symbol ="BLACKLISTED_DOMAIN";
      description = "Blacklist map for Senders Domain - Action reject";
      action = "reject";
  } 

Вам необходимо создать указанные файлы карт в local.d с точно таким же именем и заполнить их доменными именами, которые вы хотите фильтровать. Только одно доменное имя на строку! Файлы должны иметь разрешение на чтение.

Также обратите внимание, что если для сообщения установлено действие, большинство дальнейших проверок следует пропустить.

решение4

@cz.steve Я теперь все переделал для использования rspamd, так как SpamAssassin тоже не работал так, как я хотел. Теперь изменения включают белые и черные списки, хотя и не совсем так, как я предполагал. Я хотел, чтобы он сопоставлял заданные домены только с тем, что в заголовке From:, а не со всеми другими заголовками тоже. Возможно ли этого добиться?

На данный момент моя конфигурация такова:

ACCEPTLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

Связанный контент