Exim From: header spam

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-28 18:56:29

приветствую всех, господа.

в последнее время полюбилось спамерам юзать в поле from: моего же юзера, на которого принимается письмо.

написал следующую проверку в acl_check_rcpt:

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

     deny message = txttxttxt
          !hosts = +relay_from_hosts
          !authenticated = *
          senders = *@mydomain.com
на некоторые попытки таким образом прислать мне почту - они действительно получают отлуп.

НО: некоторые письма проходят.. детальный анализ показал следующее

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

Received: from [94.123.187.162] (helo=MJXLTVWIV)
        by myhostname with esmtp (Exim 4.69 (FreeBSD))
        (envelope-from <seamiero@seo.com.au>)
        id 1MVji9-0000Fc-L5; Tue, 28 Jul 2009 13:15:13 +0300
Received: from 94.123.187.162 by aspmx2.googlemail.com; Tue, 28 Jul 2009 13:13:38 +0200
Return-Path: <seamiero@seo.com.au>
Reply-To: <seamiero@seo.com.au>
From: <user@mydomain.com>
To: <user@mydomain.com>
Subject: Never stay undersized!
Date: Tue, 28 Jul 2009 14:13:38 +0300
Message-ID: <107812466.52474306146169@seo.com.au>
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="----=_NextPart_000_0045_01CA0FAC.F6E36650"
X-Mailer: The Bat! (v3.51) Educational
X-SA-Exim-Connect-IP: 94.123.187.162
X-SA-Exim-Mail-From: seamiero@seo.com.au
и т.д.
я так полагаю, senders = *mydomain.com смотрится непосредственно из заголовка Reply-to...
подскажите, каким образом можно проверить заголовок From: на наличие моего домена?
сегодня перечитывал specifications.txt из пакета, но ничё дельного там не обнаружил, по крайней мере не нашёл, за что зацепиться...

Хостинговая компания 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/

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-28 19:38:17

еще немного пошерстил инет - скажите - верна ли следующая конструкция???

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

deny message = txttxttxt
!hosts = +relay_from_hosts
!authenticated = *
senders = *@mydomain.com
condition = ${if eq{$h_From:}{\Nmydomain.com$\N}{no}{yes}}

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 9:12:10

А может лучше так?

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

deny !authenticated= *
        condition       = ${if eq{$sender_address_domain}{mydomain.ru}{yes}{no}}
        message         = "Sorry, i don't accept message from my domain"
У меня так работает, на внешнем релее. В принципе у меня конечно вообще авторизовавшихся пользаков на этом почтовике не может быть, а почта с mydomain.ru принимается только с relay_from_hosts.

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 9:26:45

не исключено, что Вы окажетесь правы, хотя мой вариант тоже действенный.

однако, и тут не совсем понятно, что есть $sender_address_domain, толи это поле берется из From:, а может и из envelope-from, Return-path или Reply-to:

если бы я где-то нашел список и описание всех этих переменных, но, к сожалению, вероятно плохо ищу, или ищу не там...

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 9:32:41

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

$sender_address
    When a message is being processed, this variable contains the sender’s address that was received in the message’s envelope. The case of letters in the address is retained, in both the local part and the domain. For bounce messages, the value of this variable is the empty string. See also $return_path.
$sender_address_domain
    The domain portion of $sender_address.
То есть следует что переменная получает значение из конверта. (Честно говоря, кто бы сомневался?). То есть из envelope-from.
А список переменных и их описание есть знаете где? Вы не поверите, в доке exim'a =)

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 9:41:31

весьма благодарен за ссылку. всё нужное, как всегда, оказалось под рукой, только вот глаза не наткнулись на это.

из приведенного Вами описания, видно, что письмо, чьи заголовки описаны в 1 посте, прошло бы ко мне.
в моём варианте, как раз обрабатывается заголовок From:, где и находится нужный мне домен, по которому я рублю подобные письма.

благодарю за ответы, можно закрывать топ.

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 9:55:16

Только есть ли смысл проверять senders на ваш домен?

Если уже делать, то что-то типа этого (имхо):

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

deny message = "Bye bye"
!hosts = +relay_from_hosts
!authenticated = *
condition = ${if and{\
                                {eq{$h_From:}{\Nmydomain.com$\N}}\
                                {!match_domain{$sender_address_domain}{+local_domains}}\
                             }{yes}{no}\
                    }
