Exim: Spam и формальные признаки сообщения.

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-08 10:39:31

Всем здравствуйте.
Прошу помощи, потому что возникли вопросы о целесообразности включения определенных проверок и их правильности.
Может, если тут разобраться что к чему, вдруг кому пригодиться.
Технически спам можно фильтровать двумя основными способами: по формальным признакам сообщения (по обратному адресу, способу отправки и оформлению) и по его содержанию (то есть по его смыслу, семантически).
При настройке правил в Exim без дополнительных программ (dspam или spamassassin) в основном делается упор на проверку по формальным признакам.
Настраивал в основном по статье http://www.lissyara.su/articles/freebsd ... +exchange/.
Вот эти определенные проверки:

получим запись из обратной зоны для айпи клиента

Код: Выделить всё

set acl_c_reverse_zone = ${escape:${lookup dnsdb{ptr=$sender_host_address}}}
1) сравнение ip, полученного из обратной записи с ip отправителя

Код: Выделить всё

condition = ${if match{${lc:$acl_c_reverse_zone}}{${lc:$sender_host_address}}{no}{yes}}
2) сравнение ip отправителя с ip, полученного из резолва а записи мх записи домена отправителя (не знаю как по русски написать)

Код: Выделить всё

condition = ${if match_ip{$sender_host_address}{${lookup dnsdb{>:a=${lookup dnsdb{>: mxh=$sender_address_domain}}}}}{yes}{no}}
3) сравнение ip отправителя с ip, полученного из резолва хело отправителя отправителя

Код: Выделить всё

condition = ${if !match_ip{$sender_host_address}{${sq{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}
Вопросов о правильности проверки №1, нет, вроде работает, однако, буду очень рад, если кому интересно, прокомментирует эту проверку, может я чего упустил:

Код: Выделить всё

exim -be
> ${if match {${lc:1.1.1.1}}{${lc:2.2.2.2}}{yes}{no}}
no
> ${if match {${lc:1.1.1.1}}{${lc:1.1.1.1}}{yes}{no}}
yes
проверка (№3) уже была предложена ранее вот тут, но как и проверка (№2) в версии exim 4.77 она работать не будет, тк изменился синтаксис. Об этом написано тут: http://ftp.exim.org/pub/exim/ChangeLogs/ChangeLog-4.77, откуда как я понял match_* следует заменить на inlist, и действительно если проверить, то:

(№3):

Код: Выделить всё

exim -be
> ${if !inlist{94.228.245.4}{${sg{${lookup dnsdb{a=mx1.sportmaster.ru}{$value}fail}}{\N\n\N}{:}}}{yes}{no}}
yes
(№2)

Код: Выделить всё

exim -be
> ${if inlist{94.228.245.4}{${lookup dnsdb{>:a=${lookup dnsdb{>: mxh=sportmaster.ru}}}}}{no}{yes}}
yes
Но при прохождении письма (делал тест telnetом) проверки №2,3 не работают, я пытался балы навесить. Как вы думаете это связано с новым синтаксисом или неправильно написанными запросами?
Заранее благодарен за разумную посильную помощь.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35466
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Alex Keda » 2012-05-08 14:22:28

подебажте
будет написано что с чем сравнивается
Убей их всех! Бог потом рассортирует...

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-08 14:29:56

Alex Keda писал(а):подебажте
будет написано что с чем сравнивается
ок, понял вас, а правильно ли я понял смысл параметра inlist, ну то, что он тоже самое, что и match_ip?

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-08 16:43:31

Stason писал(а): 1) сравнение ip, полученного из обратной записи с ip отправителя

Код: Выделить всё

condition = ${if match{${lc:$acl_c_reverse_zone}}{${lc:$sender_host_address}}{no}{yes}}
:crazy: прошу меня извинить но 1я проверка, что я привел - бред, это я просто уже сильно наперепроверялся.
проверку №1 следует понимать так:

сравнение обратной записи, полученной из ip отправителя с хело отправителя

Код: Выделить всё

condition = ${if match {$acl_c_reverse_zone}{$sender_helo_name}{no}{yes}}

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-08 20:17:45

№1

Код: Выделить всё

exim -be
> ${if match {${lookup dnsdb{>: defer_never,ptr=94.228.245.4}}}{mx1.sportmaster.ru}{no}{yes}}
no
no - т.е все ок

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-09 16:21:41

Вроде разобрался:
в acl_check_rcpt:
  • # сравнение обратной записи, полученной из ip отправителя с хело отправителя

    Код: Выделить всё

    	warn	hosts = !+relay_from_hosts : *
    #		condition = ${if match {$acl_c_reverse_zone}{$sender_helo_name}{no}{yes}}
    		condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}}{$sender_helo_name}{no}{yes}}
    		set acl_m0    = ${eval:$acl_m0+20}
    #		delay = 45s
    		message = Score is $acl_m0. Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
  • # проверка соответствия IP HELO IP хоста отправителя

    Код: Выделить всё

    	warn	hosts = !+relay_from_hosts : *
    		condition = ${if !inlist{$sender_host_address}{${sg{${lookup dnsdb{a=$sender_helo_name}{$value}fail}}{\N\n\N}{:}}}{no}{yes}}
    #		condition = ${if !match_ip{$sender_host_address}{${sg{acl_m_a_ip}{\N\n\N}{:}}}{yes}{no}}
    		set acl_m0 = ${eval:$acl_m0+30}
    		message = Score is $acl_m0. for host $sender_host_name [$sender_host_address] with HELO $sender_helo_name - HELO do not points to host address
