Настраиваем spamassassin для работы с MySQL

()

spamassassin является одним из самых популярных решений для борьбы со спамом. По умолчанию для хранения накапливаемых данных используются локальные файлы, однако для этой цели гораздо лучше использовать какой-нибудь SQL-сервер, что даёт огромное количество преимуществ.

Например если почтовый сервер обрабатывает большой поток писем то можно уменьшить нагрузку на него за счёт выноса SQL-сервера на отдельный физический сервер. Если в фирме используется несколько небольших почтовых серверов, то можно поставить общий для всех SQL-сервер. В этом случае качество фильтрации спама заметно вырастет.

Наконец многие почтовые клиенты для локальной фильтрации спама используют spamassassin и имеют кроме всего прочего кнопки «Спам» и «Не спам», позволяющие "обучать" spamassassin. Внутри компании можно подключить spamassassin на рабочих станциях пользователей к SQL-серверу корпоративного почтовика. В таком случае пользователи дополнительно будут обучать spamassassin и качество фильтрации поднимется на очень большую высоту:)

Допустим что у нас есть почтовый сервер подобный этому и мы хотим использовать для хранения данных spamassassin MySQL. В этой статье основной упор будет сделан на Debian/Ubuntu, однако инструкции для других дистрибутивов не должны сильно отличаться.

Для начала устанавливаем MySQL-севрер:

apt-get install mysql-server mysql-client libdbd-mysql-perl

Далее заходим в консоль mysql:

mysql -u root -p

И начинаем выполнять запросы. Создаём базу для хранения данных:

mysql> create database 'spamassassin';

Создаём пользователя spamassassin с паролем spmd4 и возможностью доступа с любого хоста:

mysql> grant usage on *.* to 'spamassassin'@'localhost' identified by 'spmd4';
mysql> grant usage on *.* to 'spamassassin'@'%' identified by 'spmd4';

Даём ему полные права на базу:

mysql> grant all privileges on 'spamassassin'.* to 'spamassassin'@'localhost';
mysql> grant all privileges on 'spamassassin'.* to 'spamassassin'@'%';

Далее переходим в каталог /usr/share/doc/spamassassin/sql и загружаем в базу шаблоны основных таблиц:

mysql -u spamassassin -p spamassassin < userpref_mysql.sql
mysql -u spamassassin -p spamassassin < bayes_mysql.sql
mysql -u spamassassin -p spamassassin < awl_mysql.sql

Затем создаём файл /etc/spamassassin/sql.cf следующего содержания:

user_scores_dsn DBI:mysql:spamassassin:localhost:3306
user_scores_sql_username spamassassin
user_scores_sql_password spmd4
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin:localhost:3306
user_awl_sql_username spamassassin
user_awl_sql_password spmd4
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost:3306
bayes_sql_username spamassassin
bayes_sql_password spmd4

Добавляем параметр -q к строке OPTIONS в файле /etc/default/spamassassin (эта опция указывает на использование sql). У автора этой статьи строка OPTIONS имеет вид:

OPTIONS="--create-prefs --max-children 5 --helper-home-dir=/var/spool/exim4 -u Debian-exim -x -q"

И, наконец, перезапускаем spamassassin:

/etc/init.d/spamassassin restart

Теперь переходим к рабочим станциям. Допустим что все они работают под Debian/Ubuntu и в качестве почтового клиента используется KMail.

На всех рабочих станциях нужно установить spamassassin и mysql-client командой:

apt-get install spamassassin mysql-client libdbd-mysql-perl

И разместить в домашних каталогах пользователей файл: ~/.spamassassin/user_prefs следующего содержания:

user_scores_dsn DBI:mysql:spamassassin:192.168.2.1:3306
user_scores_sql_username spamassassin
user_scores_sql_password spmd4
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:spamassassin:192.168.2.1:3306
user_awl_sql_username spamassassin
user_awl_sql_password spmd4
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:192.168.2.1:3306
bayes_sql_username spamassassin
bayes_sql_password spmd4

Здесь подразумевается что почтовый сервер имеет в локальной сети адрес 192.168.2.1. Если у вас он отличается - нужно соответствующим образом изменить этот файл.

Наконец запускаем KMail и выбираем в меню «Сервис» -> «Мастер антиспама» -> «SpamAssassin 3.x (perl)» и далее всё по умолчанию.

Всё! Теперь при нажатии кнопок «Фильтр Классифицировать как спам» и «Фильтр Классифицировать как не спам» утилита sa-learn будет вносить соответствующие изменения в базу spamassassin на почтовом сервере.

Эта статья не претендует на абсолютную истинность, хотя всё описанное было проделано автором лично. Приятной работы!

