Представляю вниманию почтовый фильтр для sendmail (milter), предназначенный для проверки наличия локальных (обслуживаемых почтовым сервером) почтовых адресов отправителей и получателей. Фильтр достаточно тривиален и работает с СУБД PostgreSQL.

Принцип работы:

На этапе получения заголовка письма фильтр анализирует домены отправителя и получателей (через mailertable). Если адреса из чужих доменов, то сообщение пропускается дальше. В противном случае фильтр проверяет наличие адресов в базе данных. При их отсутствии соединение разрывается без приёма тела письма.

Пока что фильтр показал себя достаточно надёжным средством недопущения вторичного спама и работает уже три недели без вмешательства во внутреннюю жизнь (не Бог весть что, но уже показатель).

Документации в настоящее время, кроме комментариев в тексте программы, нет.

Лицензия - GPL 2 .

Скачать фильтр можно здесь: lrc-milter-0.23.tar.bz2

Перепечатка заметки месячной давности из блога.

И вновь продолжается бой со спамерами.
Решил прикрутить проверку на правильность адресов локальных получателей, для чего в наличии есть несколько способов:

  1. Написать правила фильтрации самому (я попробовал. Ругани не было, но правила не работали - то ли запихнул не в то место конфигурационного фоайла sendmail, то ли ещё что)
  2. Воспользоваться набором штепселей и затычек "Real Time Cyrus Integration Version 2". Штука заработала, но для того, чтобы она ещё проверяла и на наличие псевдонимов, надо было делать много лишних телодвижений. Лень.
  3. Найти и собрать фильтр milter-ahead. Оказался сложен (то есть - не для ленивых) в сборке, не умеет, опять же, проверять псевдонимы. По пунктам 2,3 невозможность проверки, возможно, связана с тем, что у меня БД пользователей и псевдонимов хранится в PostgreSQL.
  4. Для велосипедистов.


Собственно, поступил четвёртым способом: взял и написал свой фильтр, который делает всё, что нужно. Сейчас он проходит тестирование, но уже показал свою эффективность - количество вторичного спама резко упало. Да и нагрузка на спаморезку снизилась за счёт отлупа на этапе передачи адреса получателя. Фильтр заточен под набор патчей для sendmail, обеспечивающих работу с СУБД PostgreSQL, хотя ничто не запрещает использовать его и отдельно, но это получится множенье сущностей.

Если всё пойдёт нормально - выложу проект в открытый доступ.

П.С. Пока есть бага - примерно через 8 часов начинается дурка с выборкой пользователей из таблицы.