Можна витратити десятки годин на те, щоб придумати барвисті епітети, що описують інтелектуальний і моральний рівень спамерів. Думка непогана, але можна витратити цей час з більшою користю і налаштувати, яке допоможе заощадити ваш красномовство для більш важливих справ. Найбільш часто згадуваним інструментом для боротьби зі спамом є procmail. Насправді, методів та інструментів набагато більше це пов’язано з тим, що блокувати листи можна (як мінімум) в трьох точках руху спаму:

на SMTP-сервер;
на POP-сервері;
при прийомі пошти на локальну машину.
У цій статті мова піде про спосіб боротьби зі спамом в останній точці його подорожі. Це може представляти інтерес для власників поштових скриньок, які не мають можливості налаштувати віддалено фільтри для блокування листів.

Отже, розглянемо конкретний випадок. У мене є поштова скринька у провайдера, до якого я підключений. Крім цього я відкрив на безкоштовних поштових серверах декілька поштових скриньок і щоб не йти через пів-Інтернету за поштою до них я налаштував пересилання листів на мою поштову скриньку. Провайдер такого сервісу, як настройка блокування вхідної пошти не надає, тому пошту доводиться фільтрувати при прийомі використовуючи 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 ви можете взяти тут www.ixtools.de/popsneaker/download/source.html. Якщо ж ви не хочете займатися самостійною збіркою пакета, то можете скористатися пакетами з вже откомпилированной програмою:
у тарболах
у форматі 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: .[email protected]”
змусить приймати пошту від .

— assume
синтаксис: assume [опції] «правила»
використовується для дозволу прийому пошти,
яка задовольняє
всім перерахованим правилам для assume, наприклад:
assume “^Message-ID: .*”
assume “^(to|cc): .* (([email protected]) |([email protected]) |(@mydomain.net))”
пошта буде прийнята тільки в тому випадку якщо Message-ID:
містить коректне значення і в полях To: чи Cc: вказано
один з поштових адрес:
,, або
.
Приклад взятий з файлу example.popsneakerrc.

— deny
синтаксис: deny [опції] «правила»
використовується для видалення пошти, властивості якої задовольняють
правилами, наприклад, згідно з правилами:
deny -silent “^From: .[email protected]”
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