Установка и настойка spamassassion для фильтрации слов и выражений

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

Статья взята тут
Apache SpamAssassin - интеллектуальное программное приложение для фильтрации нежелательных писем от телемаркетеров и хакеров. Утилита работает поверх агента передачи почты (MTA), такого как Postfix, для классификации и блокировки нежелательных писем.
SpamAssassin является бесплатным и открытым исходным кодом и использует язык Perl для сканирования и идентификации заголовков сообщений, строк темы и текста, чтобы защитить сервер от спама.
В этом руководстве мы покажем вам, как установить SpamAssassin на ваш почтовый сервер, расположенный на сервере Ubuntu 18.04 ...
Считаем, что сервер Postfix уже установлен и настроен.

Установка SpamAssassin

Шаг 1: Установка кода SpamAssassin

Мы собираемся установить SpamAssassin с помощью команды apt-get. Перед этим давайте сначала обновим информацию о списке пакетов:

$ sudo apt update

Затем выполните команду ниже, чтобы установить SpamAssassin:

$ sudo apt install spamassassin spamc

Нажмите Y и нажмите Enter, когда будет предложено подтвердить установку.

Шаг 2: Добавление пользователя системы SpamAssassin

Для работы SpamAssassin требуется системный пользователь. Итак, мы собираемся добавить нового пользователя в систему, используя команду ниже:

$ sudo adduser spamd --disabled-login

Вам будет предложено ввести более подробную информацию о пользователе, просто нажмите клавишу Enter, чтобы пропустить детали. В конце приглашения вас попросят подтвердить, верны ли данные. Введите Y и нажмите Enter, чтобы продолжить

Шаг 3: Редактирование файла конфигурации SpamAssassin

После установки SpamAssassin, правим файл конфигурации, расположенный в /etc/default/spamassassin Мы собираемся отредактировать этот файл, используя нано-редактор, чтобы изменить несколько параметров.

$ sudo nano /etc/default/spamassassin

Сначала измените значение директивы ENABLED с 0 на 1:
Было:

ENABLED = 0

Стало:

ENABLED = 1

Далее вам нужно создать переменную с именем SAHOME со значением ниже:
Добавляем строку

SAHOME="/var/log/spamassassin/"

Найдите директиву OPTIONS и измените ее значение, как показано ниже:
Было:

OPTIONS="--create-prefs --max-children 5 --helper-home-dir"

Стало:

OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir /home/spamd/ -s /home/spamd/spamd.log"

Кроме того, чтобы SpamAssassin мог выбирать обновления, мы собираемся установить значение CRON в 1, чтобы утилита могла автоматически загружать новые правила.
Было:

CRON=0

Стало:

CRON=1

Нажмите CTRL + X, Y и Enter, чтобы сохранить файл

Шаг 4: Добавление SpamAssassin Правил для Спама

Далее мы добавляем некоторые правила для спама. Файл, который мы собираемся редактировать, находится по адресу /etc/spamassassin/local.cf. Итак, введите команду ниже, чтобы открыть файл с помощью редактора nano:

sudo nano /etc/spamassassin/local.cf

Раскомментируйте строки, показанные ниже, и измените значения, как указано

    rewrite_header Subject [***** SPAM _SCORE_ *****]
    required_score          5.0
    use_bayes               1
    bayes_auto_learn        1
    normalize_charset       1

И добавьте строку в начало файла

ok_locales ru en

Нажмите CTRL + X, Y и Enter, чтобы сохранить файл

Шаг5: Редактирование Postfix

Далее нам нужно настроить Postfix так, чтобы он мог направлять почту через SpamAssassin. Редактируем основной файл конфигурации Postfix:

$ sudo nano /etc/postfix/master.cf

Ищем строку:

smtp inet n - - - - smtpd

Меняем на:

smtp inet n - - - - smtpd
  -o content_filter=spamassassin

Пробел или табуляция перед -o - обязательны

Также вам нужно добавить строку ниже для настройки фильтра содержимого очереди:

spamassassin unix -     n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e  
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Вторая и третья строки имеют обязательный отступ

Нажмите CTRL + X, Y и Enter, чтобы сохранить файл

Шаг6: Перезапустите Postfix и SpamAssassin

Чтобы изменения вступили в силу, вам нужно перезапустить Postfix и SpamAssassin, используя команды

sudo service postfix restart
sudo service spamassassin restart

Шаг7: Тестирование SpamAssassin

Вы можете проверить, работает ли SpamAssassin, отправив электронное письмо на ваш сервер и изучив заголовки из почтового клиента.
В исходном коде письма в заголовках будет что то вроде этого

X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on ns1.volmed.org.ru
X-Spam-Level: **
X-Spam-Status: No, score=2.0 required=5.0 tests=ADDRESS_FSB,HTML_MESSAGE,
	KHOP_HELO_FCRDNS,MIME_HTML_ONLY,SPF_HELO_NONE,TVD_SPACE_RATIO_MINFP,
	T_KAM_HTML_FONT_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no
	version=3.4.2

Фильтрация содержимого входящих сообщений в Postfix средствами Spamassassin с отправкой копии письма на нужный email

Основа взята тут

В данной статье мы разберем, как в Postfix можно проверять содержимое письма на наличие определенных ключевых фраз. Если письмо не проходит проверку, то мы его будем дополнительно отправлять на нужный email. Предполагается, что на сервере используется Spamassassin. Он будет проверять вхождения ключевых слов и присваивать им метки. Затем Postfix будем проверять заголовки — если в заголовках будут метки от Spamassassin, то такие письма будем перенаправлять на нужный email адрес.

Настройка Spamassassin

