Exim: избавляемся от спама за пол-часа

Надоело говно в ящиках и скотское количество smtp трафика?spam
Тогда приступим.

1. Конечно же exim!
2. Конечно же в исходнике!
3. Конечно же собираем ручками!
(сборку описывать не стану — этого добра в инетке не меньше, чем порнухи :)

После сборки-установки начинаем править конфиг. Прописываем свои домены.
По желанию собираем и подключаем avast антивирус (я использую).
Подключаем SMTP-аутентификацию юзеров (хоть mysql, хоть что-то другое)

Далее начинается самое интересное:

В acl_check_rcpt по дефолту присутствует следующее:

—————————————————

acl_check_rcpt:

[бла-бла-бла]

# Аутентифицированым везде у нас дорога
# Аутентифицированым везде у нас почет
  accept  authenticated = *

[бла-бла-бла]

—————————————————
это нам ничуть не мешает, а очень даже помогает

А далее начинаются проверки. В acl_check_data пихаем:
—————————————————

acl_check_data:

# Аутентифицированым везде у нас дорога
# Аутентифицированым везде у нас почет
#
# Приемлимо, если есть уверенность в отсутствии вирусни у юзеров, дабы не рассылали.
# Я юзаю на виндовых клиентах Thunderbird и никакого Бата или Некрофост Аутглюков (Экспресс)
#
  accept  authenticated = *

# Проверяем наличие RFC даты
# Немного спам-ботов балуют правильно оформленной датой. Режем.
#
  defer
    message   = RFC compliant date required.
    condition = ${if !match\
      {$h_date:}\
      {\N[0-9]\N}\
      {yes}{no}}

# Проверяем наличие RFC To
# Немного спам-ботов балуют правильно оформленным полем To. Режем.
#
  defer
    message   = RFC compliant to required.
    condition = ${if !match\
      {$h_to:}\
      {\N.+\N}\
    {yes}{no}}

# Проверяем наличие не ASCII символов, за исключением UTF-8
# Немного спам-ботов балуют правильно оформленной кодировкой. Режем.
#
# Тут надо с некоторой оглядкой - некоторые форумы и прочие самоделки рассылают как попало, без соблюдения кодировки.
#
  defer
    message   = Message headers contain non ASCII chars.
    condition = ${if !match\
      {${lc:$h_content-type:}}\
      {\Nutf-?8\N}\
    {yes}{no}}
    condition = \
      ${if \
        or {\
          {match{$rh_bcc:}{\N[\x80-\xff]\N}}\
          {match{$rh_cc:}{\N[\x80-\xff]\N}}\
          {match{$rh_date:}{\N[\x80-\xff]\N}}\
          {match{$rh_from:}{\N[\x80-\xff]\N}}\
          {match{$rh_reply-to:}{\N[\x80-\xff]\N}}\
          {match{$rh_sender:}{\N[\x80-\xff]\N}}\
          {match{$rh_subject:}{\N[\x80-\xff]\N}}\
          {match{$rh_to:}{\N[\x80-\xff]\N}}\
        }\
      {yes}{no}}

# Домен не может быть localhost или localdomain
# На "дурака" не проканает. Режем.
#
  defer
    message   = ${domain:$h_from:} is a wrong domain.
    hosts     = ! : !+relay_from_hosts
    condition = ${if match\
      {${domain:$h_from:}}\
      {\N^(localhost|localhost\.local(domain)?|local(domain)?)$\N}\
    {yes}{no}}

# Не принимаем почту с "голых" IP-адресов (RFC 1918)
# С "голых" IP посылаем нахуй. Это 100% спам!
#
  deny hosts   = !+relay_from_hosts
     message = RFC 1918 IP address in HELO.
     condition = ${if match\
     {$sender_helo_name}\
     {\N^(\[)?(10\.[0-9]{1,3}|172\.(1[6-9]|2[0-9]|31)|192\.168)\.[0-9]{1,3}\.[0-9]{1,3}(\])?$\N}\
     {yes}{no}}

# Удаленный хост должен резольвиться
# Не резольвишься? Иннах, спам-бот!
#
  deny hosts   = !+relay_from_hosts
     message = HELO should be hostname.
     condition = ${if !match\
     {$sender_helo_name}\
     {\N.*[A-Za-z].*\N}\
     {yes}{no}}

# Удаленный хост должен иметь FQDN
# Резольвишься как попало? Иннах, спам-бот!
#
  deny hosts   = !+relay_from_hosts
     message = HELO should be Fully Qualified Domain Name  Host.Domain.Tld  See RFC821
     condition = ${if !match\
     {$sender_helo_name}\
     {\N.*[A-Za-z].*\..*[A-Za-z].*\N}\
     {yes}{no}}

# Поврежденные аттачи - фтопку!
# Кривой MIME нам не нужен! Иннах, спам-бот!
#
  deny
    message   = This message contains malformed MIME $demime_reason.
    condition = ${if >\
      {$demime_errorlevel}{2}\
      {1}{0}}

# Виндово-исполняемое говно - фтопку!
# Иннах, инфицированя тачка и/или тупой юзер!
#
  deny
    message = Attachment has unsupported file format .$found_extension. try text, PDF or ODF instead.
    demime  = bat:btm:cmd:com:cpl:dat:dll:exe:lnk:msi:pif:prf:reg:scr:vb:vbs:url

# Проверяем на вирусы
# У меня подкдючен avast.
# Не забываем включить опцию demime в src/EDITME при сборке exim
#
  deny
    message = Message contains a virus or other harmful content ($malware_name)
    demime = *
    malware = *

—————————————————

Вот так, кратенько, с шутками и прибаутками мы срезаем до 99% всевозможного спама.

Проверить с этими правилами работу spamassassin или dspam у меня не было ни возможности, ни времени.
Хотя, все еще впереди :-)

Удачи и поменьше спама вашему хосту.

Sincerelly,
JRoger

3 thoughts on “Exim: избавляемся от спама за пол-часа

  1. Gami says:

    Я не программер, но подозреваю, что отдельные части кода можно прикрутить к wordpress при комментировании. В результате, можно почти полностью избавиться от капчи.

  2. Corebug says:

    @Gami
    Эмм… В статье рассматривается конфиг почтового MTA, что общего это имеет с WordPress? Трололо?

  3. Он имел в виду прикручивание подобного антиспама к вордпрессу.
    Хотя, я чам нифкурил, нахуа?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA