RWL SpamAssassin plugin

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

Установка

Для установки плагина необходимо:

  1. Скачать его.
  2. Распаковать.
  3. Скопировать файл RWL.pm в каталог размещения плагинов SpamAssassin (обычно /usr/lib/perl5/site_perl/x.x.x/Mail/SpamAssassin/Plugin).
  4. Создать базу данных.

Настройка

Для того, чтобы фильтр смог работать, нужно "объяснить" спаморезке, что у неё появился новый модуль, для чего в файле init.pre вставить следующие строки:

loadplugin Mail::SpamAssassin::Plugin::RWL
header         KNOWN_ADDRESS eval:check_rwl_plugin()
describe KNOWN_ADDRESS I know about this sender

Затем надо настроить модуль: указать путь, имя пользователя и пароль к базе данных со списком пользователей и доменов, которые обслуживает сервер. Настройка производится в файле local.cf путём добавления следующих строк:

rwl_sql_dsn DBI:Pg:dbname=database;host=localhost;port=5432
rwl_sql_username
username
rwl_sql_password password

где rwl_sql_dsn - строка со сведениями для подключения к БД, rwl_sql_username - имя пользователя, имеющего права владельца на данную БД, rwl_sql_password - пароль пользователя.

После этого надо задать количество очков, которое будет добавляться к оценке "спамовости" в случае, если письмо отправлено с известного адреса. Настройка значения производится в файле local.cf, для этого в него надо добавить строку вида

score KNOWN_ADDRESS     -1.01

В случае, если значение не указано, тест проводиться не будет.

Первый запуск

После настройки перезапустить SpamAssassin. Необходимые таблицы и процедуры будут созданы автоматически. После этого необходимо заполнить таблицу domains названиями доменов, которые обслуживаются данным почтовым сервером.

Принцип работы

Фильтр автоматически загружается SpamAssassin, после чего начинает проверять адреса отправителей и получателей в проходящих письмах. Если адрес отправителя находится в домене, не указанном в таблице domains, то он проверяется на присутствие в белом списке; при наличии адреса в белом списке производится установка флага KNOWN_ADDRESS, иначе ничего не происходит.

В противном случае (адрес отправителя принадлежит доменам, перечисленным в таблице domains) проверяются адреса получателей. Если адрес принадлежит "чужому" домену, то он добавляется в белый список; если же локальному домену - адрес игнорируется.

Очистка от устаревших доверий к адресам происходит раз в час. По умолчанию срок жизни доверия составляет  3 месяца * (1 + log(counter)) с момента последнего отправленного на доверяемый адрес письма, где counter - количество писем отправленных из локальных доменов на доверенный адрес.

Другое

Плагин ориентирован на работу с СУБД PostgreSQL, так как присутствует процедура обновления записей в БД, однако в исходниках есть вариант без использования процедур, так что переделка под СУБД MySQL не займёт много времени.

Обновление

16.10.2014: Для сокрытия ошибок создания таблиц добавлены модификаторы IF NOT EXIST в запросы CREATE TABLE.