Иструкцию по созданию правил читать тут
Редактируем конфигурационный файл

$sudo nano /etc/spamassassin/local.cf

Добавляем следующие строки:

include /etc/spamassassin/99_filter.cf
  • в данном примере мы подгружаем файл 99_filter.cf, в котором будут наши ключевые фразы.

Создаем файл 99_filter.cf с ключевыми фразами:

$sudo nano /etc/spamassassin/99_filter.cf

И записываем туда код для примера

body FILTER_CONTROL             /Bad Phrase|Sale|Бомба/i
describe FILTER_CONTROL         Bad Phrase description
score FILTER_CONTROL            0.001
  • в данном примере мы задали настройку для двух фраз — Bad Phrase, Sale и бомба. Если в контенте письма попадутся данные фразы, им будет добавлен заголовок X-Spam-Status, в который попадет метка FILTER_CONTROL. Также мы задаем небольшой бал СПАМа, без него метка добавляться не будет (если необходимо, чтобы письмо попадало в СПАМ, задаем большой бал).

Перезапускаем spamassassin:

systemctl restart spamassassin

Проверяем правильность наших правил

$spamassassin --lint

И если все ок, отправляем письмо на ящик, который обслуживается нашим почтовым сервером. В теле письма пишем одно из ключевых фраз. Открываем заголовки письма — среди них мы должны увидеть что-то на подобие:

X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,FILTER_CONTROL
    autolearn=no autolearn_force=no version=3.4.0
  • как видим, в тексте есть наша метка FILTER_CONTROL.

Настройка Postfix

Открываем конфигурационный файл Postfix:

sudo nano /etc/postfix/main.cf

Правим строку или добавляем ее:

header_checks = regexp:/etc/postfix/header_checks

При чем я, данную строку добавил в основные настройки. При этом будет проверяться вся входящая и исходящая почта
Создаем или редактируем файл header_checks:

$sudo nano /etc/postfix/header_checks

И добавляем строку:

/^X-Spam-Status:.*FILTER_CONTROL.*/ BCC test@my_domain.ru
  • в данном примере мы ищем вхождения метки FILTER_CONTROL в заголовках письма, и если она есть, отправляем копию письма на адрес test@my_domain.ru.

Для работы действия BCC в header_checks, необходим Postfix версии 3 и выше. Проверить версию установленного MTA можно командой

$sudo postconf -d | grep mail_version

Проверяем настройку header_checks:

$sudo postmap -q "X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,FILTER_CONTROL" regexp:/etc/postfix/header_checks

Мы должны увидеть:

BCC test@my_domain.ru

Перезапускаем postfix:

$sudo systemctl restart postfix

Для проверки отправляем письмо с содержанием ключевой фразы — мы должны получить копию письма на другой ящик.

Как лучше проверять работу фильтров

Разбивка правил на несколько

Если фраз много, а это может случится, то для того, что бы понять, в какой фильтр попала фраза, например, при отладке, лучше все правила разбить на несколько.
Пример файла /etc/spamassassion/lint99_filter.cf

body BODY_F_0		/Помнит,\s+что\s+внутри|скобочны|выражен|все\s+специальные/i
score BODY_F_0		0.001
body BODY_F_1		/Правил|достаточно|жестк|телефон|спамер|блокируют\s+беспощадно/i
score BODY_F_1		0.001
header ADDRESS_F       ALL =~ /Installing\.com|SpamAssassin\.test|install/i
score ADDRESS_F		0.001

И в настройках Postfix прописать тоже эти правила. Файл /etc/postfix/header_checks

/^X-Spam-Status:.*BODY_F_0.*/ BCC test@my_domain.ru
/^X-Spam-Status:.*BODY_F_1.*/ BCC test@my_domain.ru
/^X-Spam-Status:.*ADDRESS_F.*/ BCC test@my_domain.ru

Проверка правильности написания правил

Для проверки правильности написания правил, после перезагрузки spamassassion используем

$sudo systemctl restart spamassassin
$sudo spamassassin --lint

При ошибках в правилах последняя команда выведет строку, где есть ошибка

Нахождение сработавшего правила, без посылки письма

Иногда не понятно, почему какие то письма попадают в правило.
1. Копируем исходный текст письма в файл, например, test.txt
2. И выполняем команду

$spamc -R < test.txt
0.0/5.0
Spam detection software, running on the system "ns1.volmed.org.ru",
has NOT identified this incoming email as spam.  The original
message has been attached to this so you can view it or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  Задача #156687 была обновлена (Аверина
   Наталья). Значение Анферов Сергей параметра
   Назначена удалено сняла Назначено. 

Content analysis details:   (0.0 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 0.0 URIBL_BLOCKED          ADMINISTRATOR NOTICE: The query to URIBL was
                            blocked.  See
                            http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block
                             for more information.
                            [URIs: swan-it.ru]
-0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
                             no trust
                            [90.150.189.82 listed in list.dnswl.org]
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
-0.0 SPF_PASS               SPF: sender matches SPF record
 0.0 HTML_MESSAGE           BODY: HTML included in message

И видим, в какие фильтры spamassassion, попало данное письмо
Далее постепенно удаляя строку фильтра определенного правила, находим - по какому слову оно сработало.

Мои замечания по написанию фильтров

1. Случилось так, что надо было написать фильтр, в который, попадало слово мина. Я его добавил, как |мина|. И посыпались письма со словом напоминание. Они замечательно попадали под этот фильтр. Пробовал делать фильтр |\bмина\b|. Но он не работает с русским текстом. |\btext\b| - работает, а |\bмина\b| - нет. Пришлось вообще убрать данный фильтр.
2. В фильтрах почему то не работает ключ /g.