К списку статей
Автор: Евгений Кропоткин (E.Kropotkin@gmail.com)
Обложка статьи

Про sendmail,milter api и спам

Для начала, давайте посмотрим на ситуацию, итак вот что мы имеем: доля спама в общем объеме почты в Рунете в 1-м полугодии 2007г. составляла 70-80%: такие данные приводятся в аналитическом исследовании разработчика антивирусных программ для компьютеров "Лаборатория Касперского". Минимальное значение доли спама - 62,9% - было зафиксировано 27 апреля, максимальное - 86% - 11 февраля и 28 мая.

Что это означает? Для корпоративного пользователя это потерянные деньги на трафик (в основном, в России, пока не так широко распространены корпоративные безлимитные тарифы), это потеря времени сотрудников на разбор почты в поисках важных писем (по опыту скажу, спам ещё и раздражает), это излишняя нагрузка на серверное оборудование организации (оборудование всё же желательно использовать в достижении своих бизнес-целей).

Рассмотрим, какие есть варианты решения этой проблемы у нас есть (и недостатки):

  • мы можем отключиться от сети - неприемлемо
  • можно перенести нагрузку на gmail - но далеко не все хотят хранить свою корпоративную почту "незнамо где"
  • можно установить интеллектуальный фильтр - требуется настройка и периодическое внимание для устранения потерь ошибочно блокированных писем (сложно, но для крупной организации как раз лучший вариант)
  • фильтрация пришедших сообщений в клиенте по записной книге - но спам получен и найти новых собеседников в спаме сложно
  • белые/чёрные списки - чёрные списки при наличии спам-бот сети неэффективны для компании, белые списки затрудняют отправку почты новым клиентам

Из того программного обеспечения, которое доступно бесплатно, думаю что наиболее доступен spamassassin - именно его я и рекоммендую использовать. Но есть одно "НО" - программа эта сложная, и было бы идеально её разгрузить от очевидных мусорных писем - писем, котрые рассылаются зомбированными компьютерами. А если ещё у Вас почту проверяет и антивирус, например clamav, то устранение перегрузки на почтовую систему крайне желательно.

Итак, что мы можем сделать? Мы можем проанализировать служебную информацию, выдающую компьютер-зомби: обычно это домашняя машина, поэтому её "здоровьем" может и не заниматься профессионал-компьютерщик.... Итак, чем они отличаются? Ну например наверняка у них нету доменного имени, или оно как-либо выделяется - например: pool-71-125-118-199.lsanca.dsl-w.verizon.net или dsl.static859617928.ttnet.net.tr (примеры из лога, первые попавшиеся на момент написания этой статьи).Что мы видим? В имени хоста очень много цифр, точек и тире, возможно есть сочетание букв pool, dsl, ppp....

Чем отличаются нормальные mail-host? Давайте рассмотрим сообщение от google.mail : el-out-1112.google.com - намного меньше цифр и точек. Аналогичная ситуация с другими нормальными хостерами.

