Все о Linux. LinuxRSP.Ru


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


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

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

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

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

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

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







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-2017 LinuxRSP