Борьба со спамом на хостинге. Настройка EFA Project Free Spam-antivirus filter

в 15:00, , рубрики: efa, администирование, Настройка Linux, Серверное администрирование, системное администрирование, спам, хостинг, метки:

image

В этой статье, как и обещали, хотим поделиться нашим опытом борьбы со спамом. Известно, что у любой причины есть следствие. Эта фраза выражает одну из философских форм связи явлений.

Нашей причиной стали многократные жалобы на спам, исходящий от наших клиентов хостинга и VPS. Не всегда можно с уверенностью сказать, были ли это умышленные действия клиентов или они сами не подозревали, что стали жертвой спам-ботов. Что бы там ни было, проблему пришлось решать.

Спам не любят. Спам оставляет «чёрное пятно» на лице провайдера, когда его IP адреса вносят в блеклисты, от чего страдают все клиенты. Удалить IP из блеклистов — особый разговор. Но это одна сторона медали. Если вернуть репутацию IP адресу можно, то вернуть репутацию компании и доверие — намного сложнее.

Мы решили найти решение и внедрить в структуру Unihost комплекс по защите и предотвращению нежелательных рассылок. После мозговых штурмов и обсуждений, начали проверять и сравнивать, что может предложить сообщество SPAM/AV.

Вариантов на рынке много. Однако, большинство качественных решений платные с тарификацией 1 лицензия на 1 сервер или даже на количество исходящих/входящих писем, что привело бы к удорожанию тарифов. Поэтому выбирали только среди opensource.

Популярные opensource-решения против спама

Rspamd

Он подходит для систем различного масштаба. Умеет интегрироваться в различные MTA (в документации описаны Exim, Postfix, Sendmail и Haraka) или работать в режиме SMTP-прокси.

Система оценки сообщений такая же, как в SpamAssassin, в частности на основании разных факторов: регулярных выражений, блок-листов DNS, белых, серых, черных списков, SPF, DKIM, статистики, хешей (fuzzy hashes) и прочего — только в работе используются другие алгоритмы.

В Rspamd поддерживается расширение при помощи плагинов.

Apache SpamAssassin

Известность SA получил благодаря использованию технологии байесовской фильтрации. Каждое сообщение при прохождении тестов получает определенный балл и при достижении порога помещается в спам.

Легко интегрируется практически с любым почтовым сервисом. В SA доступны популярные технологии, которые подключаются как плагины: DNSBL, SPF, DKIM, URIBL, SURBL, PSBL, Razor, RelayCountry, автоматическое ведение белого списка (AWL) и другие.

Установка в общем не сложна. После установки SpamAssassin требует тонкой настройки параметров и обучения на спам-письмах.

ASSP

Платформно-зависимый SMTP-прокси-сервер, принимающий сообщения до MTA и анализирующий его на спам.

Поддерживаются все популярные технологии: белые и серые списки, байесовский фильтр, DNSBL, DNSWL, URIBL, SPF, DKIM, SRS, проверка на вирусы (с ClamAV), блокировка или замена вложений и многое другое. Обнаруживается кодированный MIME-спам и картинки (при помощи Tesseract). Возможности расширяются при помощи модулей.

Документация проекта не всегда внятная, а инструкции нередко уже устаревшие, но при наличии некоторого опыта разобраться можно.

MailScanner

MailScanner представляет собой решение «все включено» для борьбы с фишинговыми письмами и проверки почты на наличие вирусов и спама. Он анализирует содержание письма, блокируя атаки, направленные на email-клиентов и HTML-теги, проверяет вложения (запрещенные расширения, двойные расширения, зашифрованные архивы и прочее), контролирует подмену адреса в письме и многое другое.

MailScanner легко интегрируется с любым МТА, в поставке есть готовые конфигурационные файлы. Помимо собственных наработок, он может использовать сторонние решения. Для проверки на спам может использоваться SpamAssassin.

EFA-project

Есть еще один Open Source проект — «eFa-project» — Email Filter Appliance. EFA изначально разработан как виртуальное устройство для работы на Vmware или HyperV. Программа использует готовые пакеты MailScanner, Postfix, SpamAssasin (весь список ниже) для остановки спама и вирусов и они уже установлены и настроены для правильной работы в vm. Это значит, что костыли не нужны — все работает «из коробки».

В EFA входят такие компоненты:

