Частина 12. Антиспам SpamAssassin.

Налаштування поштового сервера на базі Postfix, Dovecot та RoundCube. Зміст


Встановлення SpamAssassin


Для встановлення антиспаму виконаємо команду
# apt install spamassassin
Зразу після встановлення програма працювати не буде. За замовчанням вона відключена. Для її активації треба в файлі /etc/default/spamassassin змінити значення enable в 1.

Підключення SpamAssassin до Postfix

Вносимо зміни в файл /etc/postfix/master.cf.
Зразу після рядка
smtp inet n - - - - smtpd
додаємо
-o content_filter=spamassassin
Не забуваємо, що цей новий рядок має відступати від початку рядка.
Цим параметром ми вказуємо, що всі листи мають передаватися на аналіз до фільтра spamassassin
Тепер, в кінці цього файлу, треба, власне, описати цей фільтр. Для цього допишемо рядки:
spamassassin unix - n n - - pipe
user=virtual argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}


Файл конфігурації SpamAssassin

Основний файл конфігурації антиспама — це /etc/spamassassin/local.cf. Приводимо його до вигляду:

rewrite_header Subject *****SPAM*****
report_safe 0
trusted_networks 192.168.0.0/24
required_score 5.0
use_bayes 1
bayes_auto_learn 1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
bayes_min_ham_num 1
bayes_min_spam_num 1
report_charset koi8-r
ok_locales ru en uk
bayes_path /var/spool/bayes/bayes
bayes_file_mode 0666
score SUBJ_FULL_OF_8BITS 0
score FROM_ILLEGAL_CHARS 0
score SUBJ_ILLEGAL_CHARS 0
score HEAD_ILLEGAL_CHARS 0
score HABEAS_SWE 0
score FORGED_IMS_TAGS 1
score BAYES_00 0.0001 0.0001 -2.312 -2.599
score BAYES_05 0.0001 0.0001 -1.110 -1.110
score BAYES_20 0.0001 0.0001 -0.740 -0.740
score BAYES_40 0.0001 0.0001 -0.185 -0.185
score BAYES_50 0.0001 0.0001 0.001 0.001
score BAYES_60 0.0001 0.0001 2.0 2.0
score BAYES_80 0.0001 0.0001 3.0 3.0
score BAYES_95 0.0001 0.0001 3.5 3.5
score BAYES_99 0.0001 0.0001 5.0 5.0
score ALL_TRUSTED -3.360 -3.440 -3.665 -3.800


Основні параметри
rewrite_header показує який рядок додає в тему листа
trusted_networks 192.168.0.0/24 довірена мережа звідки перевірка спаму не проводиться
required_score 5.0 поріг спрацьовування на спам, за замовчуванням 5 балів, якщо 5 балів та більше, то лист позначається як спам
use_bayes 1 вмикаємо алгоритм bayes (самонавчання)
ok_locales ru en uk список припустимих мов

Параметри оцінювання листів на належність до спаму, а також кількість балів за кожне спарювання вказується після ключового слова score. Докладніше про ці параметри можна дізнатися з документації на сайті розробників за посиланням

https://spamassassin.apache.org/old/tests_3_3_x.html



Правил може бути будь-яка кількість і вони додаються в стовпчик. Для кожного правила призначається певна кількість балів. Правила, які не описані в цьому файлі, працюватимуть з кількістю балів за замовчуванням. Тобто всі правила, які знаходяться за посиланням працюють, а в файлі ми прописуємо тільки ті правила, для яких ми змінюємо кількість балів. Для відключення правила йому потрібно призначити 0 балів.

Створення білих списків адрес

Білий список адрес заповнюється адресами, з яких точно не може прийти спам. В файлі /etc/spamassassin/local.cf прописуємо параметр whitelist_from і далі робимо список адрес. Наприклад:
whitelist_from user@mail.ru *@gmai.com
Всі адреси записуються через пробіл. При записі можна використовуватися регулярні вирази. Для зручності, щоб не робити один довгий рядок, таких рядків можна зробити багато.