Теперь надо придумать - как довести наши пожелания до почтовой системы? Рассмотрим что у нас есть: чаще всего почтой заведует Unix-система, популярны sendmail, exim и postfix. Современная почтовая система (а их намного больше, чем я перечислил) обычно поддерживает API фильтрации и модификации сообщений (https://www.milter.org/developers/api/)

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

Собираем исходник фильтра: gcc mil.c -o mil -lmilter -pthread

Для чистоты эксперимента гасим clamav и spamassassin, чтобы увидеть именно работу нашего фильтра.

Как взаимодействует фильтр и почтовая программа? Посмотрим в sendmail.cf:

#
######################################################################
######################################################################
#####
#####                   MAIL FILTER DEFINITIONS
#####
######################################################################
######################################################################

Xclamav, S=local:/var/run/clamav/clamav.sock, F=, T=S:4m;R:4m
Xspamassassin, S=local:/var/run/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m
#

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

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

Остановим sendmail, например /etc/init.d/sendmail stop

Теперь запустим в другой консоли наш фильтр (предполагается, что мы в каталоге с исходниками фильтра):

rm -f /var/run/clamav/clamav.sock
./mil -p /var/run/clamav/clamav.sock -a postbox@вашдомен.ru

Возвращаемся в первую консоль и теперь запускаем sendmail: /etc/init.d/sendmail start

Он должен ругнуться на недоступность одного из фильтров

WARNING: Xspamassassin: local socket name /var/run/spamass-milter.sock missing

Переходим в консоль фильтра и смотрим на активность:

dbg.helo: len=39  6 - FAIL Points.H1

dbg.helo: len=28 <217-15-142-3.ip.yaroslavl.ru> 6 - FAIL Points.H1
dbg.envrcpt helo=[p5B29548A.dip.t-dialin.net, No TLS] \
	connect=[p5B29548A.dip.t-dialin.net [91.41.84.138]] () \
	---- mailaddr=[lachlan@nokia.com]   mailhost=[nokia.com.] \
	mailer=[esmtp]  hslen=10   ::: pass=0  \
	local=0  digs=6  points=4  result = !!! FAIL PLD

Примерно так выглядит отчёт фильтра о работе, в данном случае видно два сообщения, заблокированное фильтром .

Какой итог я могу подвести? Фильтр работает и фильтрует около 85% нежелательных сообщений, за двое суток наблюдений отброса ненужных сообщений замечено не было (в общем то фильтр создавался под мою ситуацию со спамом), но если Вы решите его ставить, то необходимо адаптировать его под Ваши особенности, потому как приемлемых универсальных решений нет. Но перед зомби-сетями, как Вы видите, мы не беззащитны.

Disclaimer: без обязательств, обещаний и гарантий.

Исходники к статье: здесь.

  • Обложка статьи FreeBSD. Настраиваем файловые системы

    FreeBSD. Настраиваем файловые системы

    FreeBSD. Свободные записки о свободной системе. В качестве объекта для изучения был избран однодисковый вариант FreeBSD стабильной версии - 4.2

    Читать далее
  • Обложка статьи Поддерживаю РФ: Кириллические домены должны поддерживаться в российском ПО и сервисах

    Поддерживаю РФ: Кириллические домены должны поддерживаться в российском ПО и сервисах

    Поддержка российским ПО и отечественными сервисами кириллических доменов и адресов электронной почты станет ключевой задачей проекта Поддерживаю.РФ в 2021 году. По словам директора Координационного центра доменов .RU/.РФ Андрея Воробьева, национальный дом

    Читать далее
  • Обложка статьи Защищаем Apache 2. Шаг за шагом

    Защищаем Apache 2. Шаг за шагом

    В этой статье мы расскажем о пошаговой установке и конфигурировании Apache 2.0, чтобы снизить риск неавторизованного доступа или успешного взлома в случае применения новой уязвимости, обнаруженной в Apache Web сервере. В результате, можно будет пользовать

    Читать далее
  • Обложка статьи Защита ваших данных. PGP & Linux

    Защита ваших данных. PGP & Linux

    Эта статья написана для тех, кому необходимо сохранить некоторую информацию в секрете и кто пока не решил как это сделать....

    Читать далее
  • Обложка статьи DragonFlyBSD: загрузка и инициализация

    DragonFlyBSD: загрузка и инициализация

    В этом цикле статей я хочу рассказать об операционной системе, родившейся прямо на наших глазах - летом 2004 года. Имя ей - DragonFlyBSD, и являет она собой представителя славного племени BSD-систем. В сущности, исходно это fork (порождение) FreeBSD 4-й в

    Читать далее

Специальные предложения
интернет-магазина

  • Чехол для переноски Portable Hard Shell для Oculus Quest 2 VR
    3300 руб

    Чехол для переноски Portable Hard Shell для Oculus Quest 2 VR

  • Книга: Дронов В.А. "Laravel 9. Быстрая разработка веб-сайтов на PHP"
    1550 руб

    Книга: Дронов В.А. "Laravel 9. Быстрая разработка веб-сайтов на PHP"

  • Электронный конструктор Эвольвектор: Уровень 1. Стартовый набор
    4052 руб

    Электронный конструктор Эвольвектор: Уровень 1. Стартовый набор

  • №18 Патрон с впаянной лампой 2,5 V/ 0,3A
    212 руб

    №18 Патрон с впаянной лампой 2,5 V/ 0,3A

  • Книга: Аль-Халили Джим "Мир физики и физика мира. Простые законы мироздания"
    1000 руб

    Книга: Аль-Халили Джим "Мир физики и физика мира. Простые законы мироздания"