Решено: Фильтрация почты в exim по check_helo (почта для зоны .ru приходит с хоста .com)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Доброго дня!
Организации имеется почтовый сервер на базе Exim-а. Со временем увеличиваться количество приходящего спама.
На данный момент спама не много и поэтому ставить SpamAssasin-а или другие подобные средства не очень хочется.
Сейчас я раздумываю насколько правильно, и возможно ли реализовать, отвергать письма по признаку несоответсвия доменов отправителя и почтового сервера. Например:

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

2009-03-20 13:17:56 1LkbnY-0002xb-6n <= kmwwwe@bottegasolidale.com H=mcc-dyn-254-178.kosnet.ru [93.181.254.178] P=esmtp S=3147 id=01c9a95e$47006d00$b2feb55d@kmwwwe from <kmwwwe@bottegasolidale.com> for

Письмо пришло с почтового сервера из домена RU, но отправитель значится в домене COM.
Что посоветуете?
Спасибо.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

поглядите вот тут всякие проверочки acl_check_helo:
http://www.ols.es/exim/acl/helo.acl
думаю - что0нибудь пригодится.

а вообще вам достаточно отрезать всех с числами в helo нафиг и все:

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

           drop message = Invalid HELO/EHLO data
           condition = ${if match {$sender_helo_name}{\N^-?[0-9]+$\N}{yes}{no}}
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Богато, спасибо!
Подобные проверки использую, но одними ими похоже не обойтись.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

попробуйте грейлисты прикрутить - мне очень нравится.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

Greylist - метод борьбы со спамом. При первом обращении неизвестного сервера, его письмо отвергается с кодом нефатальной ошибки 4xx, если отправитель нормальный MTA, то по RFC он должен повторят попытки отправки письма в течении некоторого времени. После заданного времени мой почтовик разрешает данную комбинацию IP_адрес_сервера_отправителя:Емайл_оправителя:Емайл_получателя и письма ходят без задержек.
Если же отправитель является программа рассылки спама, то врядли будет попытка повтора, тем более, что база у спамеров как правило на десятки тысяч разных адресов.

вот отсюда:
http://www.opennet.ru/openforum/vsluhforumID1/53380.html
там и мануальчик (скрипт грейлиста на перле - в дебиане это не страшно, exim-daemon-heavy точно с поддержкой перла собран).
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Сейчас я проверяю так:

Код:

deny message = hostname bad condition = ${if match{$sender_host_name}{adsl|dialup|dial-up|pool|peer|dhcp|pppoe|ppp|dynamic|static|proxy}{yes}{no}} deny message = HELO/EHLO required by SMTP RFC condition = ${if eq{$sender_helo_name}{}{yes}{no}} deny message = HELLO != IP, good by hosts = * : !+relay_from_hosts condition = ${if eq{$sender_helo_name}{$sender_host_address}{true}{false}} deny message = this is my ip, good by hosts = !localhost : !127.0.0.1 : * condition = ${if eq{sender_helo_name}{$interface_address}{yes}{no}} deny message = HELLO condition only numeric, good by hosts = !localhost : !127.0.0.1 : * condition = ${if match {sender_helo_name}{\N^\d+$\N}{yes}{no}} deny message = Broken reverse DNS - no host name found for IP-address $sender_host_address condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}{yes}{no}} deny message = host is listed in $dnslist_domain dnslists = list.dsbl.org : dnsbl.njabl.org : dnsbl.sorbs.net : bl.spamcop.net: sbl.spamhaus.org : cbl.abuseat.org warn set acl_m0 = 60s warn hosts = +relay_from_hosts set acl_m0 = 0s accept domains = +local_domains endpass message = unknow user verify = recipient accept domains = +relay_to_domains endpass message = unroutable address verify = recipient accept hosts = +relay_from_hosts accept authenticated = * deny message = relay not permitted accept

Greylist опосредованный есть, для входящих писем устанавливаю задержку в 60 сек (warn set acl_m0 = 60s).
P.S. Похоже пришло время поглубже изучить Exim.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

Greylist опосредованный есть, для входящих писем устанавливаю задержку в 60 сек (warn set acl_m0 = 60s).

ну - это тоже гут, но не совсем то :-)
я в общем то мало видел спамеров, которые ждут 60с, но имхо послать ошибку 4xx - это намного надежней.
"перезванивать" спамеры очень врятли будут.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Сейчас перечитал http://www.lissyara.su/?id=1210 .
Так и не понял, возможно ли поверять только доменную часть ru, com и т.д., а не company.ru.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

не уверен, но вроде бы встроенными средствами нельзя.
напишите файлик на перле, в него функцию, например cut_zone, которая будет возвращать "ru", "com" и т.п.
в конфиге exim вставте в общую зону:
perl_startup = do '/etc/exim4/script.pl'

