Страница 1 из 1

Exim From: header spam

Добавлено: 2009-07-28 18:56:29
kerilka
приветствую всех, господа.

в последнее время полюбилось спамерам юзать в поле 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 из пакета, но ничё дельного там не обнаружил, по крайней мере не нашёл, за что зацепиться...

Re: Exim From: header spam

Добавлено: 2009-07-28 19:38:17
kerilka
еще немного пошерстил инет - скажите - верна ли следующая конструкция???

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 9:12:10
CrazyPilot
А может лучше так?

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

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.

Re: Exim From: header spam

Добавлено: 2009-07-29 9:26:45
kerilka
не исключено, что Вы окажетесь правы, хотя мой вариант тоже действенный.

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 9:32:41
CrazyPilot

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

$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 =)

Re: Exim From: header spam

Добавлено: 2009-07-29 9:41:31
kerilka
весьма благодарен за ссылку. всё нужное, как всегда, оказалось под рукой, только вот глаза не наткнулись на это.

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 9:55:16
CrazyPilot
Только есть ли смысл проверять 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 чего только не пишут...

Re: Exim From: header spam

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

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

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 10:34:02
CrazyPilot
Ну, я просто переписал acl, который вы привели выше.

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 10:46:47
kerilka
ну почему же? разве не логично, что в поле from не должно ну никак быть моего домена "не от моих" пользователей?

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

Re: Exim From: header spam

Добавлено: 2009-07-29 10:58:59
CrazyPilot
Ээээ, eq ведь сравнивает строки, но никак не подстроки?

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

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

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

Re: Exim From: header spam

Добавлено: 2009-07-29 11:19:25
kerilka
почему безсмысленно?

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

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 сравнивает только целые строки?

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

Re: Exim From: header spam

Добавлено: 2009-07-29 11:32:03
CrazyPilot
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.


Re: Exim From: header spam

Добавлено: 2009-07-29 11:50:32
kerilka
что-то вы меня совсем запутали.. тогда как может срабатывать это правило, если оно в принципе неверно?

Re: Exim From: header spam

Добавлено: 2009-07-29 12:03:00
CrazyPilot
Если было это правило

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

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 отрабатывают :)

Re: Exim From: header spam

Добавлено: 2009-07-29 12:38:13
kerilka
натолкнули Вы меня на трезвую идею, действительно, заголовок From: появляется на этапе передачи данных, тобишь после DATA.

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

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

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