В качестве MTA (mail transfer agent) выступает Postfix — надежный, быстрый, проверенный годами;
Ядро спам фильтра — MailScanner — плечом к плечу с антивирусом принимают на себя весь удар;
Спам фильтр — SpamAssassin — определяет письма-спам. В основу включено множество оценочных систем, MTA и наборы регулярных выражений;
ClamAV — антивирус, который работает с MailScanner;
MailWatch — удобный веб-интерфейс для работы с MailScanner и другими приложениями;
Фильтр контента — DCC — определяет массовую рассылку через отправку хеш-сумм тела писем на специальный сервер, который в свою очередь предоставляет ответ в виде числа полученных хешей. Если число превышает порог score=6, письмо считается спамом;
Pyzor и Razor — помогают SpamAssassin точнее распознавать спам, используя сети по обнаружению спама;
Для grey-листинга используется SQLgrey — служба политики postfix, позволяющая снизить количество спама, которое может быть принято получателями;
Для распознавания изображений используется модуль ImageCeberus — определяет порно изображения и т.д.
Мы выбрали EFA, поскольку проект включает в себя все лучшие характеристики вышеперечисленных. К тому же наши администраторы уже имели некоторый опыт работы с ним, поэтому выбор остановили именно на EFA. Приступим к описанию установки.

Установка и последующая настройка EFA

Устанавливать решили на VPS с чистой CentOS 6.8 x64, который выступает в качестве relay-сервера. Первым делом, необходимо обновить все системные утилиты и компоненты до последних версий, которые доступны в репозиториях. Для этого используем команду:

yum -y update

Затем устанавливаем утилиты wget и screen, если они не были установлены:

yum -y install wget screen

После чего, скачаем скрипт, который выполнит установку EFA:

wget https://raw.githubusercontent.com/E-F-A/v3/master/build/prepare-build-without-ks.bash

Даем скрипту права на исполнение:

chmod +x ./prepare-build-without-ks.bash

Запускаем screen:

screen

И запускаем скрипт:

./prepare-build-without-ks.bash

Теперь можно свернуть наш скрин используя комбинацию Ctrl + A + D.

После установки нужно заново войти на сервер через ssh, используя данные для первого входа. Это нужно для запуска скрипта инициализации и первичной настройки EFA.

После входа, система предлагает ответить на несколько вопросов, чтобы настроить EFA.

Список вопросов выглядит следующим образом:

Функция Свойство
Hostname Указывается хостнейм машины
Domainname Домен, к которому относится машина. В сумме с хостнеймом, получится полный FQDN сервера
Adminemail Ящик администратора, который будет получать письма от самой системы (доступные обновления, различные отчеты и т.д.)
Postmasteremail Ящик человека, который будет получать письма, которые имеют отношение к MTA
IP address IP адрес машины
Netmask Маска
Default Gateway Шлюз
Primary DNS Первичный DNS сервер
Secondary DNS Вторичный DNS сервер
Local User Логин локального администратора. Используется для входа в систему и в веб-интерфейс MailWatch
Local User Password Пароль
Root Password Пароль для пользователя root
VMware tools Будет отображаться только, если установка происходит на виртуальную машину под управлением VMware. Она необходима для установки инструментов по работе с VMware
UTC Time Если Ваша машина находится в часовом поясе UTC, необходимо выбрать Yes
Timezone Тут можно выбрать другой часовой пояс, отличный от UTC
Keyboard Layout Раскладка клавиатуры, которая будет использоваться в системе
IANA Code Тут указывается код страны, в которой находится машина. Это необходимо для того, чтобы определить, с каких зеркал в будущем будут скачиваться обновления
Your mailserver Индивидуальный параметр. Используется в случае если EFA работает и на приём писем
Your organization name Название организации. Используется для заголовков в письмах
Auto Updates Задается политика автообновлений. По умолчанию установлено disabled. В этом случае, автообновлений не будет, но на емейл админа будут приходить уведомления о доступных обновлениях

После такой анкеты, отображается весь список ответов. Если что-то нужно изменить, набираем номер вопроса и вводим новые данные. Когда готовы двигаться дальше, набираем ОК и жмем Enter. Система начнет процесс автонастройки.

image

По завершению конфигурирования, система перезагрузится и будет в полной боевой готовности.

В следующий раз, авторизуясь по ssh, сразу отобразится конфигурационное меню EFA. В этом меню доступно множество полезных действий:

  • Перезагрузка / выключение системы;
  • Изменение сетевых параметров;
  • Настройка MailScanner;
  • Включение / выключение grey-листинг;
  • Включение / отключение автообновления;
  • Настройка системы как исходящего relay-сервера;
  • Изменение ящика Adminemail;
  • Добавление / удаление почтовых доменов;
  • Изменение настроек фильтров спама;
  • Восстановление mysql базу, в случае повреждения из-за аварийного завершения работы.

