Автор — Сергей Попов
Привет, друзья. Сегодня я расскажу, как мы боролись со спамом в одной коммерческой организации. Наверняка, вы все знаете, что такое SPAM, но добавлю немного истории.
Слово «спам» имеет интересное происхождение. После Второй мировой войны в США оказалось слишком много мясных консервов от фирмы-производителя SPAM. И для того чтобы избавиться от излишков этого продукта, была организована агрессивная рекламная кампания. Призывы покупать консервы неслись отовсюду, но вместо продаж вызывали только раздражение. Так название компании стало нарицательным и теперь им называют нежелательную электронную рассылку, SMS-сообщения, навязчивые и неуместные сообщения в комментариях в соцсетях и телефонные звонки с целью продать товары или услуги. Моя история только об одном небольшом сегменте — нежелательных письмах в адрес организации по каналу электронной почты.
Предистория
Небольшая (1500 почтовых ящиков) организация. Почтовый сервер MS Exchange в локальной сети на виртуалке обслуживает почту корпоративного домена — стандартная и всем знакомая ситуация. Но наступает момент, когда адреса сотрудников или общие ящики попадают к третьим лицам (или ботам), которые используют их не совсем целевым образом.
Например: на адрес приемной типа mail@example.com приходит письмо с темой «Документы к договору №123/123 от 23 января сего года». В теле письма — стандартный текст типа «высылаем согласованный договор с приложением и т.д. С уважением, самый главный юрист ООО “Рога и копыта”». И внизу парочка синеньких строк — «договор № 123/123» и «приложение к договору №1». Вы наверняка догадались, что это никакое не вложение, а ссылки на «приятные» бонусы.
Секретарь кликает по названиям, чтобы увидеть документ, но ничего не происходит. Она, согласно регламенту, создает тикет в поддержку. Совершенно случайно мимо проходил сетевой администратор и по доброте душевной решил посмотреть, что же там за документ…
В результате было зашифровано примерно 270 Гб данных на сетевой шаре. Которые были благополучно извлечены из бэкапа, но осадочек остался. И в результате «бизнес» в лице генерального директора озадачивает ИТ отдел — «Оградить пользователей от СПАМа». Вот так, емко и конкретно.
Принятие решения
Начальник ИТ-отдела и админ запираются в кабинете, заваривают много кофе и немного коньяка и начинают думать, как с минимальными затратами сил и финансов (бюджет, выделенный на проект = 0) воплотить в жизнь поставленное ТЗ.
Стандартный функционал Exchange — не вывозит.
Городить Касперского — деньги (которых нет) и время, чтобы их выбить (организовать закупку и прочее).
Пересадить всю почту на ГУГЛ! Ну, хорошо, на Яндекс — не вариант (по разным политическим причинам).
Перевезти почтарь в облако MS! Или сделать гибрид — хороший вариант, но это тоже деньги и время.
Ok google — «спам фильтры для exchange» — дорого, триалка, не пойдет, фигня какая-то…
Кофе уже начинает кончаться, а вот коньяка еще много. Надо отвлечься.
— А что там у нас с версиями гипервизора — надо бы обновить. Ща посмотрим — http://proxmox.com.
О-О-О, а тут есть Email Security — и что же это за зверь?
Так мы узнали про замечательный опенсорсный продукт — Proxmox Mail Gateway. Которым и воспользовались для решения проблемы.
В обед начали, к вечеру в продакшн
Топаем в раздел downloads и качаем версию 5.1 (вроде) — сейчас, кстати, уже доступна 6.3-1, но я-то рассказываю про давние времена, когда трава была зеленей. А пока качается, смотрим «по диагонали» официальную документацию.
Virus Scanning (ClamAV), Spam Detection, Sender policy framework (SPF), DNS-based Blackhole List, SMTP Whitelist, Bayesian Filter — Automatically trained statistical filters, Black- and Whitelists, Greylisting, Spam Uri Realtime BlockList (SURBL), Load-Balancing-Cluster with MX records, How to deploy Proxmox Mail Gateway in your network:

