Как стать автором
Обновить

Комментарии 19

По моему опыту очень помогают серые списки (процентов 70, субъективно не проходит сразу). Но они требуют т.н. обучения и в первую неделю вызывают у пользователей вопросы, почему почта не приходит мгновенно.
У меня статистика даже лучше.
Настроены gray lists и spamassassin, прорывается 3-5 спам писем в день из 300-500.
Неплохие правила, но считаю что надо действовать жёстче: нету или некорректная зона обратного просмотра — мгновенный отлуп, не прошёл проверку SPF — отлуп.
Так же можно понижать очки за выполненные условия — тот же SPF и наличие валидной DKIM подписи.
А ещё за 4 точки в доменном имени рано накидывать очки, а вот за 5 уже можно.
Ах как приятно, наверное, быть таким строгим и так радикально раздавать отлупы, поправляя стильную черную фуражку с черепом и костями :-).

Но как быть если деловой партнер организации, какая-нибудь талды-курган-окорочка-торг пользует домен без SPF, с 5 точками в имени, итд? Нет, конечно они дураки, пусть бы сделали как надо — я согласен в этом. Но что реально делать с ними? Перестать вести с ними бизнес, потому что не умеют настроить почту богоугодно?

К сожалению, в деле борьбы со спамом, возможная потеря одного не-спамерского письма, перевешивает тысячи спамерских сообщений.
Перестать вести с ними бизнес, потому что не умеют настроить почту богоугодно?
Ну, например, добавить их в whitelist. А вообще, написать письмо ихъ админу и объяснить что он не прав. А если совсем взглянуть правде в глаза, то ООО" Окорочка" не будет своего почтового сервера вовсе, в лучшем случае они заведут домен и скинут почту с него на тот же yandex или google. А ещё вернее у них будут обычные ящики на бесплатных серверах.

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

Я уже предложил вариант для такой ситуации — whitelist он почти для этого и нужен, что бы создавать исключения для таких вот му****в.
Такое ощущение, что вы не отдаете себе отчет о проценте му**ков в стране.
Счастье, если ваша деятельность позволяет их игнорировать.
Для таких случаев есть 100%-тные способы уничтожения спама. Например, жеганинский callback-milter.
О общем их проценте в стране я отдаю себе отчёт, но почтовые серверы держат далеко не все. Лично я только с двумя проблемным столкнулся в своей работе, причём с одним проблема была на приём от нам, а не к нам, другой был добавлен в whitelist.
Значит у вас маленькая переписка. Или специфика другая. Когда большие дяди не получат важного письма и спросят — а почему, вы им ответите — да там админ м***к? Как раз гос-конторы, всякие там заводы, предприятия ТЭК и подобные массово держат свои сервера и имеют привычку активно переписываться друг с другом. Один ремонт какого-нибудь сурового аргегата вызывает такие почтовые потоки (не в плане объема, а в плане кол-ва адресатов по всей стране), что все «талды-курган» — ваши.
Однажды даже с системным интегратором всея Руси, который тут кстать на хабре активно светится была такая проблема N-ное кол-во лет назад, в плане проверки существования адреса отправителя (нарушали RFC 821, наверное тоже админ был резок и суров не на шутку). Белые листы помогают, да. У меня на одном сервере (~500 ящиков, всего-то) из-за указанной специфики переписки вайт-лист был на несколько тысяч адресов.
жеганинский callback-milter
Callback verification считается abusive техникой. В лучшем случае попадёте в ips.backscatterer.org, в худшем — вас используют для атаки на другой SMTP сервер.
Согласен.
Я и не советую этим методом пользоваться, я объясняю человеку, что резкие заявления про белые списки — это, к сожалению, не решение проблемы спама.
Полагаю, что в рамках имеющихся почтовых RFC спам искоренить вообще невозможно.
Ну вообще, отлуп через проверку DKIM и SPF нужно давать, когда они отличаются от прописаных в DNSах.
А если их попросту нет, можно добавить дополнительные спам-очки.
Не у всех же админов прямые руки ))
А вот с DNSBL списками вообще надо быть очень аккуратными — очень часто вполне валидные хосты попадают в них попросту из-за того, что в список бывает попадают целые подсети.
Неплохие правила, но считаю что надо действовать жёстче...
Понижать очки — это правильно. Действовать жёстче — это не по RFC (см. RFC 5321, п. 7.9).
Сколько можно этот конфиг копировать в интернете? Хватит! Что нового в этой публикации?
Вот как минимум уже была такая на хабре habrahabr.ru/post/133215/

Для своих exim'ов однажды сел, собрал все конфиги, rfc и написал свой: с проверками и отлупами начиная с acl_smtp_connect, а не как в этих кочующих конфигах в rcpt. + DCC + DKIM + SPF + DNSBL + yandex SO (rip уже скоро) + всякие обязательные мелочи по rfc

Реквестую статью о DMARC для exim (хотя бы обзор разрабатываемого стека)
Поддерживаю статью. Ниже фрагменты против спамеров из моего конфига.
/etc/exim4/exim4.conf:
acl_whitelist:

  accept  condition = ${lookup mysql{SQL_WHOST_QUERY}{yes}{no}}
  accept  hosts   = ${if exists{CONFDIR/local_host_whitelist}{CONFDIR/local_host_whitelist}{}}
  deny

