Все о Linux. LinuxRSP.Ru
Альт Линукс СПТ 6.0 Сертификат ФСТЭК

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

В GIMP наконец-то появилась обработка с точностью 16 и 32 разряда на канал

В одном окне: GIMP 2.8

Релиз OpenBSD 5.1

HTML-редактор: BlueGriffon 1.5

Релиз Xfce 4.10

Команда Chromium представила кластер для автоматизации выявления уязвимостей

В Microsoft Office 15 будет обеспечена поддержка формата ODF 1.2

Анонсирован новый свободный анимационный фильм Tube

Обновление ядра: Linux 3.0.29, 3.2.16, 3.3.3

Представлен OpenSSH 6.0

Релиз графического редактора Pinta 1.2, претендующего на роль аналога Paint.NET

Вышел Firefox 12

Google прекращает поддержку Linux-версии приложения Picasa

Эмулятор приставок: Mednafen 0.9.21-wip

Линус Торвальдс получил премию Millennium Technology Prize 2012

Canonical не заинтересована в участии в разработке ядра Linux

Распределенные вычисления: BOINC 7.0

Google

 Новые статьи :

Передача снапшота ZFS по сети

Правила хорошего тона: SSH

Некоторые рассуждения о защите от ddos на примере защиты от SSL denial of service attack

Быстрый проброс портов на шлюзе во внутреннюю сеть или на другой хост. Быстро NAT'им порты. rinetd.

NAT'им отдельные порты или "а что делать, если мой веб-сервер внезапно переехал на другую машину". Проброс портов в локалке на шлюзе наружу.

Как справляться с запланированной недоступностью веб-сайта

Архитектура Google 2011

Мониторинг Nginx с помощью MRTG

Решение проблем при использовании "1c предприятие" 8.2 в Linux

25 правил .htaccess, которые должен знать каждый web-разработчик

Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula

Краткое руководство по GNOME Shell в Ubuntu 11.10

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки

   Дистрибутивы и атрибутика



DeveloperWorks Россия





Rambler's Top100


 
 

Popsneaker - еще одна линия обороны от спама

Александр Куприн ru_classic@mail.ru

Введение

Можно потратить десятки часов на то, чтобы придумать красочные эпитеты, описывающие интеллектуальный и моральный уровень спамеров. Мысль неплохая, но можно потратить это время с большей пользой и настроить ПО, которое поможет сэкономить ваше красноречие для более важных дел. Наиболее часто упоминаемым инструментом для борьбы со спамом является procmail. На самом деле, методов и инструментов намного больше - это связано с тем, что блокировать письма можно (как минимум) в трех точках движения спама:

  • на SMTP-сервере;
  • на POP-сервере;
  • при приеме почты на локальную машину.

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

Итак, рассмотрим более конкретный случай. У меня есть почтовый ящик у провайдера, к которому я подключен. Кроме этого я открыл на бесплатных почтовых серверах несколько почтовых ящиков и чтобы не идти через пол-Интернета за почтой к ним я настроил пересылку писем на мой почтовый ящик. Провайдер такого сервиса, как настройка блокирования входящей почты не предоставляет, поэтому почту приходится фильтровать при приеме используя procmail.

Введение в procmail, примеры настройки .procmailrc, manы на русском по procmail вы найдете здесь.

Однако, у этого метода есть один недостаток: если вы в файле .procmailrc перенаправили в почту в /dev/null, то это не приведет к тому, что программа приема почты немедленно удалит это письмо и перейдет к следующему. Нет, просто она примет все письмо, но не будет его сохранять (вернее сохранит в "черной дыре" файловой системы Linux, устройстве /dev/null). Поэтому разумным будет следующий подход: перед приемом почты "причесать" свой почтовый ящик у провайдера и удалить те письма, которые подходят под черный список по следующим критериям:

  • размер письма;
  • информация, содержащаяся в заголовке письма.

И только после этого начать прием оставшейся почты и обработку ее procmailом. В качестве "расчески" рассмотрим работу программы popsneaker. Автор программы - Stefan Baehre [popsneaker at ixtools.de]. Версия программы на момент написания статьи была 0.6.0.

Сборка пакета

Для компиляции и работы пакета требуется библиотека Tcp4u. Она распространятется вместе с дистрибутивом Debian GNU/Linux 2.2. На сайте www.ixtools.de вы можете найти deb-пакеты и rpm-пакеты этой библиотеки, либо исходники:

пакеты для Debian:
runtime пакет
development пакет

пакеты для Red Hat:
runtime пакет
development пакет

Исходники пакета popsneaker вы можете взять здесь. Если же вы не хотите заниматься самостоятельной сборкой пакета, то можете воспользоваться пакетами с уже откомпилированной программой:
в тарболах
в формате deb
в формате rpm

Если вы решили откомпилировать программу, то напоминаю вам "отче наш" для сборки из "сырцов" (последняя команда под правами root):

  ./configure
  make
  make install

На момент написания статьи исходники версии 0.6.0, которые были выложены на сайте, содержали ошибку, которая не позволяла собрать пакет из исходников - в файлах заголовков log.h и scanner.h пропущена ссылка на файл заголовков string.h:

#include 

Автор извещен, обещал исправить.

Настройка

При старте popsneaker ищет информацию о настройках конфигурации в следующих файлах и использует данные из первого встреченного им файла:

  ~/.popsneakerrc
  /etc/popsneakerrc
  /usr/etc/popsneakerrc
  /usr/local/etc/popsneakerrc

В программе существует пять типов фильтра: maxsize, accept, assume, deny и dupcheck:

  - maxsize
    синтаксис: maxsize [опции] <размер>
    используется для контроля размера входящей почты,
    например, правило:
      maxsize 10240
    заставит popsneaker удалять любые письма,
    чей размер больше, чем 10 Кб.

  - accept
    синтаксис: accept [опции] "правила"
    используется для разрешения приема важной почты,
     удаление которой
    нежелательно, например, правило:
      accept "^From: .*my\.friend@isp\.com"
    заставит принимать почту от .

  - assume
    синтаксис: assume [опции] "правила"
    используется для разрешения приема почты,
     которая удовлетворяет
    всем правилам перечисленным для assume, например:
      assume "^Message-ID: .*<.+@.+\..+>"
      assume "^(to|cc): .*\
      ((privat1@my-isp\.com)\
      |(iam@work\.com)\
      |(me@freemailer\.net)\
      |(@mydomain\.net))"
    почта будет принята только в том, случае если Message-ID:
     содержит корректное значение и в полях To: или Cc: указан
      один из почтовых адресов:
    , ,  или
    <любой_адрес@mydomain.net>.
     Пример взят из файла example.popsneakerrc.

  - deny
    синтаксис: deny [опции] "правила"
    используется для удаления почты, свойства которой удовлетворяют
    правилам, например, согласно правилам:
      deny -silent "^From: .*@buyers\.com"
      deny -case -silent "^Subject: .*MONEY"
    почта, которая содержит в теме слово MONEY или
     обратный адрес содержит доменное имя buyers.com.

  - dupcheck
    синтаксис: dupcheck -strict
               dupcheck -relaxed
    это правило используется для удаления дубликатов почтовых сообщений.
     Ключ
    -strict заставляет проверять поле Message-ID: проверяемой почты,
     если встречается совпадение, то сообщение удаляется. Ключ "-relaxed"
     проверяет почту по другим критериям: размер, тема письма, отправитель.
     Со вторым ключом нужно быть осторожным, потому что остается небольшой
     риск того, что все три параметра совпадут. Это возможно в том случае, если
     ваш респондент вышлет вам письма по одной теме, которые окажутся
     одинакового размера.

Описание регулярных выражений, которые используются в правилах для accept, assume и deny вы можете найти в man по regex:
man 7 regex

Ключей, которые применяются в фильтрах всего четыре. Они могут использоваться вместе с accept, assume, deny:

  - case -- делает выражения чувствительными к регистру
   встречаемых символов;

  - nocase -- делает выражения нечувствительными к регистру
    встречаемых символов  (используется по умолчанию);

  - verbouse -- при удалении сообщения пишется информация
     о нем в лог-файл.

  - silent -- при удалении сообщения никакой информации об этом
   в лог-файл не  пишется.
   

Для ускорения работы вы можете указать программе, по каким именно полям в заголовках писем производить фильтрацию. Для этого воспользуйтесь ключевым словом restrict:

  restrict "to:" "cc:" "from:" "subject:"
  restrict "list-id:" "message-id"

Обратите внимание на следующее: если вы применили ограничение фильтрации по полям заголовков сообщений, то не забудьте в объявлении restrict описать все поля, для которых вы написали правила accept, assume и deny, иначе они работать не будут.

Немного о принципе построения правил фильтрации. Принцип прост -- если правило первым описано, то оно и выполняется. Если у вас есть письмо с темой содержащей слово "test" и вы пропишите в файле конфигурации вот такие строки:
accept "^Subject: .*test"
deny "^Subject: .*test"

то почта будет принята, если поменяете их местами, то удалена. Поэтому, чтобы не запутаться, вначале прописывайте правила для почты, которую вы хотите получить и только потом правила для почты, которая должна быть удалена.

Теперь об оставшихся параметрах, описываемых в procmailrc:

  - logfile
    синтаксис: logfile "путь к лог файлу"
    определяет путь к лог-файлу (не забудьте про права доступа к файлу):
      logfile "/var/log/popsneaker.log"

  - debuglevel
    синтаксис: debuglevel <уровень>
    определяет объем отладочной информации; 0 -- минимальный,
    5 -- максимальный, по умолчанию -- 3:
      debuglevel 3

  - timeout
    синтаксис: timeout <секунды>
    период тайм-аута для сетевых соединений; 0 -- отключен,
    по умолчанию 300 сек:
      timeout 300

  - connections
    синтаксис: connection <количество каналов>
    определяет количество одновременно открытых каналов с почтовыми
    серверами; 1 -- по умолчанию:
      connections 2

  - testmode
    синтаксис: testmode on/off
    включает/выключает отладочный режим; по умолчанию -- отладка
    выключена, иначе правила будут выполнят, результаты операций
    записываться в лог, но реально удаляться из почтового ящика
    ничего не будет:
      testmode on

  - account
    синтаксис: account [опции] "имя сервера" "логин" "пароль"
    описывает настройки для подключения к вашему почтовому серверу,
    поддерживает два протокола pop3 и apop; по умолчанию используется
    pop3:
      account -protocol pop3 "pop.mail.ru" "ru_classic" "********"

Popsneaker и fetchmail

Если вы забираете почту при помощи fetchmail, то вы можете воспользоваться опцией preconnect, описав ее в файле fetchmailrc (пример взят из документации по popsneaker):

  poll pop.isp.com
    proto POP3
    user ваш_логин
    password ваш_пароль
    is ваше_локальное_имя
    options fetchall
    preconnect '/usr/local/bin/popsneaker pop.isp.com'
    

Обратите внимание на опцию "fetchall". Она необходима, т.к. после завершения работы popsneaker, все сообщения в вашем почтовом ящике буду с пометкой "прочтено". Без этой опции fetchmail не примет ни одного сообщения.

И последнее: если вы захотите просто очистить свой почтовый ящик, то укажите из правил фильтрации только одно:
maxsize 0


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2012 LinuxRSP


Реклама: