Головна

Налаштування власних правил антиспаму SpamAssassin

Стандартні правила SpamAssassin досить непогані, але вони містять занадто мало ознак спаму для української та російської мови.

Звісно є загальні риси, які будуть однакові для будь-якого спаму. Також є алгоритм Байеса. Але навчання антиспаму потребує часу. Хотілося б підвищити ефективність одразу після встановлення.

Для цього я зробив одразу декілька дій.

Перше — при встановленні SpamAssassin я зразу імпортую туди правила з іншого сервера, де база самонавчання наповнювалась роками.

І друге — я почав писати власні правила для SpamAssassin.

Як виявилось писати такі правила не дуже важко. Головне уявляти, що саме хочеш отримати на виході.

Наприклад я звернув увагу, що багато спаму надходить з якихось дивних доменів - .art .cn .nl .network і так далі. Продивившись листи, які я отримував за час існування свого сервера, я побачив, що з таких доменів нормальних листів я не отримував. Тому вирішив скласти список TLD (top level domains) за виключенням яких пошта буде додатково помічатись. У мене вийшло таке правило

 

header YAKIM_BAD_FROM_TLD From !~ /@[a-z0-9\-\.]+\.(com|org|net|ua|us|ru)/i

describe YAKIM_BAD_FROM_TLD mail not from com|org|net|ua|us|ru TLD

score YAKIM_BAD_FROM_TLD 1.5

 

 

Опис створення даного правила

header — шукаємо в заголовках повідомлення

YAKIM_BAD_FROM_TLD — довільне ім’я правила

From — в якому полі заголовку шукаємо

!~ - не містить

@[a-z0-9\-\.]+\. - Регулярний вираз, що означає будь-який піддомен (тобто символ “@” а далі довільний набір англійських літер та/або цифр і все це закінчується символом “.”)

(com|org|net|ua|us|ru) — перелік допустимих TLD. Звісно для власної потреби цей список можна і, скоріш за все, потрібно буде змінювати

Тобто ми шукаємо com або net або ua і так далі. Символ “|” це логічне “OR

 

describe YAKIM_BAD_FROM_TLD — довільний опис даного правила. Текст що йде далі буде внесений в заголовок листа при спрацьовуванні даного правила

 

score YAKIM_BAD_FROM_TLD 1.5 — при спрацьовуванні даного правила додаємо 1.5 бала до оцінки спама.

Звісно кількість балів можна змінювати, ала, як на мене, це як нормальна величина.

Також мені набрид спам, в якому пропонується продаж ручок Parker та ножів Victorinox. Тому я додав ще одне правило

 

header YAKIM_BAD_SUBJECT Subject =~ /\bparker\b | \bvictorinox\b/i

describe YAKIM_BAD_SUBJECT parker or victorinox

score YAKIM_BAD_SUBJECT 2

 

Логіка така ж, як і у попередньому випадку. Різниця в =~. Це означає, що певне поле має містити наступний вираз.

Зверніть увагу, що в цьому правилі пошукові слова з обох боків обмежені \b. Це означає, що дані слова мусять бути окремими словами, а не входити в інші слова, як частина.

Також хотілося б вказати на “i в кінці регулярного виразу. Його наявність означає що буде здійснюватись регістронезалежний пошук.

 

І останній приклад — це складний пошук.

Нажаль неможливо (або я не знайшов як це створити) зробити пошук, наприклад по двох словах в темі листа. При цьому ці слова можуть стояти разом чи окремо, розділятись іншими словами і так далі.

 

Я звернув увагу, що надходить багато спаму, який містить в темі

Для начальника

для вашего руководителя

і так далі.

Тобто в темі обов’язково міститься слово “Для” та варіанти начальника” руководителя”

Крім того виникла ще одна проблема — SpamAssassin не розуміє кирилицю в текстах правил. Як виявилось, для того щоб все ж таки працювати з нелатинськими символами треба їх певним чином перекодувати в коди UTF-8

І крім цього не працює (або я не зміг його примусити) регістронезалежний пошук в кирилиці. Тому я був вимушений робити пошук через “або”

І так, це правило буде виглядати ось так

 

header __YAKIM_BAD_SUBJ_FOR Subject =~ /\xD0\xB4\xD0\xBB\xD1\x8F|\xD0\x94\xD0\xBB\xD1\x8F/

header __YAKIM_BAD_SUBJ_CHIEF Subject =~ /\xD1\x83\xD0\xBA\xD0\xBE\xD0\xB2\xD0\xBE\xD0\xB4\xD0\xB8\xD1\x82\xD0\xB5\xD0\xBB|\xD0\xB8\xD1\x80\xD0\xB5\xD0\xBA\xD1\x82\xD0\xBE\xD1\x80/

meta YAKIM_BAD_SUBJ_FOR_CHIEF (__YAKIM_BAD_SUBJ_FOR && __YAKIM_BAD_SUBJ_CHIEF)

describe YAKIM_BAD_SUBJ_FOR_CHIEF spam for chief in ru ua

score YAKIM_BAD_SUBJ_FOR_CHIEF 2

 

Описую, що тут зроблено:

header __YAKIM_BAD_SUBJ_FOR — в темі листа шукаємо “для або Для

header __YAKIM_BAD_SUBJ_CHIEF — в темі листа шукаємо “начальника або керівника

 

meta YAKIM_BAD_SUBJ_FOR_CHIEF (__YAKIM_BAD_SUBJ_FOR && __YAKIM_BAD_SUBJ_CHIEF) — створюємо додаткове правило — воно спрацює якщо спрацювало і перше і друге правило (тобто в темі знайшли обидва слова)

Далі, як і в попередніх випадках даємо правилу опис та призначуємо певну кількість балів спаму.

 

Всі правила, що я описам на сьогодні знаходяться у файлі yakim.cf, який завантажити можна тут.

 

ЗАВАНТАЖИТИ

 

Для підключення цих правил до свого SpamAssassin потрібно покласти цей файл в теку /usr/share/spamassassin та додати в озновний файл конфігурації рядок

include /usr/share/spamassassin/yakim.cf

 

Запрошую усіх бажаючих наповнювати цей файл новими правилами і, при бажанні, використовувати на своїх серверах.