Установка и настойка spamassassion для фильтрации слов и выражений
Статья взята тут
Apache SpamAssassin - интеллектуальное программное приложение для фильтрации нежелательных писем от телемаркетеров и хакеров. Утилита работает поверх агента передачи почты (MTA), такого как Postfix, для классификации и блокировки нежелательных писем.
SpamAssassin является бесплатным и открытым исходным кодом и использует язык Perl для сканирования и идентификации заголовков сообщений, строк темы и текста, чтобы защитить сервер от спама.
В этом руководстве мы покажем вам, как установить SpamAssassin на ваш почтовый сервер, расположенный на сервере Ubuntu 18.04 ...
Считаем, что сервер Postfix уже установлен и настроен.
Содержание
- 1 Установка SpamAssassin
- 1.1 Шаг 1: Установка кода SpamAssassin
- 1.2 Шаг 2: Добавление пользователя системы SpamAssassin
- 1.3 Шаг 3: Редактирование файла конфигурации SpamAssassin
- 1.4 Шаг 4: Добавление SpamAssassin Правил для Спама
- 1.5 Шаг5: Редактирование Postfix
- 1.6 Шаг6: Перезапустите Postfix и SpamAssassin
- 1.7 Шаг7: Тестирование SpamAssassin
- 2 Фильтрация содержимого входящих сообщений в Postfix средствами Spamassassin с отправкой копии письма на нужный email
Установка 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.