DSPAM. Установка и настройка.
Аренда сервера
VPS, VDS, Windows VPS - от $10
VPS
В этой части мы рассмотрим установку и настройку DSPAM, но сначала я сделаю пару оговорок.
Первая. Во время моего первого знакомства с этим фильтром я столкнулся с проблемой, когда DSPAM периодически отваливался. При чем проблема возникала спонтанно вне зависимости от нагрузки, времени работы или любых других факторов. В итоге после чтения форумов и списков рассылки выяснилось, что проблема присутствует не только у меня одного. Общей сходной чертой у всех было включенная поддержка ClamAV в DSPAM. Проблема исчезла после того, как обязанность передачи писем Clam’у была снята с DSPAM’а и возложена на postfix. И хотя, в текущей версии (3.6.8) проблема устранена, но я уже привык не использовать поддержку ClamAV и передавать сообщения для проверки Clam’у непосредственно из postfix’а.
Вторая. DSPAM по умолчанию собирается с опцией запуска от пользователя root и группы mail. Я считаю, что гораздо лучше будет выделить под это отдельного пользователя.
Итак, приступим к установке DSPAM.
Для начала добавим опции сборки в /etc/make.conf, чтобы собранный DSPAM запускался от имени отдельного пользователя:
DSPAM_GROUP=dspam
DSPAM_HOME_OWNER=dspam
DSPAM_HOME_GROUP=dspam
В последствии при сборке порта мы столкнемся с тем, что пользователь и группа автоматически не создаются. Поэтому создадим их сейчас руками:
# pw useradd dspam -g dspam -s "/sbin/nologin" -c "DSPAM"
Теперь можно переходить к установке порта.
# make config
Отмечаем поддержку нужных нам опций:
[X] DEBUG Enable debugging logging
[X] DAEMON Daemonize dspam; speaks LMTP or DLMTP
[X] MYSQL51 Use MySQL 5.1.x as back-end
[X] VIRT_USERS Enable virtual users (needs SQL back-end)
[X] CGI Install CGI (pulls in Apache or see below)
Собираем и устанавливаем порт:
После сборки порта отредактируем /etc/rc.conf и добавим туда:
Создадим директорию в /var/run, где будут лежать dspam.pid и dspam.sock:
# chown dspam:dspam /var/run/dspam
Создадим базу данных, в которой DSPAM будет хранить токены и прочую информацию:
mysql> create database dspam;
mysql> grant all on dspam.* to ‘dspam’@'localhost’ identified by ‘dspam’;
mysql> flush privileges;
mysql> quit
Заполняем базу таблицами из .sql файлов, прилагающихся к DSPAM’у:
# mysql dspam < /usr/local/share/examples/dspam/mysql/virtual_users.sql
Переходим к настройке DSPAM. Отредактируем /usr/local/etc/dspam.conf:
ServerMode auto
Home /var/db/dspam
StorageDriver /usr/local/lib/libmysql_drv.so
ServerDomainSocketPath "/var/run/dspam/dspam.sock"
ServerPID /var/run/dspam/dspam.pid
ServerParameters "--deliver=innocent, spam"
ServerIdent "localhost.localdomain"
Notifications off
PurgeSignatures 14 # Stale signatures
PurgeNeutral 90 # Tokens with neutralish probabilities
PurgeUnused 90 # Unused tokens
PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes)
PurgeHits1S 15 # Tokens with only 1 spam hit
PurgeHits1I 15 # Tokens with only 1 innocent hit
LocalMX 127.0.0.1
SystemLog on
UserLog on
Opt out
ParseToHeaders on
ChangeModeOnParse on
ChangeUserOnParse off
MaxMessageSize 307200
Trust dspam
TrainingMode teft
TestConditionalTraining on
Feature chained
Feature whitelist
Algorithm graham burton
PValue graham
ProcessorBias on
# Пользовательские настройки по умолчанию
Preference "signatureLocation=headers" # 'message' or 'headers'
Preference "showFactors=on"
Preference "spamAction=tag"
Preference "spamSubject=***SPAM***"
# Разрешаем пользователям изменять определенные настройки
AllowOverride trainingMode
AllowOverride spamAction spamSubject
AllowOverride statisticalSedation
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride signatureLocation
AllowOverride showFactors
AllowOverride optIn optOut
AllowOverride whitelistThreshold
# Параметры доступа к БД
MySQLServer localhost
MySQLPort 3306
MySQLUser dspam
MySQLPass dspam
MySQLDb dspam
MySQLCompress true
MySQLVirtualTable dspam_virtual_uids
MySQLVirtualUIDField uid
MySQLVirtualUsernameField username
MySQLUIDInSignature on
# Инжектирование писем назад в постфикс
DeliveryHost 127.0.0.1
DeliveryPort 10027
DeliveryIdent localhost
DeliveryProto SMTP
Фильтр практически готов к работе. Нам остается только решить каким образом мы будем хранить токены. DSPAM позволяет хранить отдельную базу токенов для каждого пользователя. Таким образом у каждого пользователя будет свой набор токенов и фильтр будет индивидуально для каждого определять спамность письма. В моем случае этот подход не прижился. Дело в том, что из 100 пользователей, если десяток и занимается обучением фильтра – то хорошо. Остальные 90 не утруждают себя этой задачей и, как следствие, в итоге имеют достаточное количество неверных классификаций. Выходом из этой ситуации для меня стало использование shared группы. При внесении пользователей в shared группу токены становятся общими для группы. Таким образом, если из 100 пользователей 10 будут периодически указывать фильтру на ошибки в классификации, то будет поддерживаться в актуальном виде база токенов для всех. Да и размер самой базы будет заметно меньше. Для занесения пользователей в shared группу нужно отредактировать файл /var/db/dspam/group (если его нет – создайте, не забудьте затем про chown dspam:dspam):
Всё. DSPAM готов к работе. Можно запускать:
Теперь можно перейти к настройке DSPAM WebUI
Дополнительные записи: