From: Sciurus <sciurus@mail.ru.>
Date: Mon, 14 May 2003 13:01:37 +0000 (UTC)
Subject: Regex спам-фильтр для sendmail.
Оригинал: http://linux.ufaras.ru/regex.html
Спам-фильтр для sendmail.
В данном документе представлены правила sendmail, использующие регулярные
выражения для определения наличия спама в письме по ключевым словам в обратном
адресе, а также в теме письма.
По статистике в среднем в день ловится около 50-100 писем по обратному e-mail и
150-200 по теме сообщений (на 700 почтовых пользователей, максимальные значения
450 и 500 в день соответственно с января 2003г.).
Имевшие место случаи ложного срабатывания учтены в WhiteList'ах для e-mail и
Subject.
Вторая часть документа взята с http://www.softerra.ru/freeos/19480/page1.html
В день ловит около 100-150 писем, в основном, по CheckMailer, CheckTo, CheckMessageID
Скачать спам-фильтр в текстовом формате можно здесь http://linux.ufaras.ru/regex.txt
Его следует добавить в конец стандартного sendmail.mc (после определения MAILER),
пересобрать sendmail.cf и перезапустить sendmail. Из-за большой длины строк с
регулярными выражениями пришлось разбить их на подгруппы.
Но на comp.mail.sendmail предлагается такое решение, когда строки получаются очень
длинными:
define(`xic_a2000_nl', `node-[cd]-[0-9a-f]{4}.a2000.nl$')dnl
define(`xic_attbi_com', `(-[0-9]{1,3}){3}.client[2]?.attbi.com$')dnl
define(`xic_wanadoo_fr', `(-[0-9]{1,3}){4}.*.wanadoo.fr$')dnl
Kxic regex xic_a2000_nl|xic_attbi_com|xic_wanadoo_fr
Там же рекомендуется комбинации, на которых наиболее часто срабатывают
regex-правила, помещать в список первыми (для уменьшения нагрузки на CPU).
В regex-выражениях использованы [.] для обозначения точки и
. в качестве пробела ( в силу опции в sendmail.cf):
# substitution for space (blank) characters
O BlankSub=.
Nota bene! При добавлении новых слов в список необходимо следить, чтобы
последним в строке не оказался символ "|", иначе будут блокироваться любые темы.
LOCAL_CONFIG
# WhiteList для e-mail (несмотря на наличие sale, shop, job, deal, love & shit эл. адреса, содержащие эти слова,
#не должны блокироваться):
KSPAM0 regex -a@MATCH tsalenko|alert|workshop|ideal|-job-|rashit|rollover
# BlackList для e-mail:
# Электронные адреса, в которых встречается больше 2 знаков подчеркивания:
KSPAM1 regex -a@MATCH ^([[:alnum:]]*)(_+)([[:alnum:]]*)(_+)([[:alnum:]]*)(_+)[[:alnum:]_]*$
# WhiteList для поля Subject:
KChSb regex -a@CATCHED tsalenko|alert|workshop|ideal|-job-|rashit|rollover
# BlackList для поля Subject:
# Темы писем с Avron-вирусом :
KChSbVIRAvron regex -a@CATCHED IREX.+fields|FSAU.*2003|ACCELS|Avril|Redirection|Ocho|According|ecurity.breach|for.+Incorrect.+MIME-header|senior|Specification.+requested|Crime|Junior.+Achievement|perduto|customers|Daos|IIS-Sec|estate|Admission
# Темы писем с Klez-вирусом :
KChSbVIRKlez regex -a@CATCHED mail(.+)--|A.+IE.+6.+0.+patch|W32|Klez|.Eden|removal.+tools
# Темы писем с явным спам-Subjectом :
KChSbSpam regex -a@CATCHED $$[[:digit:]]+|language.+center|toefl|game|.xxx|woman|discount|dollar|casino|rassylk|reklam|reclam|prize|sale|cash|bonus|money|game|donna|girl|adult|fuck|honey|sweet|porno|cock|playboy|play.+boy|.love|lolita|penis|movie|darling|passwd
KChSbSpam2 regex -a@CATCHED [[:digit:]]+%|.ass.|.sex|titt|nude|DVD|.+vogue|.elle|harper's.+bazaar|marie.+claire|astrolog|viagra|fetish|.oral|shit|topless|orgy|.suck.|shop|lesbo|urgent.assistance|mobil|kiss|.sms.|motors|business|english|drink
# Cпам от American Language Center.
# Письма от Outlook Express - тема в кодировке base-64 (koi-8) :
# Письма от TheBat! - тема в кодировке base-64 (win-1251) :
# здесь указаны ключевые комбинации символов, позволяющие выловить сочетание слов
#"деловой/разговорный/бизнес + английский" в обоих регистрах:
# win-1251:Дделовой|ДЕЛОВОЙ|Рразговорный|РАЗГОВОРНЫЙ|БИЗНЕС|Ббизнес
#koi-8:Дделовой|ДЕЛОВОЙ |РАЗГОВОРНЫЙ|Рразговорный|Ббизнес|БИЗНЕС
KChSbRuSpam1 regex -a@CATCHED Pr6Onx6ujp|zcPLyMnR|3j6+jp8e|M3Dy8jJ0|DNw8vIydH|Dt4+vo6fHq|zsfMycrTy|7ufs6erz|7n7Onq8+v |7HzMnK08v|x8zJytPLy|Hu5+zp6vP
# Netscape Messenger - кодировка Quoted Printable
#н г л и й с к| Н Г Л И Й С К
KChSbRuSpam2 regex -a@CATCHED =CE.*=C7.*=CC.*=C9.*=CA.*=D3.*=CB|=EE.*=E7.*=EC.*=E9.*=EA.*=F3.*=EB
# Остальные спам-слова в теме на русском языке:
# а н г л | м е р и к а н с к | с к и д к | п о д а р | р е к л а м |Научитесь понимать|курс рубл|руководите| с упер
# О Т Д Ы Х |аркетинг| ш т а м п
KChSbRuSpam3 regex -a@CATCHED [юЮ].*[мМ].*[цЦ].*[кК]|[лЛ].*[еЕ].*[пП].*[хХ].*[йЙ].*[юЮ].*[мМ].*[яЯ].*[йЙ]|[яЯ][йЙ][хХ][дД][йЙ]|[оО][нН][дД][юЮ][пП]|[пП][еЕ][йЙ][кК][юЮ][лЛ]|мЮСВХРЕЯЭ.ОНМХЛЮРЭ|ЙСПЯ.ПСАК|ПСЙНБНАХРЕ|[яЯ]СОЕП|[нН][рР][дД][шШ][уУ]|ЮПЙЕРХМЦ|[ьЬ].*[Рр].*[Юю].*[Лл].*[Оо]
#ю ридич|утешеств| т ренинг|истрибьют|тратеги| н алог|ухгалтер|ффективны|редлагаем|отрудничеств|отели
# знать|аш сайт| т ариф| п окуп| п рода|изнес|роизнош |азговор |есплат| к урорт б а з а(ы)
KChSbRuSpam4 regex -a@CATCHED [чЧ]ПХДХВ|СРЕЬЕЯРБ|[рР]ПЕМХМЦ|ХЯРПХАЭЧР|РПЮРЕЦХ|.[мМ]ЮКНЦ|СУЦЮКРЕП|ТТЕЙРХБМШ|ПЕДКЮЦЮЕЛ|НРПСДМХВЕЯРБ|НРЕКХ.ГМЮРЭ|ЮЬ.ЯЮИР|[Рр]ЮПХТ|[оО]НЙСО|[оО]ПНДЮ|ХГМЕЯ|П.*Н.*Х.*Г.*М.*Н.*Ь|Ю.*Г.*Ц.*Н.*Б.*Н.*П|ЕЯОКЮР|[уУ]ЙСЫНР|.[аА][юЮ][гГ][юЮшШ].
KChSbRuSpam5 regex -a@CATCHED юридич|утешеств|[тТ]ренинг|истрибьют|тратегия|ухгалтер|ачальник|тариф|девушк|дисконт|английск|выставк|ярмарк|скидк|распродаж|реклам|цены|знакомств|секс|рассыл|фильм|рубл|отд[оы]х|каникул|[Cс]отрудничест|[Пп]редлагаем|[Ээ]ффективн
KChSbRuSpam6 regex -a@CATCHED покуп|продаж|изнес|мышлен|произнош|язык|есплатн|курорт|маркетинг|печат|визит|обучение
#Очень хотелось блокировать письма с вложениями с расширениями
#com|exe|bat|bas|vba|vbe|vbs|reg|inf|cmd|pif|sct|wsh|cpl|js|jse|lnk|chm|hlp|hta|mdb|scr|shs|vb|vbg|wsf
#Но, к сожалению, это оказалось невозможно, так как информация о вложениях
#содержится во внутрених (или по-другому, дополнительных) полях CheckContentType, а также
# в необязательном поле CheckContentDisposition, которые sendmail проверять не умеет
#(информация об этом почерпнута из ответа на мой вопрос в новостной группе comp.mail.sendmail)
#Тем не менее привожу здесь пример проверки поля CheckContentType на тот случай, если
#кому-нибудь понадобится фильтровать почту по внешнему (т.е. основому) полю CheckContentType,
#в котором, как правило, содержится информация типа (RFC-1521):
#multipart/mixed; boundary="------..." или text/plain; charset=... и т.д.
#Фильтрование по внешнему полю отрабатывает нормально.
#KChConType1 regex -a@CATCHED name=.+[.](com|exe|bat|bas|vba|vbe|vbs|reg|inf|cmd|pif|sct|wsh|cpl|js|jse|lnk|chm|hlp|hta|mdb|scr|shs|vb|vbg|wsf)
LOCAL_RULESETS
SLocal_check_mail
# check address against various regex checks
R$* $: $>Parse0 $>3 $1
R$+<@$*> $: $(SPAM0 $1 $)
R@MATCH $: OK
R$+ $: $(SPAM1 $1 $)
R@MATCH $#error $: 553 SPAM1 is not wanted!
R$+ $: $(SPAM2 $1 $)
R@MATCH $#error $: 553 SPAM2 is not wanted!
R$+ $: $(SPAM3 $1 $)
R@MATCH $#error $: 553 SPAM3 is not wanted!
R$+ $: $(SPAM4 $1 $)
R@MATCH $#error $: 553 SPAM4 is not wanted!
R$+ $: $(ChSbVIRAvron $1 $)
R@CATCHED $#error $: 553 This message may contain Avron.VIRUS
R$+ $: $(ChSbVIRKlez $1 $)
R@CATCHED $#error $: 553 This message may contain Klez.VIRUS
R$+ $: $(ChSbSpam $1 $)
R@CATCHED $#error $: 553 This message may contain SPam
R$+ $: $(ChSbSpam2 $1 $)
R@CATCHED $#error $: 553 This message may contain SPam2
R$+ $: $(ChSbRuSpam1 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam1
R$+ $: $(ChSbRuSpam2 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam2
R$+ $: $(ChSbRuSpam3 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam3
R$+ $: $(ChSbRuSpam4 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam4
R$+ $: $(ChSbRuSpam5 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam5
R$+ $: $(ChSbRuSpam6 $1 $)
R@CATCHED $#error $: 553 This message may contain ruSPam6
############## Замечания по поводу проверки полей CheckContentType &
############## CheckContentDisposition см. выше.
#HContent-Type: $>CheckContentType
#
#SCheckContentType
#R$* $: $(ChConType1 $1 $)
#R@CATCHED $#error $: 553 This message may contain VIRUS $&f
##Вместо предыдущих 2 строк можно использовать последующие 3,
##Эти правила по результату равнозначны.
##Также можно вместо $1 использовать $&{currHeader}
##R$+ $: $(ChConType1 $1 $: $)
##R $@ OK
##R$* $#error $: 553 This message may contain a VIRUS $&f
###################
#HContent-Disposition: $>CheckContentDisposition
#SCheckContentDisposition
#R$+ $: $(ChConType1 $1 $)
#R@CATCHED $#error $: 553 This message may contain VIRUS $&f
##Вместо предыдущих 2 строк можно использовать последующие 3,
##Эти правила по результату равнозначны.
##Также можно вместо $&{currHeader} использовать $1:
##R$+ $: $(ChConType1 $&{currHeader} $: $)
##R $@ OK
##R$* $#error $: 553 This message may contain a VIRUS $&f
# Настоящий Outlook имеет версию вида: 5.0.23123244
RMicrosoft Outlook Express 5.0 $#error $@ 5.7.1 $: "554 Spam (Microsoft Outlook Express 5.0)"
RVersion 5.0 $#error $@ 5.7.1 $: "554 Spam (Version 5.0)"
# Заблокируем все мейлеры с названием только из одного слова:
Rnethack $@ OK
RZ-Mail-SGI $@ OK
RDipost $@ OK
RSquirrelMail $@ OK
R$- $#error $@ 5.7.1 $: "554 Spam (one-word mailer)"
# Заблокируем письма с пустым заголовком
R$* $: < $1 >
R< > $#error $@ 5.7.1 $: "554 Illegal header (empty header)"
R$* $@ OK
# проверим поле To на "undisclosed-recipients;" или "undisclosed recipient"
# комбинации могут быть практически произвольными.
SCheckTo
R$*Recipient$* $#error $@ 5.7.1 $: "554 Unspecified Mailbox ID"
R$*Undisclosed$* $#error $@ 5.7.1 $: "554 Unspecified Mailbox ID"
#проверим правильность формата поля Message-ID (оно должно быть в фтификатор@домен).
SCheckMessageID
R<$+@$+> $@ < $1 @ $2 >
R$* $#eror $@ 5.5.2 $: "553 Bad Message ID"
##Spam-rules check is done.
14. Обратная связь
Страница создана 10 мая 2003г.
Последнее обновление: 15 мая 2003г.
Обратная связь: sciurus@mail.ru