Навчання антиспаму

Механізм самонавчання — це алгоритм bayes. Це не частина статичних правил spamassassin, а окремий алгоритм. Додаткові бали він додає або знімає виходячи з власного досвіду навчання на базі листів і робить це динамічно. При створенні бази листів для навчання потрібно бути уважним, тому що базу навчання легко зіпсувати помилково доданими листами. З точки зору розробників ні в якому разі не можна включати до бази навчання на спам (--spam) листи, які вже позначені як спам, а в навчанні на помилкове спрацьовування (--ham) не можна включати листи не позначені як спам.
Будь-яка система антиспаму може як пропускати спамові листи, так і генерувати помилкові спрацьовування (тобто нормальний лист може позначитись як спам). Якщо потрібно передати в навчальний механізм неопізнані спамові листи (система не позначила їх як спам, хоча це точно спам) то використовується команда:
/usr/bin/sa-learn --spam
Для навчання на листах з помилковим спрацьовуванням використовується команда:
/usr/bin/sa-learn --ham

Автоматизація навчання антиспаму

Вручну навчати антиспам не продуктивно, тому зробимо автоматизацію процесу.
У кожному поштовому ящику створюємо дві теки:
Spam - в цю теку користувач вручну складає листи не виявлені антиспамом
Nospam - в цю теку користувач вручну складає листи помилково позначені як спам
У теці /root створюємо дві підтеки — Spam і Nospam
Слід звернути увагу що в файловій системі теки Spam і Nospam в поштовій скринці користувача (/var/mail/domain/user) будуть називатися відповідно .Spam і .Nospam, це пов'язано з нюансами роботи Dovecot
Крім цього потрібно враховувати, що листи зберігаються не в самій теці (наприклад .Spam), а в підтеках .Spam/cur (прочитані листи) та .Spam/new (непрочитані листи)
Далі пишемо скрипт для автоматизації процесу.
В теці /root створюємо файл скрипта spam.sh і записуємо в нього:
#!/bin/bash
MAILDIR=/var/mail/study.local #визначимо в змінній теку зберігання пошти
#Spam
for filename in $MAILDIR/* # Обхід всіх файлів в теці.
do
if [ -d $filename ]; then
if [ -e $filename/.Spam ]; then
ssp=$filename'/.Spam/cur/';
ssp2=$filename'/.Spam/new/';
sp1=`ls $ssp`
if [ "$sp1" != "" ];
then
mv -f $ssp/* /root/spam && chmod 777 -R /root/spam;
mv -f $ssp2/* /root/spam && chmod 777 -R /root/spam;
fi;
fi;
fi;
done
date >>/var/log/spam-learn.log
/usr/bin/sa-learn --spam /root/spam >>/var/log/spam-learn.log
MDIR=/var/mail/study.local
#NoSpam
for filename in $MDIR/* # Обхід всіх файлів в теці.
do
if [ -d $filename ]; then
if [ -e $filename/.Nospam ]; then
ssp=$filename'/.Nospam/cur/';
ssp2=$filename'/.Nospam/new/';
sp1=`ls $ssp`
if [ "$sp1" != "" ];
then
mv -f $ssp/* /root/nospam && chmod 777 -R /home/root/nospam;
mv -f $ssp2/* /root/nospam && chmod 777 -R /home/root/nospam;
fi;
fi;
fi;
done
date >>/var/log/spam-learn.log
/usr/bin/sa-learn --ham /root/nospam >>/var/log/spam-learn.log


Тепер встановлюємо на цей файл право на виконання:

chmod +x /root/spam.sh

Та дописуємо в планувальник cron (файл /etc/crontab) правило періодичного запуску цього скрипта:

10 1 * * * root /root/spam.sh

Тепер цей скрипт буде виконуватися щодоби вночі о 1 годині 10 хвилин

Налаштування поштового сервера на базі Postfix, Dovecot та RoundCube. Зміст

Возврат к списку