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

Материал из Wiki МИАЦ ВО
Версия от 08:52, 7 февраля 2020; Misha (обсуждение | вклад) (Настройка Spamassassin)
Перейти к навигации Перейти к поиску

Статья взята тут
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/mail/spamassassin/local.cf

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

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

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

$sudo nano /usr/share/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.<br>
Для работы действия '''BCC''' в '''header_checks''', необходим Postfix версии 3 и выше. Проверить версию установленного MTA можно командой 
<pre>$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 security@dmosk.ru

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

$sudo systemctl restart postfix

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

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

1. Если фраз много, а это может случится, то для того, что бы понять, в какой фильтр попала фраза, например, при отладке, лучше все правила разбить на несколько. Например файл