Apache SpamAssassin многие годы остаётся де‑факто стандартом для фильтрации спама в Linux‑инфраструктуре, но на Windows его обычно вспоминают только как «что‑то экзотическое, если совсем прижало». Причина проста: в *nix всё решается systemd и cron, а под Windows админ часто вынужден собирать «велосипед» из ручного запуска spamd.exespamd.exe, планировщика заданий и самописных батников.
Репозиторий SpamAssassin-Windows-PS7 на GitHub как раз закрывает эту нишу: это набор скриптов на PowerShell 7, который превращает SpamAssassin на Windows 11 в управляемый сервис с ежедневным обновлением правил через Task Scheduler и нормально оформленной логикой запуска/остановки.
Дальше разберёмся, что даёт этот набор, как он устроен и как его встроить в существующую почтовую инфраструктуру на Windows.

Задача: сделать SpamAssassin «гражданином» Windows
Типичный сценарий использования SpamAssassin под Windows выглядит так:
- отдельный хост с портом
783/tcpподspamd; - MTA (hMailServer, Exchange c транспортным агентом, постфиксный шлюз на Linux и т.д.) гоняет сообщения через
spamc; - админ как‑то запускает
spamd.exe, следит, чтобы он не падал, и по ночам обновляет правила.
В Linux всё это делает пакетный менеджер (обновления) и systemd (сервис spamd). На Windows же без дополнительного кода нет:
- штатного сервиса
spamd, который поднимется до логина пользователя и перезапустится после падения; - предсказуемого механизма ежедневного обновления правил
sa-update; - централизованной конфигурации через один профиль/скрипт.
SpamAssassin-Windows-PS7 предлагает решение: поверх портированного SpamAssassin ставится PowerShell‑обвязка, которая:
- создаёт Windows‑сервис для
spamd(через NSSM, собственный wrapper илиsc.exe); - разворачивает структуру каталогов и конфигов;
- подготавливает планировщик заданий для
sa-updateи, при необходимости, перезапуска сервиса после обновления.github+1
Архитектура PowerShell‑набора
Ключевая идея — вынести всё, что относится к инфраструктуре SpamAssassin под Windows, в набор PowerShell‑скриптов и модулей. Типично в таких проектах (и здесь не исключение) присутствуют несколько логических блоков: github
- Скрипт установки.
- Проверяет наличие PowerShell 7.
- Подтягивает бинарники SpamAssassin для Windows.
- Создаёт каталог инсталляции (например,
C:\SpamAssassin). - Готовит базовые конфиги
local.cf, пути к правилам и логам.
- Создание системного сервиса.
- Регистрирует сервис
SpamAssassinв SCM Windows. - Задаёт командную строку запуска
spamd(количество воркеров, порты, лог‑файл, параметры перезапуска). - Настраивает учётную запись, под которой работает сервис, и тип запуска (Automatic/Delayed).
- Регистрирует сервис
- Интеграция с Task Scheduler.
- Создаёт задание для ежедневного запуска
sa-update. - Опционально добавляет триггер перезапуска сервиса после удачного обновления правил.
- Настраивает логирование результатов обновления.
- Создаёт задание для ежедневного запуска
- Профиль/модуль PowerShell.
- Определяет функции: установка, запуск/остановка, просмотр статуса, ручное обновление правил, диагностика.
- Даёт администратору единый интерфейс:
Start-SpamAssassinService,Invoke-SpamAssassinUpdateи т.п.
Такой подход делает SpamAssassin «первоклассным гражданином» Windows‑окружения: для админа всё выглядит и управляется так же, как любой другой сервис.
Практический сценарий: шлюз hMailServer + SpamAssassin на Windows 11
Представим типовую инфраструктуру небольшого офиса:
- один сервер Windows 11/Server 2022 с hMailServer;
- внешние MX на этом же сервере;
- требования фильтровать спам до попадания в ящики пользователей.
Как вписать сюда SpamAssassin с помощью рассматриваемого набора скриптов?
- Разворачиваем SpamAssassin‑окружение.
- Клонируем репозиторий SpamAssassin-Windows-PS7 с GitHub. github
- Запускаем установочный скрипт из PowerShell 7 с повышенными правами.
- Указываем путь установки, порты, параметры
spamd.
- Поднимаем сервис
SpamAssassin.- Скрипт регистрирует Windows‑сервис и стартует его.
- Проверяем, что
spamdслушает нужный порт, и смотрим логи.
- Включаем ежедневные обновления правил.
- В планировщике появляется задача обновления правил.
- При желании добавляем уведомление (например, через лог в Event Log или отправку отчёта по почте).
- Настраиваем hMailServer.
- В разделе антиспама указываем внешний фильтр на
127.0.0.1:783(через spamc или транспортный агент). github - Вносим корректировки в пороговые значения спам‑оценки для локальной политики.
- В разделе антиспама указываем внешний фильтр на
- Добавляем мониторинг.
- Через PowerShell‑функции и стандартные средства Windows можно быстро собрать минимальный мониторинг:
- статус сервиса;
- возраст базы правил;
- объём лог‑файлов.
- Через PowerShell‑функции и стандартные средства Windows можно быстро собрать минимальный мониторинг:
Результат: фильтрация спама реализована средствами, привычными администратору Windows, без необходимости держать отдельную Linux‑виртуалку только ради SpamAssassin.
Почему именно PowerShell 7 и чем это лучше bat‑скриптов
Выбор в пользу PowerShell 7, а не старого Windows PowerShell 5.1, неслучаен:
- Кроссплатформенность. Можно отлаживать и тестировать те же сценарии на Linux‑окружении, если часть инфраструктуры там. github
- Современный язык и экосистема. Модули, пакетный менеджер (
Install-Module), нормальная работа с JSON, HTTP и т.д. - Лучший контроль ошибок и логирования. По сравнению с batch‑скриптами PowerShell даёт более предсказуемый контроль потока и обработку ошибок.
Для админа это означает, что:
- инсталляция и обновление окружения превращаются в повторяемый, описанный кодом процесс (по сути, маленький IaC для конкретного сервиса);
- любой кастом — от смены каталога правил до интеграции с SIEM — можно реализовать на PowerShell, не вылезая в сторонние языки.
Заключение: когда имеет смысл использовать SpamAssassin‑Windows‑PS7
Набор скриптов SpamAssassin-Windows-PS7 будет особенно интересен в сценариях: github
- небольшие и средние компании, где вся почтовая инфраструктура крутится на Windows и не планируется отдельный Linux‑фильтр;
- тестовые стенды и лаборатории, где нужно быстро поднять SpamAssassin на рабочей станции администратора;
- гибридные инфраструктуры, где Linux‑шлюз пока не внедрён, но фильтрацию спама уже нужно «вчера».
Если вы привыкли к подходу «всё важное — под Linux», ставка на Windows‑порт SpamAssassin может показаться компромиссом. Но с появлением грамотной PowerShell‑оркестрации этот компромисс становится вполне рабочим решением, особенно в мире, где IT‑хаус часто начинается именно с одного Windows‑сервера.