Это список основных опций EFA, которые недоступны для редактирования через веб-интерфейс MailWatch. Поэтому, хорошо знать, где их найти.

Ручная настройка EFA

Мы же пошли сложным путем, но более гибким. Настройку EFA под себя делали не через интерактивное меню, а правили конфигурационные файлы. Мы хотели не просто всё настроить, а еще и разобраться во всех компонентах и понять, что и как работает.

Первым делом в файле main.cf настроек postfix добавили mynetworks, с которых принимались соединения по SMTP. Затем прописали ограничения по helo запросам, отправителям, получателям, и указали пути к картам с политиками ACCEPT или REJECT при соблюдении определенных условий. Также, inet_protocols был изменен на ipv4, чтобы исключить соединения по ipv6.

Затем изменили политику Spam Actions на Store в конфигурационном файле /etc/MailScanner/MailScanner.conf. Это значит, что если письмо будет определено как спам, оно уйдет в карантин. Это помогает дополнительно обучать SpamAssassin.

После таких настроек мы столкнулись с первой проблемой. На нас обрушились тысячи писем от адресатов you@example.com, fail2ban@example.com, root@localhost.localdomain и т.д. Получатели были схожие. Также получили письма, отправленные MAILER-DAEMON, то есть фактически без отправителя.

В итоге получили забитую очередь без возможности найти среди «красного полотна» нормальные, письма не-спам. Решили делать REJECT подобных писем, используя стандартный функционал Postfix карт: helo_access, recipient_access, sender_access. Теперь вредные адресаты и подобные стали успешно REJECT’иться. А те письма, которые отправлялись MAILER-DAEMON отфильтровываются по helo запросам.

Когда очередь вычистили, а наши нервы успокоились, начали настраивать SpamAssassin.

Обучение SpamAssassin

Обучение SpamAssassin делается на письмах, которые уже попали в спам. Делать это можно двумя способами.

Через веб-интерфейс

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

Score Matching Rule Description
-0.02 AWL Adjusted score from AWL reputation of From: address
0.80 BAYES_50 Bayes spam probability is 40 to 60%
0.90 DKIM_ADSP_NXDOMAIN No valid author signature and domain not in DNS
0.00 HTML_MESSAGE HTML included in message
1.00 KAM_LAZY_DOMAIN_SECURITY Sending domain does not have any anti-forgery methods
0.00 NO_DNS_FOR_FROM Envelope sender has no MX or A DNS records
0.79 RDNS_NONE Delivered to internal network by a host with no rDNS
2.00 TO_NO_BRKTS_HTML_IMG To: lacks brackets and HTML and one image
0.00 WEIRD_PORT Uses non-standard port number for HTTP

Открыв письмо, можно поставить галку в чекбоксе «SA Learn» и выбрать одно из нескольких действий:

  • As Ham — пометить письмо как чистое (тренировка алгоритма Байеса);
  • As Spam — пометить письмо как спам (тренировка алгоритма Байеса);
  • Forget — пропустить письмо;
  • As Spam+Report — пометить письмо как спам и отправить информацию о нём в сети по обнаружению спама (razor + pyzor);
  • As Ham+Revoke — пометить письмо как чистое и отправить информацию о нём в сети по обнаружению спама (razor + pyzor).

Через консоль

Делается это просто. Команда выглядит следующим образом:

sa-learn --ham /20170224/spam/0DC5B48D4.A739D

В этой команде письмо с ID: 0DC5B48D4.A739D, которое находится в архиве спам писем за определенную дату /20170224/spam/, помечается как чистое (не спам) bash--ham.

Бытует мнение, что достаточно обучать SpamAssassin только для эффективной фильтрации почты. Мы решили тренировать SpamAssassin, скармливая ему абсолютно все письма, как чистые, так и спам. В дополнение, мы нашли базу спам-писем и отдали SA на растерзание.

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

Для того, чтобы SpamAssassin начал работать на полную мощность, на старте ему необходимо скормить около 1000 различных писем. Поэтому наберитесь терпения и приступайте к тренировке.


Пока еще рано говорить о полной победе над спамом. Однако, сейчас количество жалоб на спам с наших серверов равно нулю. Более детально рассказывать о самом процессе обучения сейчас не будем— не хочется раскрывать все фишки. Хотя, если поковыряться в настройках, разобраться не сложно.

P.S.: Эта статья не является панацеей. Мы просто решили поделиться с вами одним из наших методов борьбы со спамом.

Всем добра и may the ham be with you! :)

Автор: Ukr2net

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js