Настройка и базовая установка DSPAM и Web-интерфейса WebUI в FreeBSD
Администрирование
Статья была опубликована 1 февраля 2010 года в 00:00, а последний раз правилась 1 февраля 2010 года в 10:46.
Постоянная ссылка: http://www.nixp.ru/articles/21.html
Во время моего первого знакомства с этим фильтром я столкнулся с проблемой, когда 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
Впоследствии при сборке порта мы столкнемся с тем, что пользователь и группа автоматически не создаются. Поэтому создадим их сейчас вручную:
# pw groupadd dspam # pw useradd dspam -g dspam -s "/sbin/nologin" -c «DSPAM»
Теперь можно переходить к установке порта.
# cd /usr/ports/mail/dspam # make config
Отмечаем поддержку нужных нам опций:
[X] SYSLOG Logs via syslog [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)
Собираем и устанавливаем порт:
# make install clean
После сборки порта отредактируем /etc/rc.conf и добавим туда:
dspam_enable="YES"
Создадим директорию в /var/run, где будут лежать dspam.pid и dspam.sock:
# mkdir /var/run/dspam # chown dspam:dspam /var/run/dspam
Создадим базу данных, в которой DSPAM будет хранить токены и прочую информацию:
# mysql 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/mysql_objects-4.1.sql # mysql dspam < /usr/local/share/examples/dspam/mysql/virtual_users.sql
Переходим к редактированию /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
# Инжектирование писем назад в Postfix 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):
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 и зададим владельца:
# cp -R /usr/local/www/vhosts/dspam/* /home/dspam/dspam.example.com/ # chown -R dspam:dspam /home/dspam
В корневой директории со скриптами есть файл configure.pl.sample, переименуем его в configure.pl, чтобы он был доступен для DSPAM WebUI:
# cp /home/dspam/dspam.example.com/configure.pl.sample /home/dspam/dspam.example.com/configure.pl
Отредактируем этот файл изменив всего одну опцию:
$CONFIG{'LOCAL_DOMAIN'} = "dspam.example.com";
То же самое делаем с файлом пользовательских настроек по умолчанию:
# cp /home/dspam/dspam.example.com/default.prefs.sample /home/dspam/dspam.example.com/default.prefs
И отредактируем его:
trainingMode=TUM spamAction=tag spamSubject=***SPAM*** statisticalSedation=5 enableBNR=on enableWhitelist=on signatureLocation=headers showFactors=off
Для того чтобы эти настройки были видны демону DSPAM, сделаем символическую ссылку:
# ln -s /home/dspam/dspam.example.com/default.prefs /var/db/dspam/default.prefs
Затем, в созданной нами директории для конфигурационных файлов виртуальных хостов (/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-интерфейсе станет доступной информация по любому почтовому ящику).
-
Популярные в этом разделе:
- «Настройка сервера SSH (теория и практика)»,
- «Реализация отправки и приёма SMS с помощью Gnokii»,
- «Настройка сервера OpenLDAP».
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1