Совместимость со Spamassassin и Dovecot mdbox

Итак, я подумываю использовать формат Dovecot mdbox для хранения почты, однако я также буду использовать Spamassassin, и мне нужно будет передать ему папку с электронными письмами для применения его фильтров to.

Можно ли это сделать напрямую из формата mdbox? Если нет, могу ли я извлечь часть или все содержимое почтового ящика mdbox удобным для Spamassassin способом? Если так, Можно ли направить его в spamassassin (вместо извлечения в папку)?

0
задан 23 January 2016 в 11:09
1 ответ

Мое решение этой проблемы состояло в том, чтобы настроить встроенную функцию Dovecot для защиты от спама и почтового транспорта для передачи сообщений в сценарий как спама / радиолюбителей, когда они передаются в / из моих ящиков нежелательной почты соответственно, чтобы они могли быть научился с помощью cron-job. Хотя можно передавать сообщения в sa-learn напрямую, это может означать изучение случайных ошибок при регистрации, плюс это намного медленнее, чем просто выгрузить файл на потом. Это также, вероятно, будет работать только при использовании глобальной байесовской базы данных spamassassin, т. Е. Если ваши пользователи электронной почты являются виртуальными, а не добавлены в качестве учетных записей пользователей unix.

Прежде всего, вы захотите создать сценарий обучения электронной почты , Я создал свой по адресу /etc/dovecot/dovecot-mailtran.sh для удобства, с соответствующими разрешениями, чтобы dovecot мог его выполнить:

#!/bin/bash
root_dir='/var/lib/mailtrain'

# Determine which are the right and wrong directories
[ "$1" = 'ham' ] && { add='ham'; remove='spam'; } || { add='spam'; remove='ham'; }

# Generate a unique ID for the message while saving to tmp
trap '[ -e "$root_dir/tmp/$$" ] && rm -f "$root_dir/tmp/$$" 2>/dev/null' INT HUP TERM EXIT
sha=$(cat | tee "$root_dir/tmp/$$" | shasum -a 256 | awk '{print $1}')

# Remove file if it already exists in the wrong folder
[ -e "$root_dir/$remove/$sha" ] && rm "$root_dir/$remove/$sha"

# Move tmp file into correct folder
mv "$root_dir/tmp/$$" "$root_dir/$add/$sha"
exit 0

Примечание: Я генерирую уникальные имена файлов, используя shasums , потому что я обнаружил, что не могу полагаться на сообщения, которым на данный момент был присвоен уникальный идентификатор сообщения.

Вам нужно будет создать ] / var / lib / mailtrain и сделайте его доступным для dovecot, затем создайте три подкаталога для spam , ham и tmp , которые dovecot можно писать в.

Далее нужно настроить dovecot. Для этого я решил создать новый файл в /etc/dovecot/conf.d/90-antispam.conf следующим образом:

### Dovecot Anti-Spam ###
# Automatically sends spam to sa-learn to parse as --spam or --ham
# if they are moved to or from the Spam mailbox respectively

plugin {
    antispam_backend = pipe
    antispam_pipe_program = /etc/dovecot/dovecot-mailtrain.sh
    antispam_pipe_program_spam_arg = spam
    antispam_pipe_program_notspam_arg = ham
    antispam_pipe_tmpdir = /tmp

    # Mailboxes to respond to
    antispam_spam = Spam;Junk
    antispam_trash = Deleted Messages;Trash
    #antispam_unsure = Virus
}

К сожалению, это работает только с именем почтового ящика, поэтому, если Пользователь создает почтовый ящик с именем, которое выше не распознается как спам или корзина, тогда он может быть неправильно обработан, даже если он предназначен для использования в качестве спама / корзины.

После перезагрузки службы dovecot сообщения, перемещенные в папку для спама, теперь будут отображаться в папке / var / lib / mailtrain / spam , а сообщения, перемещенные из папки спама, появятся в папке / var / lib / mailtrain / ham , сценарий гарантирует, что сообщения не появятся в обеих папках. Поэтому последним шагом является создание сценария для фактического импорта этих сообщений как спама / радиолюбителей:

#!/bin/bash
root_dir='/var/lib/mailtrain'

sa-learn --no-sync --spam "$root_dir/spam" && find "$root_dir/spam" -mindepth 1 -delete
sa-learn --no-sync --ham "$root_dir/ham" && find "$root_dir/ham" -mindepth 1 -delete
sa-learn --sync

Это очищает каждую папку после того, как ее содержимое было импортировано, а затем запускает одну операцию синхронизации после того, как оба импортированы, а не синхронизируются дважды. Сохраните этот сценарий в удобном месте для выполнения в качестве задания cron, а затем запланируйте его с помощью crontab -e . Вы можете сделать это от имени пользователя root, но в идеале задание cron должно быть передано другому пользователю, но он должен будет иметь доступ как к / var / lib / mailtrain (и доступ на запись к его подкаталогам), так и как член группы spamd или debian-spamd (в зависимости от владельцев группы / var / lib / spamassassin . Я сделал это, добавив dovecot в группа spamd с помощью usermod -a -G spamd dovecot , а затем задание cron через cronjob -u dovecot -e .

При этой настройке spamassassin будет автоматически обучаться спам / хам в зависимости от того, что с ним делают пользователи, однако, если он не был обучен до этого, вам все равно нужно будет отправить ему несколько начальных сообщений для изучения. К счастью, теперь это можно легко сделать с помощью любого почтового клиента, подходящего для почты; импортируйте связку любительских сообщений во временный почтовый ящик, переместите их в почтовый ящик для спама, затем переместите обратно из него. Затем возьмите кучу спама, импортируйте в почтовый ящик почтовый ящик, и переместите их в почтовый ящик спама. Теперь у вас должна быть куча сообщений в папках / var / lib / mailtrain / spam и / var / lib / mailtrain / ham , как только sa-learn импортированные по крайней мере двести экземпляров spamassassin будут готовы начать добавлять заголовки спама в ваши сообщения.

0
ответ дан 5 December 2019 в 10:49

Теги

Похожие вопросы