Данная статья является небольшим введением в технологию борьбы со спамом средствами пакета Gnus. Данная статья основывается на возможностях пакета, которые появились начиная с ветки Oort Gnus, существуют в текущей стабильной версии 5.10.x и сейчас развивается в версии NoGnus.
Для правильного понимания того, как производить настройку и работать с Gnus, необходимо уточнить некоторые понятия:
nil
, если продолжать обработку дальше;Настройка анти-спама производится в несколько этапов, для выполнения которых необходимо в
файл ~/.gnus
добавить несколько команд:
(setq spam-install-hooks t) ;; заставим установить все нужные хуки (setq spam-use-stat t) ;; мы будем использовать статистический метод
(require 'spam-stat) ;; для использования spam-stat (require 'spam)
(setq nnmail-split-methods 'nnmail-split-fancy) (setq nnmail-split-fancy '(| ;; перехватываем спам (: spam-split) ;; все остальное кладем в папку inbox "inbox"))
Аналогичным образом может быть настроена и функция разбиения для метода доступа nnimap.
spam
, значение которой пользователь может переопределить.Схема обработки почты Gnus'ом показана на рисунке:
Здесь можно выделить несколько этапов:
M-d
);Gnus поддерживает разные методы и программы для определения писем со спамом. Вот список поддерживаемых методов:
Hashcash
, а не почтовые адреса. Кроме этого, черные списки могут
получаться из внешних источников;Настройка обработчиков писем со спамом и нормальных писем (как и прочих параметров
обработки спама) производится с помощью параметров из группы spam (используйте команду M-x
customize-group
spam
). В этой группе настройки пользователь может вручную указать какой
метод обработки использовать, куда складывать письма со спамом, а также другие параметры.
Настройку обработки спама можно разделить на две большие группы — использование возможностей пакета spam и использование комбинации стандартных возможностей Gnus.
Как уже упоминалось выше, настройка конкретных методов обработки спама производится установкой переменной, соответствующей нужному методу. Ниже перечислены имена соответствующих переменных, а также приведены дополнительные настройки для конкретных методов.
При использовании метода spam-stat настройка может выглядеть так:
;; устанавливаем параметры, метод обработки и загружаем модули (setq spam-install-hooks t) (setq spam-use-stat t) (require 'spam-stat) (require 'spam) ;; загружаем файл со статистикой по словам (when (file-exists-p spam-stat-file) (spam-stat-load)) ;; задаем имя группы для спама (setq spam-stat-split-fancy-spam-group "spam") ;; А эта функция нужна в основном для первоначального обучения ;; байесовского фильтра. (defun my-spam-stat-learn () "Learn about my spam and non-spam" (interactive) (let ((starting (current-time-string))) ;; обрабатываем спам (spam-stat-process-spam-directory "~/Mail/spam") ;; обрабатываем нормальные письма из разных каталогов (let ((ham-groups '("inbox" "Gnus-ding" "Emacs"))) (mapc (lambda (x) (spam-stat-process-non-spam-directory (format "~/Mail/%s" x))) ham-groups)) (spam-stat-reduce-size) (spam-stat-save) (message "my-spam-stat-learn: started at %s, ended at %s" starting (current-time-string))))
Часто у пользователя уже есть письма со спамом. Для обучения по ним, и предназначена
функция my-spam-stat-learn
, которую можно вызвать интерактивно. Предполагается, что спам
хранится в каталоге ~/Mail/spam
, а нормальные письма берутся из каталогов ~/Mail/inbox
,
~/Mail/Gnus-ding
и ~/Mail/Emacs
(вы можете подставить пути к своим каталогам, или удалить
лишние записи в списке ("inbox" "Gnus-ding" "Emacs"))
. Функцию my-spam-stat-learn
достаточно запустить один раз, при этом сформируется база с весами слов, и затем она будет
дополняться по результатам ручной обработки почты — через соответствующие обработчики при
выходе из группы.
Для использования черных или белых списков надо присвоить истинное значение одной из переменных:
spam-use-blacklist
— для использования черных списков, когда письма от отправителя,
чей адрес находится в черном списке, будут считаться спамом и отправляться в
соответствующую группу;spam-use-whitelist
— для использования белых списков. В этом случае, письма от
пользователей, адресов от которых нет в указанном списке, передаются следующему
обработчику спама;spam-use-whitelist-exclusive
— для неявного использования белых списков. При
использовании данного метода, письма от отправителей не перечисленных в белом списке,
будут рассматриваться как спам. Осторожно используйте данный метод.Вы можете явно задать значения в файлах с белыми и черными списками, отредактировав файлы,
на которые ссылаются переменные spam-whitelist
и spam-blacklist
.
Данный метод аналогичен по работе использованию белых списков, но белые списки при этом
берутся из базы BBDB. Аналогично обычным белым спискам, для настройки используются две
переменных: spam-use-BBDB
и spam-use-BBDB-exclusive
, которые заставляют Gnus работать
также, как и при использовании spam-use-whitelist
и spam-use-whitelist-exclusive
.
Gnus может проверять адреса в письмах относительно внешних, распределенных систем обработки спама. Для включения данного метода, вам необходимо присвоить истинное значение переменной spam-use-blackholes, например так:
(setq spam-use-blackholes t)
Кроме этого, пользователь может указать список серверов, относительно которых будет
производиться проверка (с помощью переменной spam-blackhole-servers
)2.
Данный метод позволяет пользователю использовать регулярные выражения для проверки заголовков писем. Пользователь может использовать регулярные выражения как для определения писем со спамом, так и для определения нормальных писем.
Для использования данного метода нужно установить в истинное значение переменную
spam-use-regex-headers
. Переменные spam-regex-headers-spam
и spam-regex-headers-ham
должны содержать в себе списки регулярных выражений для спама и обычной почты3.
Для данной программы возможно использование двух взаимоисключающих вариантов
подключения. Первый вариант, который управляется переменной spam-use-bogofilter
, запускает
bogofilter для обрабатываемого письма и использует накопленную базу статистики. Второй
метод, который включается переменной spam-use-bogofilter-headers
, при фильтрации
использует уже установленный заголовок X-Bogosity
(например, он может быть установлен во
время обработки письма с помощью procmail). Для использования одного из методов,
необходимо установить соответствующую переменную в истинное значение.
Кроме основных переменных, включающих данный метод, пользователь имеет возможно задать
расположение баз bogofilter. Оно задается с помощью переменной
spam-bogofilter-database-directory
.
Использование ifile выполняется путем присвоения истинного значения переменной
spam-use-ifile
. Кроме того, как и в случае с bogofilter, с помощью переменной
spam-ifile-database-path
пользователь может задать путь к базам ifile.
Аналогично другим методам, использующим внешние программы, настройка SpamOracle
производится установкой переменной с именем spam-use-spamoracle
. Пользователь также может
задать путь к базе SpamOracle с помощью переменной spam-spamoracle-database
.
Кроме перечисленных методов Gnus позволяет пользователю достаточно просто добавить свои обработчики спама. Для того, чтобы узнать как это делать, прочитайте раздел "Extending the Spam ELisp package" в руководстве Gnus.
Кроме использования пакета spam, можно фильтровать спам и с помощью других средств. Например, так выполняется фильтрация спама при помощи SpamAssassin.
Данный метод напрямую не использует пакет spam, а использует стандартные возможности Gnus, такие как выполнение команд при заборе почты, и стандартные средства разбиения почты по заголовкам.
Сначала необходимо внести изменения в настройку источников почты. Нужно добавить
обработчики :prescript
и :postscript
, используя команды, аналогичные приведенным в
примере:
(setq mail-sources '((file :prescript "formail -bs spamassassin < /var/mail/%u") (pop :user "testuser" :server "myhost" :postscript "mv %t /tmp/testuserfile; formail -bs spamc < /tmp/testuserfile > %t")))
Это приведет к тому, что у пользователя окажется почта, в которой вставлены дополнительные заголовки SpamAssassin.
Затем пользователь может использовать стандартные средства разбиения почты, проверяя
наличие заголовка X-Spam-Flag
, как это показано в примере:
(setq nnmail-split-methods '(("spam" "^X-Spam-Flag: YES") ...))
1. По собственному опыту могу заметить, что этот метод очень эффективно отлавливает спам. За неделю сквозь фильтр проходит 1-2 писем со спамом, при общем потоке спама в 100-200 писем в неделю (того, который не ловится внешним SpamAssassin).
2. Для данного метода не предусмотрено обработчиков спама и нормальной почты.
3. Для данного метода не предусмотрено обработчиков спама и нормальной почты.
Last change: 05.03.2013 16:54