Postfix vmail-visa spam filter

vladimir simeonov
18/07/2011

Спам.. Кошмара на всеки mail administrator. В борбата с него има два основни подхода:

1. позволяваш на писмата да влязат в сървъра за обработка и ги изпращаш към spam filter от рода на spamassassin.

2. филтрираш писмата преди да са постъпили в системата на базата на graylist, whitelist, blacklist и т.н.

3. кръстоска между 1 и 2

Ако сървъра който получава писма е споделен хостинг, то с времето неиминуемо ще започне да получава огромни количества спам. Ако администратора използва вариант 1, то ще се наложи да добавя процесори и памет за лакомия spamassassin. работил съм на машина, която 50-80% от процесорното време се яде от spamd, до положение при което се получават timeout поради огромното време което spamd му отнема за проверката на потока. грозна картина.

въобще ако не разполагам с плаформа за филтриране от рода на CISCO IronPort, дори не бих се захванал да реализирам вариант 1.

Недостатъците на вариант 2 са следните:

1. blacklist ите от рода на spamcop, spamhaus и т.н. RBL, PBL са , че в тях не попадат всички адреси от които се изпраща spam. но това е обстоятелство което може да се компенсира единствено, чрез добавяне на нови lists. разбира се трябва да се има впредвид, че ако някоя от листите се срине и не е достъпна за проверка, системата се чупи и то доста грозно!!

2. whitelist – е не можете да имате в реално време такава листа, което обаче е добра идея за проект с такава насоченост

3. graylist – основните недостатъци са:

– системи които не са протоколно съвместими (при получаване на грешка 4.5.0 не оставят писмото в queue/spool за повторно предаване), най – често това са web scripts, които директно изпращат писмата без да ползват клиент (postfix, sendmail, etc.)

– интервалите на повторно предаване на писмата за различните mail servers са различни, от 4мин до 4часа и повече (случвало се е писмото да пристига след 12часа)

4. forward-reverse dns lookup е метод при който postfix проверява дали адреса от който е остановена връзка за получаване на писмо има обратен запис и дали hostname-a на обратния запис съответства с правия запис (127.0.0.1 -> mail.example.com; mail.example.com -> 127.0.0.1)

комбинация от 4 посочени метода гарантират 99% блокиране на SPAM. но също така метод 4 има основният недостатък да генерира огромен процент false positive. причината?? неправилно конфигурирани пощенски сървъри.

в интернет работят системи за изпращане на писма, които са свръх неправилно конфигурирани, техните администратори дори не знаят, че ако нямат правилно конфигуриран forward-reverse dns lookup, стотици хиляди сървъри ще отхвърлят писмата им като спам.

и тъйкато в определен момент си казах стига, не мога по цял ден да чистя false-positive, създадох един скрипт, който филтрира т.н. false-positive по много прост метод:

1. неправилно конфигуриран сървър опитва да изпрати писмо до моят сървър.

2. сървъра отхвърля писмото с грешка 4.8.1

3. филтъра хваща чрез postfix perl dragon лога това отхвърляне и започва проверка на адреса на подателя.

4. при повторен опит за доставяне на същото писмо от host-а, скрипта на базата на точките които хоста е събрал при проверката му от скрипта, добавя хоста в whitelist-a или в перманентен blacklist.

единственият недостатък на скрипта е, че хоста трябва да направи 3 опита за доставка на писмото, което означава време и забавяне.

скрипта е част от проекта Vmail Visa, можете да го свалите от https://sourceforge.net/projects/vmail-visa/

за инсталация – Readme. 🙂

Comments are closed !