div.main {margin-left: 20pt; margin-right: 20pt}Popsneaker - еще одна линия обороны от спама Автор: Александр
Куприн, ru_classic@mail.ru Опубликовано:
30.04.2002 Оригинал: http://www.softerra.ru/freeos/17696/
Введение
Можно потратить десятки часов на то, чтобы
придумать красочные эпитеты, описывающие интеллектуальный и моральный уровень
спамеров. Мысль неплохая, но можно потратить это время с большей пользой и
настроить ПО, которое поможет сэкономить ваше красноречие для более важных дел.
Наиболее часто упоминаемым инструментом для борьбы со спамом является 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. На сайте http://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) |(@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
|