И все это совершенно бесплатно, то есть даром. Крутяк — надо брать.
Ресурсы
Что там у нас со свободными ресурсами? Да вроде есть маленько, а сколько нужно?
Minimum Hardware
CPU: 64bit (Intel EMT64 or AMD64)
2 GB RAM
Hard disk with at least 8 GB of disk space
Ethernet network interface card
Без проблем!
Recommended Hardware
Multicore CPU: 64bit (Intel EMT64 or AMD64), for use as virtual machine activate Intel VT/AMD-V CPU flag
4 GB RAM
1 Gbps Ethernet network interface card
Storage: at least 8 GB free disk space, best setup with redundancy, use hardware RAID controller with battery backed write cache (“BBU”) or ZFS. ZFS is not compatible with a hardware RAID controller. For best performance use Enterprise class SSD with power loss protection.
Нарезаем виртуалку: 1 ядро, 4Gb RAM, 20Gb диск, монтируем исошку, запускаем.
Установка
Дальнейший процесс установки был достаточно тривиален:
Указываем диск, на который установить.
Указываем страну и временную зону, а также раскладку клавиатуры.
Указываем пароль и email администратора сервера. На этот адрес в дальнейшем будут поступать ежедневные отчеты и прочие сообщения сервера.
Указываем IP-адрес сервера, FQDN, прочие параметры IP.
По окончании установки можно зайти по SSH или через браузер по адресу https://ipadres:8006. В качестве логина используется root с паролем, который был задан во время установки.
Следующим шагом необходимо было прописать бесплатный репозиторий для обновления компонентов PMG (кто сталкивался с proxmox VE, должен быть в курсе), а также отключить платный репозиторий, который не будет работать без ключа платной подписки. Для этого редактируем файл /etc/apt/sources.list.d/pmg-enterprise.list. Необходимо привести его к следующему виду:
Настройка
Все остальные настройки делаем через веб-интерфейс. Консоль нам не пригодилась, но всякое бывает.
Идем в раздел Configuration\Mail proxy. Смотрим на вкладку Relaying и заполняем его в соответствии с нашими настройками (для внешних систем он должен выглядеть как наш почтовый релэй).

Потом на вкладке Relay domains вбиваем домены, на которые мы принимаем почту нашим почтовым шлюзом (это тот почтовый домен, который прописан в Exchange).

Настраиваем порты. Наружу 25-й (тут все стандартно) А внутри любой (главное запомнить, какой) — по нему наш pmg будет общаться с Exchange.

Следующая интересующая нас вкладка — Transport. Здесь мы прописываем соответствие домена и внутреннего адреса почтового сервера Exchange, куда наш шлюз будет пересылать всю чистую корреспонденцию.

И последняя вкладка — это Networks, здесь необходимо прописать внутренние адреса серверов, клиентов, сегментов сети, с которых почтовый шлюз будет принимать письма к пересылке.

Обратите внимание, что пересылка с этих сетей разрешена только на внутреннем (internal) порту, указанном на вкладке Ports. Иными словами, чтобы почта с вашего exchange уходила в интернет через шлюз, нужно прописать его адрес в Networks, а в Exchange указать адрес шлюза и задать ему соответствующий порт для работы (в нашем случае — это 26 порт).
После этого заходим в раздел Spam Detector и Virus Detector и обновляем их. Остальные настройки, в целом, разумны по умолчанию, но в перспективе можно будет ими поиграться. Документация позволяет разобраться с ними достаточно подробно.
Production
Ну и напоследок было необходимо настроить Send connector в MS Exchange на работу по заданному нами внутреннему порту (в нашем случае — 26). Создаем новый коннектор для отправки как обычно, задаем ему осмысленное имя. Затем в PowerShell консоли Exchange с помощью команды Get-SendConnector можно посмотреть, что он действительно создан. Копируем его имя. И вводим команду:
Проверяем, что порт изменился, командой:
Все в порядке — значит, настраиваем в DNS mx запись на наш почтовый шлюз, а также соответствующие ей A и PTR записи. Включаем коннектор, и наш почтовый трафик пошел через новый почтовый шлюз.
Приятные бонусы, которые мы обнаружили в ходе внедрения инструмента
Удобный интерфейс
Можно допилить проверку страны отправки письма (легко гуглится).
Особенность любого спам-фильтра — иногда в спам попадают важные письма. Эта проблема тут решена по умолчанию. Каждый день наш шлюз отправляет пользователю письмо с отчетом, какие письма были заблокированы и предоставляет настроить дальнейшее поведение фильтра для конкретного пользователя, а именно — доставить заблокированное письмо, добавить отправителя в «белый» или «черный» список, удалить заблокированное письмо. Таким образом, эта боль легла на плечи пользователей (ну, по большей части)
Официальная документация, которая может вам пригодиться, если решите использовать Proxmox Mail Gateway — https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html
Чем дело кончилось
Пользователи заметили, что фильтрация спама заработала только на третий день, когда начали получать отчеты от pmg о заблокированных письмах. Немного повозмущались, что отчеты и интерфейс настройки white/black листов на английском, но быстро смирились, так как достойных альтернатив за обозначенную руководством компании стоимость не нашлось. «Бизнес» — решением (и, конечно, стоимостью = 0) остался доволен, но разъяснительную работу с пользователями о «правилах личной гигиены» при использовании электронной почты все равно провели. У ИТ-отдела даже остался коньяк, которым (в узком кругу, в сугубо не рабочее время) и было отмечено благополучное завершение этого сложного и многогранного проекта — «Оградить пользователей от СПАМа».