То есть если кто-то прислал письмо с левого домена, но в h_From указал наш домен - до свидания.
Только вот у себя я не видел такого, честно говоря. В h_From чего только не пишут...

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 10:15:48

не совсем понимаю - для чего сравнивать домен, с которого прислано на самом деле с тем, что в поле h_From: ?
я считаю, что настоящие (non-spam) письма, врядли в заголовке h_From: содержат пользователя из моего домена.
мои же пользователи, будучи авторизованными, или находящиеся в +relay_from_hosts - до этой проверки даже не дойдут.

не обращайте внимания на

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

!hosts = +relay_from_hosts
!authenticated = *
у меня разрешающие правила стоят выше, это на всякий случай, для подстраховки, ежели я чёто буду менять, чтобы не долбиться в пустую, почему срабатывают правила... :)

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 10:34:02

Ну, я просто переписал acl, который вы привели выше.

Смысл в том, чтобы дропать письма с чужих доменов, у которых в from стоит адрес вашего домена. Те же яйца, только сбоку.
Как я понимаю, именно в этом была ваша проблема. Либо я чего-то не понял...

Хотя вообще сравнивать $h_From просто с доменом бессмыслица какая-то.

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 10:46:47

ну почему же? разве не логично, что в поле from не должно ну никак быть моего домена "не от моих" пользователей?

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

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 10:58:59

Ээээ, eq ведь сравнивает строки, но никак не подстроки?

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

{eq{$h_From:}{\Nmydomain.com$\N}}\
в smtp сессии вряд ли прописывают заголовок from как domain.com? Пишут же %username%@domain.com?

Так что сравнение бессмысленно?

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 11:19:25

почему безсмысленно?

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

2009-07-29 11:11:47 H=host-89-230-65-31.rzeszow.mm.pl [89.230.65.31] I=[myip]:25 F=<reception@mydomain.com> rejected RCPT <reception@mydomain.com>: Fake mydomain.com
Вы хотите сказать, что eq сравнивает только целые строки?

тем более в характере этих писем не предусмотрено указание имени, банально существующий юзер в моем домене.

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 11:32:03

kerilka писал(а):Вы хотите сказать, что eq сравнивает только целые строки?
Ну как бэ

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

[root@flanker /var/log]# exim -be
> ${if eq{user@domain.com}{domain.com}{yes}{no}}
no
> ^C
[root@flanker /var/log]#
Из доки

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

eq {<string1>}{<string2>}, eqi {<string1>}{<string2>}

    The two substrings are first expanded. The condition is true if the two resulting strings are identical. For eq the comparison includes the case of letters, whereas for eqi the comparison is case-independent.


kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 11:50:32

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

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim From: header spam

Непрочитанное сообщение CrazyPilot » 2009-07-29 12:03:00

Если было это правило

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

deny message = txttxttxt
!hosts = +relay_from_hosts
!authenticated = *
senders = *@mydomain.com
condition = ${if eq{$h_From:}{\Nmydomain.com$\N}{no}{yes}}
То правило срабатывало тогда, когда eq возвращал false (а по идее возвращал он его всегда), потому как у if yes и no поменяны местами.
Когда хидер и строка не совпадали, срабатывало условие. Для тех сендеров, которые с вашего домена, но не авторизованные.

В этом случае давался отлуп. Довольно редкий случай, по идее отлул выдавался тем, кто пытался отправить письмо с вашего домена и с внешнего мира.
Муть какая-то в общем :)

Рекомендую вам exim -bh поюзать, проведете эмуляцию smtp сесии с нужного ip, посмотрите как acl отрабатывают :)

kerilka
сержант
Сообщения: 193
Зарегистрирован: 2008-11-18 18:38:48

Re: Exim From: header spam

Непрочитанное сообщение kerilka » 2009-07-29 12:38:13

натолкнули Вы меня на трезвую идею, действительно, заголовок From: появляется на этапе передачи данных, тобишь после DATA.

посему проверка на этапе acl_check_rcpt была по меньшей мере глупостью...

на тестовом стенде сэмулировал полноценную сессию, тобишь включая Date: Message-ID: From: To: и действительно, письмо дальше не пустило.
с моих релеев, чего и следовало ожидать - письмо удачно прошло эти проверки и отправилось в нужный ящик от моего пользователя, из моего домена.

обкатываю сейчас правило, посмотрим, что выйдет :)