вызывать примерно так:
${if match{${perl{cut_zone}{ $sender_host_address }}}}
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Примерно в этом направление и двигаюсь.
Но я думал это делать через регулярные выражения. По идее после разбора выражения заполняются переменные $0, $1, ..., $n для распознанных частей. Осталось только сообразить выражение для выдирания домена, примерно \w+$. Главное, что бы оно всегда заполняло определенную переменную, скажем $1.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Доброго дня!
Имеется спам следующего вида:

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

2009-03-23 00:52:31 1LlVao-0005C3-Bj <= cmlimdwvbolo@bodyfixer.com H=201-2-233-74.fnsce703.dsl.brasiltelecom.net.br [201.2.233.74] P=esmtp S=2356 id=01c9ab1f$5975d480$4ae902c9@cmlimdwvbolo from <cmlimdwvbolo@bodyfixer.com>
2009-03-23 00:55:27 1LlVde-0005CJ-PU <= oxuckrarbbi@bluedolphinessences.com H=mt1-to-gw.websky.pl [85.232.247.70] P=esmtp S=3870 id=01c9ab41$4a078300$46f7e855@oxuckrarbbi from <oxuckrarbbi@bluedolphinessences.com>
2009-03-23 14:33:02 1LliOr-0006Fb-1W <= vmirjjnvufi@bonfield.com H=apn-94-44-29-25.vodafone.hu (gouranga) [94.44.29.25] P=esmtp S=3979 id=01c9abb3$7fe54f80$191d2c5e@vmirjjnvufi from <vmirjjnvufi@bonfield.com>

Его роднит то, что домен, я говорю о доменах RU, COM и т.д., адресата не соответствует домену отправляющего хоста.
Думаю применить такую проверку:

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

deny message = No spam
condition = ${if match {$sender_host_name}{\N\w{2,4}$\N}}
condition = ${if match {$sender_address_domain}{\N\w{2,4}$\N}}
condition = ${if !eq {\$1}{\$2}}

Корректно ли я написал проверки? Меня беспокоят переменные и несколько condition, хотелось бы их объединить в один.
Почитав forum.lissyara.su решил, что можно объединить condition:

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

deny message = No spam
condition = ${if !eq {match {$sender_host_name}{\N\w{2,4}$\N}}{match {$sender_address_domain}{\N\w{2,4}$\N}}}

Но опасения по поводу проверки все равно остаются.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

может быть так правильней?

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

condition = ${if or {match {$sender_host_name}{\N\w{2,4}$\N}}{match {$sender_address_domain}{\N\w{2,4}$\N}} {yes}{no}}
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Спасибо за интерес, но это не верно, я думаю.
Вы проверяете условием OR и оно всегда будет YES.

12:35 возникли проблемы, в логах:

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

2009-03-25 12:28:02 H=mail.trytek.ru (post.trytek.ru) [195.2.238.3] F=<vektor@trytek.ru> temporarily rejected RCPT <user@company.ru>: invalid "condition" value "true{match {trytek.ru}{\.\w{2,4}$}}{yes}{no}}"

Буду разбираться дальше.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Настроил.
Изменил проверку на:

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

deny    message         =       I think this is SPAM
condition       =       ${if !eq {${extract{-1}{.}{$sender_host_name}}}{${extract{-1}{.}{$sender_address_domain}}}{yes}{no}}

В логах:

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

2009-03-26 12:45:32 H=cust-107-10.tsnet.ru [87.244.10.107] F=<laqigchyojqm@boptart.com> rejected RCPT <user@company.ru>: I think this is SPAM
2009-03-26 12:45:32 H=cust-107-10.tsnet.ru [87.244.10.107] F=<laqigchyojqm@boptart.com> rejected RCPT <user@company.ru>: I think this is SPAM
2009-03-26 12:45:32 H=cust-107-10.tsnet.ru [87.244.10.107] F=<teknique@tekniquethekingpin.com> rejected RCPT <user@company.ru>: I think this is SPAM
2009-03-26 12:45:32 H=cust-107-10.tsnet.ru [87.244.10.107] F=<teknique@tekniquethekingpin.com> rejected RCPT <user@company.ru>: I think this is SPAM
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение Ленивая Бестолочь »

ну здорово - поздравляю ;-)
про OR надо мне почитать....
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Решено: Фильтрация почты в exim по check_helo

Сообщение IMB »

Спасибо. Смущает только, что этой проверкой я могу резать мульдоменные системы.
Ведь могу же я иметь сервер в USA и держать на нем свой сайт из зоны RU? Интересно, какое имя будет у отправляющего сервера? Хотя думается мне у почтового сервера можно задать отдача корректного FQDN.
Спасибо сказали: