Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Exim: если спамеры указывают "Return-path" один (MAIL FROM), а заголовок "From" - другой кратко

Практика



На своей шкуре я прочуствовал одну хитрость спамеров: когда они в сессии SMTP принимающему серверу в команде "MAIL FROM" заявляют один обратный адрес (например, реальный), а в теле письма, в заголовке "From" указывают обратный адрес тот-же, на который отправляют письмо (или просто из Вашего домена).

Получается, что:

а) Сам сервер SMTP, принимающий почту (любой, не обязательно Exim) - видит, что письмо пришло не с его внутренного домена (по записи MAIL FROM), SMTP-авторизацию при этом не требует и принимает письмо.

б) А демон SpamAssassin потом, разбирая письмо, видит заголовок "From = адрес из Вашего домена" и, т.к. у большинства админов в SpamAssassin их собственный же домен находится в белом списке (т.е. почта, у которой домен From - это почтовый домен организации), то SpamAssasin эту почту пропускает.


Вот пример. Для примера домен Вашей организации: myfirm.ru. В SpamAssassin прописано, что вся почта из домена myfirm.ru - белая, т.е. ее даже проверять не надо.

Приходит спам на почту manager@myfirm.ru. И выглядит все примерно так:

1) Приходит письмо с
SMTP "MAIL FROM: ";
Header "From: ";

2) Т.к. домен "kakoitodomen.ru" не принадлежит к тем доменам, которые обслуживает сам сервер (т.е. это не "myfirm.ru"), и т.к. сервер в этот момент еще не видит тела письма, то он пропускает все это без SMTP-авторизации как обычное входящее письмо откуда-то.

3) Получив письмо, сервер передает его в SpamAssassin для проверки.

4) SpamAssassin, увидев в заголовке "From = manager@myfirm.ru" - сверяет его с белым списком и видит, что письма от "*@myfirm.ru" - даже проверять не надо. На то, что при этом письмо на самом деле пришло с ящика, указанного в заголовке "From" - SpamAssassin внимания не обращает.

5) SpamAssassin говорит, что письмо не спам (основываясь на данных From) и сервер SMTP это письмо успешно ложит в папку входящих для manager@myfirm.ru.


В остатке имеем: письмо является спамом, спамер обманул как сервер SMTP, так и SpamAssassin, и письмо успешно доставлено во входящие человеку. Даже не проверясь!


Давайте научим сервер Exim (я тут привожу конфиг именно для него) сравнивать эти значения и отвергать письмо в случае, если:

а) Письмо пришло с домена, обслуживаемого сервером (внутренного домена);
б) В теле письмо домены полей From и Return-path неравны:

в секцию acl_check_data добавляем такую запись:

# Обламываем приход письма, если Return-Path (MAIL-FROM) домен !=
# домену заголовка From

deny message = SPAM! domain is not equals to domain
# Сравниваем домены From и Return-path
condition = ${if eq{${uc:${domain:$sender_address}}} \
{${uc:${domain:$rh_From:}}} {no}{yes}}
# Поле From не должно быть пустым
condition = ${if eq{$rh_From:}{} {no}{yes}}
# Сравниваем, что сервер обслуживает этот домен
condition = ${lookup mysql{SELECT domain FROM domains \
WHERE domain='${domain:$rh_From:}' \
AND active='1'}{yes}{no}}


В этом куске кода видно, что последнее сравнение основывается на MySQL запросе. Это справедливо для Exim, настроенного с использованием MySQL базы данных для хранения информации о пользователях и обслуживаемых доменах.

В конкретно данном случае, условие срабатывает, если MySQL в базе данных, в таблице "domains", в столбце "domain" находит имя домена, совпадающее с доменом из заголовка "From", при этом столбец "Active" должен содержать "1" - т.е. работа с этим доменом не заблокирована.

Для Вашей конкретной конфигурации, конечно, последнее условие может слегка отличаться. Его суть - это проверить, что домен из заголовка "From" обслуживается данным сервером.

Например, если сервер обслуживает всего один домен и не настроен на хранение информации о доменах в MySQL, весь блок может выглядеть так:

# Обламываем приход письма, если Return-Path (MAIL-FROM) домен !=
# домену заголовка From

deny message = SPAM! domain is not equals to domain
# Сравниваем домены From и Return-path
condition = ${if eq{${uc:${domain:$sender_address}}} \
{${uc:${domain:$rh_From:}}} {no}{yes}}
# Поле From не должно быть пустым
condition = ${if eq{$rh_From:}{} {no}{yes}}
# Сравниваем, что сервер обслуживает этот домен
condition = ${if eq{${uc:${domain:$rh_From:}}}{myfirm.ru}{yes}{no} }


Вот таким образом мы обломим у спамеров возможность обманывать наши сервера и присылать свой мусор.

Вау!! 😲 Ты еще не читал? Это зря!

создано: 2017-05-10
обновлено: 2021-07-14
1397



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Компьютерные сети

Термины: Компьютерные сети