Статьи о почте

Новости

Все новости

Разное в мире IT

Все заметки

mailinfo.ru - Статьи о почте

Можно ли бороться со спамом?

Прислал(а) Евгений Морозов [10 января 2002]

раздел: [Почта в различных ОС]

Бороться со спамом можно многими способами и, вопреки распространенным предрассудкам, довольно эффективно. Я, например, обновляю свой несложный фильтр приблизительно раз в месяц, и в промежутке между обновлениями весь спам откладывается в специально отведенную для него папочку. Иногда я проверяю эту папку на случай, если в нее попадет по ошибке важное письмо, но пока этого не случалось. Через месяц сквозь фильтр снова начинает просачиваться спам новой разновидности, но я мгновенно перекрываю ему путь. Мою задачу облегчает то, что спаммеры - люди неумные (иначе не стали бы заниматься столь низким делом) и пользуются готовыми программами. Достаточно научиться вылавливать письма, посланные одной программой, чтобы иссяк поток спама от нескольких десятков любителей рассылки рекламного мусора.

Поскольку я работаю под Linux и там же читаю почту, то для задач, связанных с сортировкой и фильтрацией почты, использую известную программу procmail, стоящую на многих Unix-машинах. В соответствии с философией Unix, каждая программа должна выполнять одну задачу, поэтому я не пользуюсь фильтрами, встроенными во многие почтовые программы, так как обычно они слишком примитивны по сравнению с procmail. Приведу часть своего конфигурационного файла procmail, отвечающую за фильтрацию спама. Поскольку большинство читателей вряд ли знакомо с синтаксисом конфигурационного файла procmail, каждое правило снабжено подробным комментарием, поясняющим его назначение. Это должно помочь читателю понять основные принципы фильтрации, чтобы он смог реализовать их, используя свою любимую программу.

Фрагмент файла ~/.procmailrc, отвечающий за отсеивание спама
      # Определения переменных, используемых при фильтрации

      # Мои почтовые адреса (в целях безопасности привожу не все :)).
      MYEMAIL="(jmv@linux-ink.ru|john_morozov@yahoo.com|jmv@online.ru)"
      # Слова, обычно встречающиеся в поле Subject писем со спамом
      # Данный список также изменен для публикации, так как в нем
      # находится много нецензурных слов :)
      BADWORDS="(viagra|girls|herb|mlm|adult)"
      SPAMWORDS="(financ|credit|sales)"
      # Список кодировок, которые обычно используют мои корреспонденты
      GOODENC="(koi8-r|Windows-1251|utf-8|iso-8859-1|us-ascii)"

      # Начинаем отсеивание спама
      
      # Большое количество восклицательных знаков или символов "$" 
      # в заголовке — очевидный признак спама
      :0 fhw
      * ^Subject.*(\\$\\$\\$|!!!)
      # Добавляю заголовок, по наличию которого последнее правило
      # запишет письмо в папку spam. Кроме того, здесь приводится
      # дополнительная информация о типе спама, чтобы в случае ошибки
      # знать, какое правило реагирует и на нормальные письма.
      | formail -A "X-Spam: bad subject"

      # Письма без темы однозначно содержат спам, вирус или
      # вредоносную программу
      :0 fhw
      * !^Subject
      | formail -A "X-Spam: no subject"


      # Почту с такими заголовками я читать не желаю!
      :0 fhw
      * $^Subject.*$BADWORDS
      | formail -A "X-Spam: bad words in subject"

      # Аналогично
      :0 fhw
      * $^Subject.*$SPAMWORDS
      | formail -A "X-Spam: spam words in subject"

      # Это письмо уже помечено как спам почтовым сервером Yahoo
      :0 fhw
      * ^X-YahooFilteredBulk
      | formail -A "X-Spam: marked as spam by Yahoo"

      # Некоторые спаммеры зачем-то приписывают многозначные числа к
      # теме письма. Наверное, пытаются таким образом обмануть
      # некоторые фильтры. А получился отличный способ отличать спам
      # от обычной почты. :)
      :0 fhw
      * ^Subject.*[.!] [0-9]{4,6}
      | formail -A "X-Spam: stupid spam masking scheme"

      # Письма без message-id или с message-id, не соответствующим rfc
      # (я, правда, на соответствие rfc не особенно строго проверяю :)
      # всегда являются спамом
      :0 fhw
      * !^Message-Id.*<[^@ ]+@[^@ ]+>
      | formail -A "X-Spam: bad message-id"

      # Слишком много получателей в заголовке To: или Cc: &mdash; или
      # отправитель-хам, рассылающий всякий мусор наподобие
      # предупреждений: "С адреса zzz@xxx.com рассылают троянцев", или
      # это обычный спам 
      :0 fhw
      * ^(To|Cc).*@.*,$?.*@.*,$?.*@.*,$?.*@.*,$?.*@.*,$?.*@.*,$?.*@.*
      | formail -A "X-Spam: overlong To: or Cc: headers"

      # Фильтрация писем с необычной кодировкой
      # 1) Проверяем, указана ли кодировка
      :0 HB
      * ^Content-Type.*charset
      {
        # Указана. Если она не совпадает со списком из переменной
        # $GOODENC, то это &mdash; плохое письмо 
        :0 fHBw
        * !$^Content-Type.*$GOODENC
        | formail -A "X-Spam: bad message encoding"
      }

      # А теперь спрячем все письма, помеченные как спам, в папку spam
      :0:
      * ^X-Spam
      spam/.

      # Письмо, в списке получателей которого не значится мой адрес &mdash;
      # 100% спам (это правило должно стоять после записи писем из
      # списков рассылки, иначе оно сохранит их в папке spam)
      :0:
      * $!^(Resent-)?(To|Cc|Bcc).*$MYEMAIL
      spam/.

Это, конечно, примитивная защита. Я не использую большинство возможностей procmail, среди которых есть даже scoring, который я так люблю использовать для фильтрации спама при чтении телеконференций Usenet программой Gnus. Кроме того, существует несколько готовых фильтров спама для procmail. Самый известный (и, IMHO, самый продвинутый, но я им пока не пользуюсь) - Spam Bouncer. Кроме того, при использовании моего способа, спам все равно приходится скачивать с почтового сервера (или получать на свой почтовый сервер). Но эти проблемы решаемы, при этом даже не придется отказываться от procmail, а просто потратить немного больше времени на чтение документации. Кроме того, существует отличный, проверенный временем способ фильтрации спама, называемый RBL (Realtime Blackhole List), использующийся на многих почтовых серверах. Тем не менее, используя свой простенький фильтр, я практически не вижу спам в папке inbox, а это сохраняет мне хорошее настроение и здоровые нервы! :)