Alex 'AdUser' Z
9 years ago
3 changed files with 285 additions and 1 deletions
@ -0,0 +1,283 @@
|
||||
--- |
||||
title: Почтовый шлюз: задание со звёздочкой (Донастройка антиспама на примере конкретных писем) |
||||
tags: mail, spam, rspamd, репост |
||||
--- |
||||
|
||||
И в завершение хочу показать несколько примеров писем, и разбор "на что смотреть" и "как ловить". |
||||
Из заголовков ничего не удалял, оно конечно несколько раздувает примеры, зато даёт реальное представление о типовом письме. |
||||
|
||||
--- |
||||
|
||||
Пример #1 |
||||
--------- |
||||
|
||||
Образец с тупой vps-спамилки: |
||||
|
||||
Envelope-to: atv@example.com |
||||
Delivery-date: Mon, 22 Feb 2016 07:51:44 +1000 |
||||
Received: from s18200321.onlinehome-server.info ([212.227.95.64]) |
||||
by relay.example.com with esmtp (Exim 4.86) |
||||
(envelope-from <krylov.408@mail.ru>) |
||||
id 1aXbup-00062J-8c |
||||
for atv@example.com; Mon, 22 Feb 2016 07:51:44 +1000 |
||||
Received: by s18200321.onlinehome-server.info (Postfix, from userid 10006) |
||||
id 047B939C0923C; Sun, 21 Feb 2016 15:14:20 -0600 (CST) |
||||
To: atv@example.com |
||||
Subject: =?utf-8?B?0J3QsNGB0YfQtdGCINGB0LXRgNGC0LjRhNC40LrQsNGC0LAg0L3QsCDQktCw0YjRgyDQv9GA0L7QtNGD0LrRhtC40Lg=?= |
||||
X-PHP-Originating-Script: 10006:hostdata111.php |
||||
From: =?utf-8?B?0JDQu9C10LrRgdCw0L3QtNGAICjQodC10YDQstC40YEg0YHQtdGA0YLQuNGE0LjQutCw0YbQuNC4KQ==?= <krylov.408@mail.ru> |
||||
Subject: =?utf-8?B?0J3QsNGB0YfQtdGCINGB0LXRgNGC0LjRhNC40LrQsNGC0LAg0L3QsCDQktCw0YjRgyDQv9GA0L7QtNGD0LrRhtC40Lg=?= |
||||
MIME-Version: 1.0 |
||||
Content-Type: text/plain; charset=UTF-8; |
||||
Content-Transfer-Encoding: base64 |
||||
Message-Id: <20160221211420.047B939C0923C@s18200321.onlinehome-server.info> |
||||
Date: Sun, 21 Feb 2016 15:14:20 -0600 (CST) |
||||
X-ACL-Warn: "SPF softfail, greylisted" |
||||
X-Spam-Status: Yes |
||||
X-Spam-Score: 10.9 (++++++++++) |
||||
X-Spam-Report: Action: add header |
||||
Symbol: IP_SCORE(0.18) |
||||
Symbol: BROKEN_HEADERS(1.00) |
||||
Symbol: MIME_GOOD(-0.10) |
||||
Symbol: HEADER_FORGED_MAILRU_FROM(5.00) |
||||
Symbol: HEADER_MAILER_PHP_GENERIC(2.00) |
||||
Symbol: RBL_MAILSPIKE_BAD(1.00) |
||||
Symbol: BAYES_SPAM(1.82) |
||||
Message-ID: 20160221211420.047B939C0923C@s18200321.onlinehome-server.info |
||||
|
||||
Здесь всё просто: |
||||
|
||||
- характерное helo. Такое или регистрируется пачками или ломается готовое на вордпрессе. Рассчитано на "разослать побольше и побыстрее, пока не грохнули по абузе" |
||||
- характерные заголовки от php |
||||
- с доменом отправителя сильно не заморачиваются: берётся популярный mail.ru, нет админа который будет его банить. |
||||
|
||||
Решение простое: шаблон ``s[0-9]+\.onlinehome-server\.info`` -- в баню. Если владелец vps'а планирует с него рассылать почту - то не обломится сменить. |
||||
Вообще, там уже есть шаблоны, которые дают отлуп на типовые комбинации типа ``vps[0-9]+`` в helo, но здесь оно не сработало. |
||||
|
||||
``HEADER_FORGED_MAILRU_FROM`` -- собственная разработка. |
||||
|
||||
Пример #2 |
||||
--------- |
||||
|
||||
Ниже приведены 2 образца писем: спам, прикидывающийся яндексом и нормальное письмо с яндекса. |
||||
|
||||
Envelope-to: user@example.com |
||||
Delivery-date: Tue, 16 Feb 2016 21:35:14 +1000 |
||||
Received: from [193.124.178.2] (helo=worldcrisis.ru) |
||||
by relay.example.com with smtp (Exim 4.86) |
||||
(envelope-from <ot-ingeneer@yandex.ru>) |
||||
id 1aVduS-000DlE-Qp |
||||
for user@example.com; Tue, 16 Feb 2016 21:35:14 +1000 |
||||
Message-ID: <ED1759DABC685B18C4C1883074CE5361@yandex.ru> |
||||
Reply-To: =?windows-1251?B?0O7x8uX17eDk5+7w?= <ot-ingeneer@yandex.ru> |
||||
From: =?windows-1251?B?0O7x8uX17eDk5+7w?= <ot-ingeneer@yandex.ru> |
||||
To: <user@example.com> |
||||
Subject: =?windows-1251?B?3erx7+Xw8ujn4CDv8O7s4eXn7u/g8e3u8fLo?= |
||||
Date: Tue, 16 Feb 2016 14:35:06 +0300 |
||||
MIME-Version: 1.0 |
||||
Content-Type: multipart/mixed; boundary="0028a225f2c90e0631e74e42f2bf" |
||||
Disposition-Notification-To: <ot-ingeneer@yandex.ru> |
||||
X-ACL-Warn: "Bad rev hostname (missing)" |
||||
X-ACL-Warn: "SPF softfail, greylisted" |
||||
X-Spam-Status: Yes |
||||
X-Spam-Score: 10.5 (++++++++++) |
||||
X-Spam-Report: Action: add header |
||||
Symbol: ONCE_RECEIVED(3.00) |
||||
Symbol: HFILTER_HOSTNAME_UNKNOWN(4.00) |
||||
Symbol: BROKEN_HEADERS(1.00) |
||||
Symbol: MIME_GOOD(-0.10) |
||||
Symbol: RBL_SORBS_RECENT(1.50) |
||||
Symbol: DMARC_POLICY_SOFTFAIL(1.10) |
||||
Symbol: IP_SCORE(0.00) |
||||
Message-ID: ED1759DABC685B18C4C1883074CE5361@yandex.ru |
||||
|
||||
На что можно обратить внимание: |
||||
|
||||
* этому письму не хватает одного балла для отлупа (проходной балл: ниже 11.5, сейчас - 10.5) |
||||
* домен зарегистрирован недавно (``RBL_SORBS_RECENT``) |
||||
* не признаков пересылки (``ONCE_RECEIVED``) |
||||
* нет dns-ptr для хоста (``HFILTER_HOSTNAME_UNKNOWN``) |
||||
* в helo нет никакого намёка на яндекс |
||||
* присутствует запрос уведомления (Disposition-Notification-To) |
||||
* "Кому" выглядит подозрительно (нет описательной части, в этом случае адрес пишется без <>) |
||||
* DMARC яндекса намекает, что это не его письмо (``DMARC_POLICY_SOFTFAIL``) |
||||
|
||||
Далее, валидное письмо от яндекса: |
||||
|
||||
Envelope-to: user@example.com |
||||
Delivery-date: Tue, 16 Feb 2016 18:43:13 +1000 |
||||
Received: from forward10o.cmail.yandex.net ([37.9.109.60]) |
||||
by relay.example.com with esmtp (Exim 4.86) |
||||
(envelope-from <a3315882@yandex.ru>) |
||||
id 1aVbE0-0008zp-My |
||||
for user@example.com; Tue, 16 Feb 2016 18:43:13 +1000 |
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; |
||||
t=1455612184; bh=xnE5qv8t++sZTBq4cdaUHABDW5pRpnDipt7Ya4T8YCI=; |
||||
h=From:To:Subject:Date; |
||||
b=ImXxDJBNMet63EPHoq+N2sUWkLwO443b307O0PLvQODSoTbtXJDRINksUQqW94JIc |
||||
EYjJ1lxVpznRJAqiEqiYcg3F7ia4NK410kNDnXqdMYZ/SAM0p/D1WRBF7J9IUJDe9s |
||||
xAfPSOBA42x3BcBGXivmKXhTo1uUDgIyXtbfUS0Y= |
||||
Received: by web24o.yandex.ru with HTTP; |
||||
Tue, 16 Feb 2016 11:42:59 +0300 |
||||
From: =?koi8-r?B?8MHSyM/Nxc7LzyDhzsHT1MHTydE=?= <a3315882@yandex.ru> |
||||
Envelope-From: a3315882@yandex.ru |
||||
To: =?koi8-r?B?8c4g88XNxc7P18neIOHMxcvTwc7E0s/X08vJyg==?= <admin@intermost.ru>, |
||||
Subject: =?koi8-r?B?8/T87PM6INDP18XT1MvB?= |
||||
MIME-Version: 1.0 |
||||
Message-Id: <2356061455612179@web24o.yandex.ru> |
||||
X-Mailer: Yamail [ http://yandex.ru ] 5.0 |
||||
Date: Tue, 16 Feb 2016 11:42:59 +0300 |
||||
Content-Type: multipart/mixed; |
||||
boundary="----==--bound.235607.web24o.yandex.ru" |
||||
X-Spam-Status: Yes |
||||
X-Spam-Score: 6.3 (++++++) |
||||
X-Spam-Report: Action: add header |
||||
Symbol: DMARC_POLICY_ALLOW(-0.50) |
||||
Symbol: MIME_GOOD(-0.10) |
||||
Symbol: R_SPF_ALLOW(0.00) |
||||
Symbol: R_DKIM_ALLOW(0.00) |
||||
Symbol: RCVD_IN_DNSWL_LOW(0.00) |
||||
Symbol: BROKEN_HEADERS(1.00) |
||||
Symbol: IP_SCORE(0.00) |
||||
Symbol: MIME_HTML_ONLY(1.00) |
||||
Symbol: BAYES_SPAM(4.92) |
||||
Symbol: RWL_MAILSPIKE_VERYGOOD(0.00) |
||||
Message: (SPF): spf allow |
||||
Message-ID: 2356061455612179@web24o.yandex.ru |
||||
|
||||
Что здесь можно отметить: |
||||
|
||||
* есть DKIM (DKIM-Signature), но на его наличие/отсутствие нельзя полагаться |
||||
* есть специфичный X-Mailer, но это ничего не даёт (в данном случае письмо написано через браузер) |
||||
* в helo/dns-ptr есть "yandex". Это уже серьёзно, можно использовать. |
||||
|
||||
К сожалению мы не можем полагаться на softfail dmarc'а. |
||||
Так уж сложилось, что админы очкуют включать строгий режим spf и всего остального. |
||||
|
||||
Что можно сделать на основе отмеченного выше: |
||||
|
||||
Вариант первый - учитывать наличие "yandex" в helo/ptr. Это будет работать, но: яндекс может переделать dns в любой момент, а helo подделывается без проблем. |
||||
|
||||
Вариант второй - считать softfail - fail'ом. Нарушает стандарт, и кроме того яндекс тоже может налажать с настройкой у себя. Пример - timeweb, где в spf сейчас упомянуты 4 из 8 его /24 блоков. |
||||
|
||||
Вариант третий - смотреть на наличие нескольких признаков. Причём постараться сделать так, чтоб применялось не только к яндексу, но и всем остальным доменам. |
||||
|
||||
Для этого можно использовать композиты из rspamd. Правило будет выглядеть примерно так: |
||||
|
||||
composite { |
||||
name = "CMP_ZOMBIE_HOST"; |
||||
expression = "ONCE_RECEIVED & (HFILTER_HOSTNAME_UNKNOWN | RBL_SORBS_RECENT)"; |
||||
} |
||||
|
||||
Учтите, что при совпадении из итогового score убираются баллы для всех "символов", используемых в композите, а вместо них добавляется score самого композита. |
||||
По этой причине не имеет смысла ставить score для композита меньше, чем сумма score компонентов, используемых в нём. |
||||
Разбивка по символам из первого примера после добавления композита. |
||||
|
||||
X-Spam-Score: 12.0 (++++++++++) |
||||
X-Spam-Report: Action: reject |
||||
Symbol: CMP_ZOMBIE_HOST(10.0) |
||||
Symbol: BROKEN_HEADERS(1.00) |
||||
Symbol: MIME_GOOD(-0.10) |
||||
Symbol: DMARC_POLICY_SOFTFAIL(1.10) |
||||
Symbol: IP_SCORE(0.00) |
||||
|
||||
Пример #3 |
||||
--------- |
||||
|
||||
Envelope-to: andrey@example.com |
||||
Delivery-date: Wed, 24 Feb 2016 16:52:17 +1000 |
||||
Received: from webmail.jaivalores.com ([190.99.97.33]) |
||||
by relay.example.com with esmtp (Exim 4.86) |
||||
(envelope-from <mrv@e-kontakti.fi>) |
||||
id 1aYTIz-000NEU-PN |
||||
for andrey@example.com; Wed, 24 Feb 2016 16:52:17 +1000 |
||||
Received: from localhost (localhost [127.0.0.1]) |
||||
by webmail.jaivalores.com (Postfix) with ESMTP id A32AB1008B1B4; |
||||
Wed, 24 Feb 2016 03:46:19 -0300 (ART) |
||||
Received: from webmail.jaivalores.com ([127.0.0.1]) |
||||
by localhost (webmail.jaivalores.com [127.0.0.1]) (amavisd-new, port 10032) |
||||
with ESMTP id a_uAdk3M_wcO; Wed, 24 Feb 2016 03:46:18 -0300 (ART) |
||||
Received: from localhost (localhost [127.0.0.1]) |
||||
by webmail.jaivalores.com (Postfix) with ESMTP id 205CD10067F7A; |
||||
Wed, 24 Feb 2016 03:46:18 -0300 (ART) |
||||
X-Virus-Scanned: amavisd-new at jaivalores.com |
||||
Received: from webmail.jaivalores.com ([127.0.0.1]) |
||||
by localhost (webmail.jaivalores.com [127.0.0.1]) (amavisd-new, port 10026) |
||||
with ESMTP id S7yoVxtnqn1O; Wed, 24 Feb 2016 03:46:17 -0300 (ART) |
||||
Received: from fuzik-i (unknown [172.16.210.2]) |
||||
by webmail.jaivalores.com (Postfix) with SMTP id 836B310067F4D; |
||||
Wed, 24 Feb 2016 03:45:12 -0300 (ART) |
||||
Message-ID: <888D3B6863B7981BC7C28B36126DFDB6@e-kontakti.fi> |
||||
From: =?windows-1251?B?yu7x8ujtINHl8OPl6Q==?= <mrv@e-kontakti.fi> |
||||
To: =?windows-1251?B?wOvr4CDC6Ory7vDu4u3g?= <igla@rock.ru> |
||||
Subject: =?windows-1251?B?zeDr7uPu7uHr7ubl7ejlICDw7vHx6Onx6uj1?= |
||||
=?windows-1251?B?ICAsICDo7e7x8vDg7e379SDv5fDl4u7n9+jq?= |
||||
=?windows-1251?B?7uIg6CDy8ODt8e/u8PLt7i396vHv5eTo9uju?= |
||||
=?windows-1251?B?7e379SAg?= |
||||
Date: Wed, 24 Feb 2016 09:44:37 +0300 |
||||
MIME-Version: 1.0 |
||||
Content-Type: multipart/mixed; boundary="3fba5f4ee74af078ab79c87b5149" |
||||
X-Spam-Status: Yes |
||||
X-Spam-Score: 9.5 (+++++++++) |
||||
X-Spam-Report: Action: add header |
||||
Symbol: FORGED_RECIPIENTS(4.00) |
||||
Symbol: BROKEN_HEADERS(1.00) |
||||
Symbol: MIME_GOOD(-0.10) |
||||
Symbol: BAYES_SPAM(4.56) |
||||
Message-ID: 888D3B6863B7981BC7C28B36126DFDB6@e-kontakti.fi |
||||
|
||||
This is a multi-part message in MIME format. |
||||
|
||||
--3fba5f4ee74af078ab79c87b5149 |
||||
Content-Type: multipart/alternative; boundary="5dc500c2a88f3b25fa6fd09178ed" |
||||
|
||||
|
||||
--5dc500c2a88f3b25fa6fd09178ed |
||||
Content-Type: text/plain; charset="windows-1251" |
||||
Content-Transfer-Encoding: quoted-printable |
||||
|
||||
=C8=ED=F4=EE=F0=EC=E0=F6=E8=FF =E2=EE =E2=EB=EE=E6=E5=ED=ED=EE=EC =F4=E0=E9= |
||||
=EB=E5 |
||||
|
||||
--5dc500c2a88f3b25fa6fd09178ed |
||||
Content-Type: text/html; charset="windows-1251" |
||||
Content-Transfer-Encoding: quoted-printable |
||||
|
||||
<HTML><HEAD> |
||||
<META http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dwindows= |
||||
-1251"> |
||||
</HEAD> |
||||
<BODY bgColor=3D#ffffff> |
||||
<DIV align=3Dleft><FONT size=3D2 face=3DArial>=C8=ED=F4=EE=F0=EC=E0=F6=E8= |
||||
=FF =E2=EE =E2=EB=EE=E6=E5=ED=ED=EE=EC=20 |
||||
=F4=E0=E9=EB=E5</FONT></DIV></BODY></HTML> |
||||
|
||||
--5dc500c2a88f3b25fa6fd09178ed-- |
||||
|
||||
--3fba5f4ee74af078ab79c87b5149 |
||||
Content-Type: application/msword; name="=?windows-1251?B?wu3l+O3l/eru7e7s6Pfl8erg/yDk5f/y5ev8?= |
||||
=?windows-1251?B?7e7x8vwsIMLg6/7y7e7lIPDl4/Pr6PDu4uDt?= |
||||
=?windows-1251?B?6OUsIMHz9fP35fIuZG9j?=" |
||||
Content-Transfer-Encoding: base64 |
||||
Content-Disposition: attachment; filename="=?windows-1251?B?wu3l+O3l/eru7e7s6Pfl8erg/yDk5f/y5ev8?= |
||||
=?windows-1251?B?7e7x8vwsIMLg6/7y7e7lIPDl4/Pr6PDu4uDt?= |
||||
=?windows-1251?B?6OUsIMHz9fP35fIuZG9j?=" |
||||
|
||||
Здесь мы видим вполне валидный хост, который сам принял письмо от какого-то явного пидараса |
||||
``Received: from fuzik-i (unknown [172.16.210.2])``, а теперь пытается его переслать нам. |
||||
|
||||
В заголовках зацепиться особо не за что, поэтому следует присмотреться к самому контенту письма. |
||||
|
||||
В теле письма минимум текста "Информация во вложенном файле", и одно вложение со скучным названием "Внешнеэкономическая деятельность, Валютное регулирование, Бухучет.doc". Такое шлют десятками в день и больше по работе. |
||||
|
||||
Однако, мы точно знаем, что это спам. Поэтому по вложению мы и сможем дать отлуп. Здесь сработает механизм fuzzy-хешей, которые умеет считать rspamd. Добавляется оно примерно так: |
||||
|
||||
HOST="127.0.0.1" |
||||
PASS="123456789" |
||||
rspamc -h "$HOST" -P "$PASS" -f 1 -w 5 fuzzy_add "/path/to/file/with/attachment" |
||||
|
||||
Нужное значение ``-f`` берётся из конфига: ``FUZZY_DENIED { max_score = 20.0; >>> flag = 1; <<< }`` |
||||
|
||||
--- |
||||
|
||||
[К оглавлению](/articles/2016/04/10/hardcore-mail-relay-1/) |
Loading…
Reference in new issue