Я недавно установил почтовую систему Cyrus IMAP на ClearOs 7 - она настроена сразу после установки, чтобы доставлять почту локально и получать почту для моих пользователей из других мест.
Поступает много спама от людей, называющих себя русскими. Похоже, что он определяется как таковой (префикс Subject начинается с [SPAM]
), но он по-прежнему отображается в почтовых ящиках пользователя.
Также в папку СПАМ попала ветчина.
Я хочу настроить систему, чтобы пользователи сообщали spamassassin о нераспознанном спаме и неправильно спамированном спаме. С этой целью я создал дополнительные папки в почтовых ящиках каждого пользователя для нежелательной почты и NotSpam. Пользователи перемещают любой спам, который они находят в своем почтовом ящике, в нежелательную, а обычную почту, которую они находят в своем спаме, - в NotSpam.
Теперь я хочу написать или найти сценарий, который будет искать в папке Junk, отправлять содержимое в sa-learn --spam
, затем переместите сообщения в обычную папку для спама. Также следует поискать в папке NotSpam, отправить содержимое на sa-learn --ham
, и переместите их во входящие.
Я пытался написать для этого сценарии оболочки, а также скачал и попытался следовать са-учись-сайрус, плюс просмотрел сценарий, который я нашел на wiki.apache.org/spamassassin/RemoteImapFolder.
Мой сценарий находит файлы электронной почты в порядке и отправляет их sa-learn
(хотя меня беспокоит, что рейтинг спама и изменение темы действительно следует поменять местами, прежде чем делать это, и я не знаю, как это сделать). Я застрял на перемещении сообщений в правильную папку, так как подозреваю, что простая команда Linux mv просто запутает cyrus, поскольку у него есть файлы кеша, заголовка, индекса и сквота в папке, которые, по-видимому, необходимо обновить.
Кажется, что sa-learn-cyrus может находить электронные письма нормально, но (насколько я могу судить по его запуску в режиме моделирования) он не пытается переместить письма в нужную папку, а просто очищает их.
Другой сценарий работает нормально (после внесения соответствующих изменений в мою настройку), но нежелательные электронные письма продолжают появляться в папке «Входящие».
Мне нужно ответить на следующие конкретные вопросы:
1) Почему письмо с [СПАМ] в теме все еще появляется во входящем ящике?
2) Есть ли существующий сценарий, который делает то, что я хочу?
3) Как правильно переместить электронное письмо из одной папки почтового ящика в другую в Cyrus? В идеале вызывается из сценария оболочки.
Я нашел ответы для потомков:
Cyrus имеет встроенную систему фильтрации, которая может перенаправлять почту в папки в соответствии с заданными вами правилами. Я обнаружил, что на своем старом сервере я установил некоторые правила, но совсем об этом забыл.
Правило, которое мне нужно (для пользователя nikki), было:
# cat spamrule
require
["fileinto","envelope","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"];
if header :contains "x-spam-flag" "YES" {
fileinto "user/nikki/SPAM";
stop;
}
И, войдя в систему как пользователь nikki, я могу добавить это правило в систему с помощью sieveshell следующим образом (nb: приглашение sieveshell >
):
sieveshell -u nikki localhost:2000
Please enter your password:
> put spamrule
> activate spamrule
> list
spamrule <- active script
> quit
Конечно, это предполагает, что вы можете открыть оболочку для каждого пользователя (я вошел в систему как root и использовал su -s /bin/bash - nikki
), и что вы знаете пароль каждого пользователя (что я знаю).
Для Cyrus sieve есть полезный веб-интерфейс, который называется SmartSieve с которым я пытаюсь работать, но в настоящее время борюсь. В идеале вы должны добавить его в webconfig сервера и позволить пользователям самостоятельно изменять свои сценарии.
Я использовал скрипт из Apache Spamassassin RemoteImapFolder, слегка изменено:
# $u is the user name
/usr/bin/fetchmail -a -s -n -u $u -p IMAP --folder 'INBOX/Junk E-mail' -m 'bash -c "/usr/bin/tee >(/usr/bin/sa-learn --spam --single \
> /dev/null)|/usr/bin/spamc|/usr/lib/cyrus-imapd/deliver -m SPAM '$u'"' localhost 2>/dev/null
/usr/bin/fetchmail -a -s -n -u $u -p IMAP --folder 'INBOX/NotSpam' -m 'bash -c "/usr/bin/tee >(/usr/bin/sa-learn --ham --single \
> /dev/null)|/usr/bin/spamassassin -d|/usr/lib/cyrus-imapd/deliver '$u'"' localhost 2>/dev/null
Я подошел к этой идее с другой точки зрения, и я думаю, что это лучше. Вся почта, которую SpamAssassin считает спамом, имеет X-Spam-Flag: YES
заголовок, а почта, которую он считает ветчиной, имеет X-Spam-Flag: NO
заголовок. Итак, если я просто скажу пользователям переместить любую ошибочно отправленную почту в нужную папку, я могу затем просмотреть ее на предмет заголовков, которые не соответствуют папке.
С этой целью я написал сценарий bash, который выполняет эту самую работу, и разместил его на GitHub по адресу cyrus-mark-ham-spam.