Ключевые слова: spamd, spamassassin, mysql, kmail.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2009-10-07 22:08:10 (#)

Уважаемый Автор, перед тем как писать эту статью сколько мануалов Вы прочли и каких (перечислите пожалуйста). У меня складывается впечатление, что вы даже spamd -h не видели...
Вы пишите:
"OPTIONS="--create-prefs --max-children 5 --helper-home-dir=/var/spool/exim4 -u Debian-exim -x -q""
и
"И разместить в домашних каталогах пользователей файл: ~/.spamassassin/user_prefs следующего содержания:"
Вопрос: зачем второе действие?
Функция флага -x:
-x, --nouser-config Disable user config files

M.W.

MooSE 2009-10-08 00:29:05 (#)

Уважаемый гость, вы внимательно читали статью?

Опции spamassassin указываются на сервер, а конфиги пишутся на клиенте (то есть в разных местах!)

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

Anonymous 2009-10-08 09:25:20 (#)

Извиняюсь за излишнюю критику. Увидел, осознал.

Поясните, пожалуйста, логику работы данной настройки.
Мне не совсем ясно для чего делать так, какая выгода от настройки единой базы если каждый подключается к ней сам, с один и темже пользователем дб и одной и тойже дб? Спам всем приходит разный, может стоит тогда сделать каждому по дб ? и чем не подходит в таком случае настройка по умолчанию?
П.С.
Вы уверены что на клиентах не надо устанавливать DBI::mysql?

M.W.

MooSE 2009-10-08 09:31:23 (#)

1. DBI::mysql есть в зависимостях spamassassin (по крайней мере у Debian based систем) и устанавливается автоматически.

2. Выгода вот какая: база используется как на сервере, так и на клиенте, и сервер отсекает плохие письма, помечает подозрительные и просто пропускает хорошие. А у клиента есть кнопки "спам" и "не спам", с помощью которых они могут обучать фильтр.

Поскольку все пользователи и сервер используют общую базу, то нажатие кнопок "спам"/"не спам" фактически приводит к обучению сервера. Ловишь мысль?

То есть при такой схеме пользователи помогают общему делу борьбы со спамом повышая качество фильтрации.

Anonymous 2009-10-08 20:38:09 (#)

cyclope:~# aptitude search DBI|grep my
p libclass-dbi-mysql-perl - extensions to Class::DBI for MySQL
cyclope:~# dpkg -l|grep spam
ii pyzor 1:0.4.0+cvs20030201-8 spam-catcher using a collaborative filtering network
ii razor 1:2.85-1 spam-catcher using a collaborative filtering network
ii sa-exim 4.2.1-11 Use spamAssassin at SMTP time with the Exim v4 MTA
ii spamassassin 3.2.5-2+lenny1 Perl-based spam filter using text analysis
ii spamc 3.2.5-2+lenny1 Client for SpamAssassin spam filtering daemon
ii squirrelmail-spam-buttons 2.2-1 SquirrelMail plugin: Place "Spam" buttons on the mailbox messa
cyclope:~# aptitude search mysql|grep perl
p libclass-dbi-mysql-perl - extensions to Class::DBI for MySQL
p libcrypt-mysql-perl - Perl module to emulate the MySQL PASSWORD(
p libdatetime-format-mysql-perl - Parse and format MySQL dates and times
p libdbd-mysql-perl - A Perl5 database interface to the MySQL da
p libtime-piece-mysql-perl - Time::Piece::MySQL - Adds MySQL-specific m
cyclope:~# dpkg -l|grep mysql
ii libmysqlclient15off 5.0.51a-24+lenny2 MySQL database client library
ii mysql-common 5.0.51a-24+lenny2 MySQL database common files
cyclope:~#
Ну тут я ручками доустановил с потгресом на ура пашет.
Берем систему без асасина

asterisk:~# aptitude install spamassassin
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Чтение информации о расширенных состояниях
Инициализация состояний пакетов... Готово
Чтение описаний задач... Готово
Следующие НОВЫЕ пакеты будут установлены:
libfont-afm-perl{a} libhtml-format-perl{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a}
libio-socket-inet6-perl{a} libmail-spf-perl{a} libnet-dns-perl{a} libnet-ip-perl{a} libnetaddr-ip-perl{a} libsocket6-perl{a}
libsys-syslog-perl{a} libwww-perl{a} re2c{a} spamassassin spamc{a}
0 пакетов обновлено, 16 установлено новых, 0 пакетов отмечено для удаления, и 7 пакетов не обновлено.
Необходимо получить 2748kB архивов. После распаковки 8507kB будет занято.
Хотите продолжить? [Y/n/?]
Соглашаемся. (очень много ненужной инфы все ставится без ошибок)
Теперь самое время проверить что у нас есть, чего нет:
asterisk:~# spamassassin --lint -D
И видим строчку:
[23343] dbg: diag: module not installed: DBI ('require' failed)

Ловишь мысль? (с)

M.W

MooSE 2009-10-08 23:23:12 (#)

Хм.... Странно. Я просто сначала настроил, а потом, спустя время, описал... Допускаю что упустил. Сейчас проверил - у меня стоит пакет libdbd-mysql-perl и всё работает.

Статью поправил.

А про идею обучения фильтра пользователями что скажешь?:)

Anonymous 2009-10-08 23:41:27 (#)

Идея здравая.
Я бы добавил на сервере в local.cf:
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
bayes_ignore_header X-Spam-Level
bayes_ignore_header X-Spam_score
bayes_ignore_header X-Spam_score_int
bayes_ignore_header X-Spam_bar
bayes_ignore_header X-Spam_report
bayes_ignore_header X-Spam-Checker-Version

Если письмо нужное пометилось как спам, то при нажатии "не спам" надо бы игнорировать эти заголовки.

M.W.

MooSE 2009-10-09 00:26:09 (#)

Не совсем понял: зачем игнорировать эти заголовки? Что нам это даст?

Anonymous 2009-10-13 15:17:55 (#)

Спамассасси анализирует заголовки письма, а если наше письмо пометилось как спам, то ему добавляются такие(зависит от настройки) заголовки, так вот если мы говорим спам ассассину что письмо - не спам, то следует игнорировать эти заголовки(их ошибочно добавили получается). Понятен ход мысли?

M.W.

MooSE 2009-10-14 11:42:36 (#)

при обучении он и вроде итак игнорирует. разве нет?

Anonymous 2011-01-11 18:45:08 (#)

Спасибо! Одна из лучших статей про SpamAssassin!
></////*>
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности

http://chickencoopplansmanual.com/