#сравнение ip отправителя с ip, полученного из резолва а записи мх записи домена отправителя (не знаю как по русски написать)

Код: Выделить всё

condition = ${if match_ip{$sender_host_address}{${lookup dnsdb{>:a=${lookup dnsdb{>: mxh=$sender_address_domain}}}}}{yes}{no}}
дает ложные срабатывания, например у того же yandex - H=forward20.mail.yandex.net [95.108.253.145]

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-09 19:47:48

#сравнение ip отправителя с ip, полученного из резолва а записи мх записи домена отправителя (не знаю как по русски написать)

Код: Выделить всё

condition = ${if match_ip{$sender_host_address}{${lookup dnsdb{>:a=${lookup dnsdb{>: mxh=$sender_address_domain}}}}}{yes}{no}}
дает ложные срабатывания, например у того же yandex - H=forward20.mail.yandex.net [95.108.253.145]
Вообще жаль, что это проверка дает ложные срабатывания, например:
В логах часто видно вот что:

Код: Выделить всё

 H=(42.114.147.252) [42.114.147.252]:23359 I=[192.168.121.33]:25 F=<wFgzh6s@yandex.ru> rejected RCPT <pv@moydomen.ru>: HELO 42.114.147.252 is forged;
т.е кто-то представляется yandex, в данном случае видно, что ip явно не яндекса, что не верно оформлен HELO/EHLO, у меня например срезалось на проверке HELO/EHLO, или например далее будет проверка отправителя, которая балы навесит, но а вдруг кто-то все правильно оформит?

Я бы хотел понять - стоит ли проверять ip, который подставляет спамер с доменом, который спамер так же подставляет?
что то типа

Код: Выделить всё

match {$sender_host_address}${lookup dnsdb{>:a=${domain:$h_from:}
хотел бы тут это обсудить ( не сам с собою!) стоит ли и возможно ли делать вот такую еще проверку? Может иными способами?

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-22 20:07:10

Даааа.... Вот интересно у меня наверно вопрос дурацкий и неинтересный или я неинтересный или я неинтересно спрашиваю, что вообще ни кому не интересно?

moury
сержант
Сообщения: 249
Зарегистрирован: 2009-02-06 23:02:40
Откуда: Москва
Контактная информация:

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение moury » 2012-05-28 10:35:49

Вы в одной теме говорите одновременно о двух вопросах: о выявлении спама во время SMTP-сессии и об отладке конкретных правил.

Первый вопрос - весьма важен и всем интересен. Однако. во-первых, переписка каждого домена - уникальна. Во-вторых, спамеры читают те же форумы, что и антиспамеры. Так что универсального набора правил быть не может, а публиковать свой - себе дороже.

Так что если Вы опишете методику, по которой Вы определяете принципы разработки правил антиспама и повышения их эффективности (но без конкретных правил) - все будут Вам благодарны, но ответов - опять же - будет мало.
Сисадмин - вождь апачей

Stason
ефрейтор
Сообщения: 51
Зарегистрирован: 2009-04-28 13:15:04

Re: Exim: Spam и формальные признаки сообщения.

Непрочитанное сообщение Stason » 2012-05-31 14:02:04

Эх ваш ответ - как правда против которой не попрешь...
Но где же тогда обсуждать практические принципы разработки антиспамам правил, которые получаются от предлагаемых методик, как не тут?