На своей шкуре я прочуствовал одну хитрость спамеров: когда они в сессии 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: <yablinspamervashe@kakoitodomen.ru>";
Header "From: <manager@myfirm.ru>";
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! <Return-path> domain is not equals to <From> 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! <Return-path> domain is not equals to <From> 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} }
Вот таким образом мы обломим у спамеров возможность обманывать наши сервера и присылать свой мусор.