Настройка и базовая установка DSPAM и Web-интерфейса WebUI в FreeBSD [2010]
Во время моего первого знакомства с этим фильтром я столкнулся с проблемой, когда DSPAM периодически «отваливался». Причем проблема возникала спонтанно — вне зависимости от нагрузки, времени работы и любых других факторов.
Статья размещена с согласия его автора. Оригинал, т.е. материал в его авторском виде, доступен на woland.pl.ua.
В этой статье рассмотрены установка и настройка спам-фильтра DSPAM в среде операционной системы FreeBSD. С некоторыми подробностями о том, как DSPAM фильтрует спам в письмах, можно ознакомиться в статье «Краткий обзор спам-фильтра DSPAM».
Сперва я сделаю пару оговорок:
Во время моего первого знакомства с этим фильтром я столкнулся с проблемой, когда DSPAM периодически «отваливался». Причем проблема возникала спонтанно — вне зависимости от нагрузки, времени работы и любых других факторов. В итоге, после чтения форумов и списков рассылки выяснилось, что проблема присутствует не только у меня одного. Общей сходной чертой у всех была включенная поддержка ClamAV в DSPAM. И проблема исчезла после того, как обязанность передачи писем ClamAV'у была снята с DSPAM'а и возложена на Postfix. Хотя в текущей версии (3.6.8) проблема устранена, я уже привык не использовать поддержку ClamAV и передавать сообщения для проверки в ClamAV непосредственно из Postfix.
DSPAM по умолчанию собирается с опцией запуска от пользователя root и группы mail. Я считаю, что гораздо лучше будет выделить под это отдельного пользователя.
Итак, приступим. Для начала добавим опции сборки в /etc/make.conf, чтобы собранный DSPAM запускался от имени отдельного пользователя:
DSPAM_OWNER=dspam
DSPAM_GROUP=dspam
DSPAM_HOME_OWNER=dspam
DSPAM_HOME_GROUP=dspam
Впоследствии при сборке порта мы столкнемся с тем, что пользователь и группа автоматически не создаются. Поэтому создадим их сейчас вручную:
Фильтр практически готов к работе. Нам остается только решить, каким образом мы будем хранить токены. DSPAM позволяет хранить отдельную базу токенов для каждого пользователя. Таким образом, у каждого будет свой набор токенов и фильтр будет индивидуально для каждого проверять письмо на его принадлежность к категории «спам». В моем случае этот подход не прижился. Дело в том, что для случая со 100 пользователями справедливо, что если хотя бы десяток из них занимается обучением фильтра — уже хорошо. Остальные 90 не утруждают себя этой задачей и, как следствие, в итоге имеют достаточное количество неверных классификаций. Выходом из этой ситуации для меня стало использование «разделяемой» группы (shared). При внесении пользователей в shared токены становятся общими для этой группы. Таким образом, если из 100 пользователей 10 будут периодически указывать фильтру на ошибки в классификации, то база токенов будет поддерживаться в актуальном виде для всех. Да и размер самой базы станет заметно меньше. Для занесения пользователей в группу shared нужно отредактировать файл /var/db/dspam/group (если его нет — создайте и не забудьте про владельца: chown dspam:dspam):
globalgroup:shared:*
Всё. DSPAM готов к работе. Можно запускать:
# /usr/local/etc/rc.d/dspam start
Установка и настройка веб-интерфейса DSPAM WebUI
DSPAM WebUI — это Web-интерфейс, который позволяет пользователю просмотреть статистику по своему почтовому ящику, изменить некоторые настройки (которые администратор разрешил изменять пользователям), просмотреть список принятых сообщений, результаты классификации этих сообщений фильтром, а также произвести «переобучение» фильтра в случае неверной классификации сообщения.
Перейдем к настройке DSPAM WebUI. Для начала создадим дерево каталогов для виртуального хоста с DSPAM WebUI и зададим права:
# mkdir /home/dspam
# mkdir /home/dspam/dspam.example.com
# chmod -R 755 /home/dspam
В директории /usr/local/www/vhosts/dspam находятся непосредственно скрипты WebUI. Скопируем их в директорию, где будет размещаться наш VirtualHost и зададим владельца:
Затем, в созданной нами директории для конфигурационных файлов виртуальных хостов (/usr/local/etc/apache/vhosts) создаем vhost-файл для DSPAM WebUI:
touch /usr/local/etc/apache/vhosts/dspam.conf
Сконфигурируем его:
<Virtualhost>
ServerName dspam.example.com
ServerAdmin admin@example.com
DocumentRoot "/home/dspam/dspam.example.com"
# Разрешаем исполнение CGI,
# запрещаем изменение параметров htacess'ом
# и включаем аутентификацию через MySQL
<Directory "/home/dspam/dspam.example.com">
Options ExecCGI
AllowOverride None
AuthName "DSPAM WebUI"
AuthType Basic
AuthMySQLEnable On
AuthMySQLHost localhost
AuthMySQLUser postfix
AuthMySQLPassword postfix
AuthMySQLDB postfix
AuthMySQLUserTable mailbox
AuthMySQlNameField username
AuthMySQLPasswordField password
AuthMySQLPwEncryption crypt
require valid-user
</Directory>
# Запрещаем пользователям доступ к служебным файлам
<Files admins>
Order allow,deny
Deny from all
</Files>
<Files configure.pl>
Order allow,deny
Deny from all
</Files>
<Files default.prefs>
Order allow,deny
Deny from all
</Files>
# Задаем индексный файл
DirectoryIndex dspam.cgi
# Поскольку мы не предусматриваем на этом
# виртуальном хосте исполнение PHP-скриптов,
# на всякий случай отключим их исполнение
AddType text/plain .php
# Задаем пользователя, от которого
# будут работать CGI-скрипты
User dspam
Group dspam
# Логирование
ErrorLog /var/log/httpd/dspam-error.log
TransferLog /var/log/httpd/dspam-access.log
</Virtualhost>
Перезапускаем apache:
# apachectl restart
Теперь можно зайти браузером по адресу http://dspam.example.com/, используя в качестве логина test@example.com и пароль от этого ящика. Так вы увидите информацию по ящику test@example.com. Кроме того, если добавить test@example.com в /home/dspam/dspam.example.com/admins, пользователь test@example.com будет обладать правами администратора (в Web-интерфейсе станет доступной информация по любому почтовому ящику).