acl_is_work_time:       # Рабочее время  08:00 - 19:00  = 03:00 - 14:00 (02 << 15)

  accept  condition = ${if and { {>{$acl_c2}{2}} {<{$acl_c2}{15}} } {yes}{no}}
  deny

acl_check_connect:

  warn    set acl_c0  = ${eval:0}
  warn    set acl_c3  = ${eval:0}

  deny    message = Empty HELO is not allowed ERR_MES_ADD
    condition = ${if eq{$sender_helo_name}{}{yes}{no}}

  deny    message = Your IP in HELO is not allowed
    condition = ${if eq{$sender_helo_name}{$sender_host_address}{yes}{no}}

  deny    message = Our IP in HELO is not allowed
    condition = ${if eq{$sender_helo_name}{OUR_IP1}{yes}{no}}

  deny    message = Our IP in HELO is not allowed
    condition = ${if eq{$sender_helo_name}{OUR_IP2}{yes}{no}}

  deny    message = Localhost in HELO is not allowed ERR_MES_ADD
    condition = ${if eq{$sender_helo_name}{localhost}{yes}{no}}

  deny   message = 127.0.0.1 in HELO is not allowed
   condition = ${if eq{$sender_helo_name}{127.0.0.1}{yes}{no}}

  deny   message = Host name in HELO must contents letters
   !acl    = acl_whitelist
   condition = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}

  defer   message = 4 numbers in HELO is not allowed ERR_MES_ADD
    !acl    = acl_whitelist
    condition = ${if match{$sender_helo_name}{\N(\d{1,3}[-\.]){3}\d{1,3}\N}{yes}{no}}
    delay   = 10s

  defer   message = Text in HELO ($sender_helo_name) must be hostname ERR_MES_ADD
    !acl    = acl_whitelist
    !condition  = ${if match{$sender_helo_name}{\N^([a-zA-Z\d][-a-zA-Z\d_]{0,19}\.){1,5}[a-zA-Z]{2,5}$\N}{yes}{no}}
    delay   = 10s

  defer   message = Hostname in HELO is not allowed ERR_MES_ADD
    !acl    = acl_whitelist
    condition = ${if match{$sender_helo_name} \
        {home|dialup|dialin|ppp|dsl|pool|peer|dhcp|dynamic|transcapbank}{yes}{no}}
    delay   = 10s

  warn    set acl_m1  = ${lookup dnsdb{defer_never,a=$sender_helo_name}}

  defer   message = Hostname in HELO does not resolve ERR_MES_ADD
    !acl    = acl_whitelist
    condition = ${if eq{$acl_m1}{}{yes}{no}}
    delay   = 10s

acl_check_rcpt:

   ...

  defer   message = Bad reverse DNS ERR_MES_ADD
    !acl    = acl_whitelist
    condition = ${if eq{$sender_host_name}{}{yes}{no}}
    !acl    = acl_is_work_time

  defer   message = Bad helo hostname ERR_MES_ADD
    !acl    = acl_whitelist
    !verify = helo
    !acl    = acl_is_work_time

  defer   message = Limit for bad reverse DNS ERR_MES_ADD
    !acl    = acl_whitelist
    condition = ${if eq{$sender_host_name}{}{yes}{no}}
    set acl_c5  = 2
    delay   = 35s
    ratelimit = 1 / 2h / strict / $sender_host_address
    set acl_m0  = ${lookup mysql{SQL_INS_BHOST}{}}

  defer   message = Limit for bad helo hostname ERR_MES_ADD
    !acl    = acl_whitelist
    !verify = helo
    set acl_c5  = 3
    delay   = 35s
    ratelimit = 1 / 2h / strict / $sender_host_address
    set acl_m0  = ${lookup mysql{SQL_INS_BHOST}{}}

  deny    message = Your IP in blacklist $dnslist_domain ($dnslist_text) ERR_MES_ADD
    !acl    = acl_whitelist
    log_message = Sender IP in $dnslist_domain ($dnslist_text)
    dnslists  = bl.spamcop.net : dul.ru : dnsbl.sorbs.net
#   dnslists  = dnsbl.njabl.org : relays.ordb.org : list.dsbl.org : bl.spamcop.net : dul.ru
#     dynablock.njabl.org : xbl-sbl.spamhaus.org : dnsbl.net.au
#     xbl.spamhaus.org : cbl.abuseat.org

  deny    message = Sender verification failed ERR_MES_ADD
    domains       = +local_domains
    !acl    = acl_whitelist
    !verify       = sender/callout=30s,defer_ok


acl_check_mime:

  warn    decode  = default

  deny    message = File type is not allowed ($mime_filename)
    condition = ${if match {${lc:$mime_filename}} \
      {\N(\.exe|\.pif|\.bat|\.cmd|\.scr|\.lnk|\.com|\.vbs|\.cpl|\.sql)$\N} {1}{0}}

  deny    message = Chinese text is not allowed ERR_MES_ADD
    condition = ${if eq{$mime_charset}{gb2312}{1}{0}}

  accept

Лиссяра такой лиссяра…
Рубаем тех, кто в блэк-листах
Черные списки есть, а белых списков нет. Непорядок.

Метод отлова спама, который я опишу в этой статье, дает эффективность, примерно 97%
Вероятно, оставшиеся 3% приходятся на тех спамеров, которые арендуют VDS и используют сносно настроенные MTA.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации