Гид по технологиям

Построение шлюза анти-спама: руководство по MailScanner, Postfix, SpamAssassin и ClamAV

• 9 min read • DevOps • Обновлено 28 Nov 2025
Шлюз анти-спама: Postfix, MailScanner, SpamAssassin и ClamAV
Шлюз анти-спама: Postfix, MailScanner, SpamAssassin и ClamAV

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

By Brian Goldberg - {brian AT carbonite D0T com}

www.carbonite.com

Спам эволюционировал из раздражающей мелочи в реальную угрозу. Системным администраторам нужна стратегия борьбы со спамом. Можно устанавливать фильтры на каждом клиенте, но это трудоёмко в установке и сопровождении. Более удобный вариант — централизованное устройство, которое фильтрует почту до попадания её в вашу сеть. Такой «Анти-Спам Шлюз» проще управлять, его легче поддерживать и тонко настраивать для повышения эффективности.

Обзор

  1. Построение минимального Linux-сервера a. Настройки пользователя и локали b. Разметка диска c. Настройка брандмауэра (опция) d. Выбор пакетов e. Переменная LANG

  2. Установка Postfix (MTA) a. Отключение sendmail b. Установка Postfix c. Настройка Postfix d. Тестирование e. Пересылка почты f. Повторное тестирование

  3. Установка MailScanner a. Установка пакета MailScanner b. Начальная настройка MailScanner

  4. Установка SpamAssassin a. Установка SpamAssassin и модулей Perl b. Настройка через MailScanner

  5. Установка ClamAV a. Сборка и установка ClamAV b. Настройки и обновление сигнатур

–

Кому подходит это руководство

Краткое определение: MTA — Mail Transfer Agent, агент передачи почты; MailScanner — программа, интегрирующая антивирусы и анти-спам на уровне MTA; SpamAssassin — фильтр спама на основе правил и эвристик; ClamAV — антивирус с открытыми сигнатурами.

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

Важно: это руководство ориентировано на локальные развёртывания на Linux (RedHat/Fedora-подобные). Не описывает облачные managed-решения.


Шаг I — Построение минимального Linux-сервера

Я использовал достаточно свежие версии Red Hat Linux. RedHat 8, 9 или Fedora подойдут. Я выбрал режим «Custom» в GUI-установщике.

a. Пользовательские настройки

Выберите стандартные варианты для клавиатуры, языка и временной зоны.

b. Разметка диска

Рекомендуемая минимальная разметка:

/
/usr
/var

Почему: журналы и очереди почты находятся в /var; выделение отдельного раздела защитит систему от «разрастания» логов и заполнения корневой файловой системы.

c. Брандмауэр

Я выбрал «без брандмауэра», рассматривая устройство как средство управления почтовым трафиком, а не замену полноценному внешнему firewall’у. В пропускной модели внешняя сеть должна контролироваться реальным брандмауэром. Если вы оставите брандмауэр, убедитесь, что цепочки и правила IPTables/Firewalld разрешают входящий и исходящий SMTP (TCP/25), и, при необходимости, доступ для администрирования (SSH).

Важно: при публичном размещении шлюза рекомендуется использовать фильтрацию на границе сети — настроить только необходимые порты.

d. Выбор пакетов

При выборе пакетов в установщике снимите все флажки и вручную отметьте минимальный набор:

  • Editors — нужен vi или другой редактор для правки конфигураций
  • Development Tools — потребуются при сборке некоторых компонентов (ClamAV, модулей Perl и т. п.)

После установки сервер перезагрузится.

e. Исправление переменной LANG

Пример: LANG=”en_US.UTF-8” у некоторых сборок RedHat может вызвать ошибки компиляции в perl-скриптах, используемых MailScanner и SpamAssassin. Рекомендуется установить локаль без UTF-8 для процесса сборки.

Отредактируйте файл /etc/sysconfig/i18n и поменяйте строки:

LANG="en_US.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:en"

на

LANG="en_US"
SUPPORTED="en_US.UTF-8:en_US:en"

Затем экспортируйте переменную:

[root@titan sysconfig]# LANG='en_US'
[root@titan sysconfig]# export LANG

Пояснение: это временное решение для корректной сборки; можно вернуться к UTF-8 после установки.


Шаг II — Установка Postfix

Я использую Postfix вместо sendmail как MTA. Postfix проще в конфигурации и часто легче по ресурсам.

a. Отключение sendmail

Перед установкой Postfix остановите и отключите существующие службы sendmail:

service sendmail stop
chkconfig sendmail off

b. Установка Postfix

Скачайте Postfix с www.postfix.org (версию согласно документации) и установите согласно инструкции. Убедитесь, что вы добавили необходимые записи в файлы /etc/passwd, /etc/group и /etc/aliases — Postfix и MailScanner без них не смогут корректно работать.

При make install примите большинство дефолтных настроек, если у вас нет специфичных политик безопасности или требований домена.

c. Настройка Postfix

Postfix управляет поведением в файлах main.cf и master.cf. Ниже — обязательные правки для простого шлюза:

myhostname = titan.corp.com
mydomain = corp.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, $mydomain
mynetwork_style = host

Примечание: измените значения под вашу инфраструктуру. Некоторые строки нужно раскомментировать, другие заменить.

d. Тестирование Postfix

Очень важно протестировать MTA до установки MailScanner. Подключитесь к серверу по telnet на порт 25 и отправьте тестовое сообщение вручную или используйте простой mail-клиент.

Пример простого теста через telnet:

telnet localhost 25
EHLO test
MAIL FROM:
RCPT TO:
DATA
Subject: Test

Test body
.
QUIT

e. Настройка пересылки почты (relay)

Мы не хотим, чтобы шлюз был конечной точкой доставки. Шлюз должен пересылать всю почту для внутреннего домена на ваш основной SMTP-сервер. При этом важно не сделать сервер открытым релеем.

Добавьте в main.cf:

relay_domains = lab.net

Это скажет Postfix, какие домены он должен ретранслировать. Только почта, предназначенная для этих доменов, будет ретранслироваться.

Добавьте метод разрешения адресов для пересылки:

transport_maps = hash:/etc/postfix/transport

В /etc/postfix/transport добавьте:

lab.net                smtp:[192.168.2.225]

Это настроит пересылку домена lab.net на IP 192.168.2.225 по SMTP.

Соберите хеш таблицу:

postmap /etc/postfix/transport

И отключите добавление собственного домена в заголовки:

append_at_myorigin = no

f. Повторное тестирование

Перезапустите Postfix и проверьте доставку:

postfix stop
postfix start

Повторите тесты доставки. Убедитесь, что почта для указанных доменов пересылается дальше и что сервер не является открытым релеем.


Шаг III — Установка MailScanner

MailScanner — интерфейс между MTA и сканерами (антивирус, анти-спам). Он просматривает входящие сообщения, применяет правила и передаёт почту дальше.

a. Установка MailScanner

Скачайте пакет с http://mailscanner.info (версию для RedHat/Mandrake, если используете соответствующую систему).

Распакуйте и запустите установку:

tar zxvf MailScanner-.tar.gz
./install.sh

Убедитесь, что MailScanner включён на нужных run-level’ах:

chkconfig --list | grep MailScanner

Ожидаемый результат (пример):

MailScanner     0:off   1:off   2:on    3:on    4:on    5:on    6:off

MailScanner сам запускает Postfix, поэтому отключите postfix через chkconfig:

chkconfig postfix off

b. Настройка MailScanner

Добавьте в main.cf Postfix’а поддержку header_checks, чтобы MailScanner мог удерживать сообщения во входящей очереди для обработки:

header_checks = regexp:/etc/postfix/header_checks

В /etc/postfix/header_checks добавьте:

/^Received:/ HOLD

Обновите /etc/MailScanner/MailScanner.conf следующими параметрами:

Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix

Настройте права каталогов MailScanner:

chown postfix.postfix /var/spool/MailScanner/incoming
chown postfix.postfix /var/spool/MailScanner/quarantine

Тест: отправьте почту и убедитесь, что сообщение проходит через MailScanner и пересылается дальше.


Шаг IV — SpamAssassin

SpamAssassin — основной инструмент фильтрации спама. MailScanner управляет вызовом SpamAssassin.

a. Установка SpamAssassin

Необходимые модули Perl:

Digest::SHA1
HTML::Parser

Опциональные модули (для расширенной функциональности):

MIME::Base64
DB_File
Net::DNS
Mail::SPF::Query
Time::HiRes

Установка через CPAN:

perl -MCPAN -e 'install Mail::SpamAssassin'
perl -MCPAN -e 'install Net::DNS'

b. Настройка SpamAssassin

Конфигурирование производится в основном через MailScanner. В /etc/MailScanner/MailScanner.conf измените:

Use SpamAssassin = no

на

Use SpamAssassin = yes

Укажите каталог состояния пользователя SpamAssassin:

SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

Создайте каталог и установите владельца:

mkdir /var/spool/MailScanner/spamassassin
chown postfix.postfix /var/spool/MailScanner/spamassassin

Перезапустите MailScanner:

service MailScanner restart

Совет: настройте пороговые значения и пользовательские правила SpamAssassin в соответствии с реальными примерами спама и легитимных писем из вашей организации.


Шаг V — ClamAV

ClamAV — антивирус с открытыми сигнатурами. Используется в связке с MailScanner для проверки вложений.

a. Установка ClamAV

Создайте пользователя и группу clamav:

groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

Распакуйте пакет:

tar xvzf clamav-0.80.tar.gz

Базовая сборка:

./configure
make
make install

Если при сборке возникнут ошибки с libidn, возможное решение (пример для Fedora Core 3):

ln -s /usr/lib/libidn.so.11.4.6 /usr/lib/libidn.so

Затем установите Perl-модули для интеграции с MailScanner:

perl -MCPAN -e shell
install Parse::RecDescent
install Inline
install Mail::ClamAV

b. Настройка ClamAV и обновление сигнатур

В /usr/local/etc/clamd.conf уберите символ ‘#’ перед словом ‘Example’ (или снимите примерные строки, если они мешают). То же сделайте в /usr/local/etc/freshclam.conf.

Обновите сигнатуры:

[root@titus]# freshclam
ClamAV update process started at Sat Jan 29 19:43:51 2005
main.cvd is up to date (version: 29, sigs: 29086, f-level: 3, builder: tomek)
daily.cvd is up to date (version: 691, sigs: 804, f-level: 4, builder: ccordes)

В MailScanner.conf укажите использование ClamAV:

Virus Scanners = clamav

Убедитесь, что параметр Monitors for ClamAV Updates указывает на каталог с базами вирусов, например:

/usr/local/share/clamav/*.cvd

Перезапустите соответствующие сервисы.


Тестирование и контроль качества

Краткая методика тестирования перед запуском в продакшн:

  1. Тест на доставку: отправляйте письма к разным получателям, включая внешние и внутренние домены.
  2. Тест на спам: используйте эталонные тестовые сообщения (например, EICAR для антивируса) и набор реальных спам-примеров.
  3. Проверка очередей Postfix: убедитесь, что MailScanner корректно переводит сообщения между очередями (/var/spool/postfix/hold → /var/spool/postfix/incoming).
  4. Мониторинг логов: /var/log/maillog, /var/log/messages и логи MailScanner.
  5. Тест на открытое реле: попытайтесь отправить письмо, где отправитель не из ваших relay_domains — оно должно быть отклонено.

Критерии приёмки

  • Сервер принимает SMTP-соединения и отвечает на EHLO/HELO.
  • Почта для внутренних доменов корректно пересылается на основной SMTP-сервер.
  • SpamAssassin помечает спам (по порогу, настроенному в MailScanner) и помещает в карантин или добавляет заголовки.
  • ClamAV обнаруживает тестовые вредоносные образцы.
  • Нет открытого релея для посторонних доменов.

Руководство по эксплуатации и поддержке (SOP)

Ежедневные проверки (быстрый чеклист):

  • Проверить работоспособность процессов: postfix, MailScanner, clamd, freshclam
  • Проверить логи на ошибки и большое количество отклонённых писем
  • Убедиться, что обновления сигнатур ClamAV были успешны
  • Убедиться, что подписи и правила SpamAssassin обновляются (если используется обновление правил)

Еженедельные задачи:

  • Просмотреть карантин MailScanner и обучить/изменить правила по ложным срабатываниям
  • Проверить, нет ли роста объёма очередей в Postfix
  • Проверить доступность внешнего SMTP-сервера для relay

План реакции на инцидент (общая последовательность):

  1. Выяснить источник проблемы: логи Postfix/MailScanner/clamd
  2. Изолировать проблему: при необходимости временно отключить MailScanner или ClamAV
  3. Откат конфигурации: вернуть предыдущие конфиги из репозитория
  4. Проверить доставку почты на тестовых машинах
  5. Документировать причину и действия для пост-инцидентного анализа

Безопасность и приватность

  • Минимизируйте привилегии: процессы должны работать от отдельных пользователей (postfix, clamav).
  • Отдельный раздел /var гарантирует защиту от исчерпания места, которое может нарушить работу лога и очередей.
  • Логи содержат метаданные почты; определите политику хранения и доступа (GDPR/локальные правила конфиденциальности).
  • Обновляйте компоненты и сигнатуры регулярно. Настройте мониторинг обновлений и автоматический алерт при сбоях обновления.

Примечание по GDPR: если в почтовых сообщениях содержатся персональные данные граждан ЕС, убедитесь, что правила хранения логов и карантина соответствуют требованиям регулятора.


Отладка распространённых проблем

Проблема: почта не проходит через MailScanner

  • Проверьте, не отключён ли postfix в chkconfig (MailScanner запускает postfix самостоятельно).
  • Убедитесь, что права на каталоги /var/spool/MailScanner/* установлены для пользователя postfix.
  • Проверьте header_checks и транспортные карты Postfix.

Проблема: ClamAV не обновляет базы

  • Проверьте network access для freshclam
  • Проверьте правильность конфигурации freshclam.conf

Проблема: ложные срабатывания SpamAssassin

  • Проанализируйте заголовки X-Spam-Report и правила, которые сработали
  • Добавьте локальные whitelist/blacklist правила в MailScanner

Рекомендации по развёртыванию и миграции

  • Проводите тестирование в отдельной среде до перевода в продакшн.
  • Разверните мониторинг для ключевых метрик (очереди, CPU, диск, события детекции).
  • При переходе с клиентских фильтров на шлюз обеспечьте обратную совместимость: проинформируйте пользователей, протестируйте фильтры и списки безопасности.

Дополнения: чеклисты, шаблоны и справочник

Роль-based чеклист для системного администратора при установке

  • Подготовка ОС: создать пользователей, настроить локаль, разметку диска
  • Установка build tools
  • Установка Postfix и базовая конфигурация
  • Установка MailScanner и интеграция с Postfix
  • Установка SpamAssassin и необходимых perl-модулей
  • Сборка ClamAV и установка perl-обвязок
  • Настройка прав и тестирование

Шаблон транспортной карты /etc/postfix/transport

# Формат: домен    транспорт:[IP]
lab.net                smtp:[192.168.2.225]

Сниппет настройки MailScanner (основное):

Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix
Use SpamAssassin = yes
SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin
Virus Scanners = clamav

1-line глоссарий

  • MTA: Mail Transfer Agent — программа для передачи почты (Postfix).
  • MailScanner: контроллер, соединяющий MTA с антивирусом и анти-спамом.
  • SpamAssassin: система фильтрации спама на основе правил и эвристик.
  • ClamAV: антивирус с набором сигнатур для обнаружения вредоносных вложений.

Дерево решений для развёртывания шлюза (Mermaid)

flowchart TD
  A[Нужен централизованный фильтр почты?] -->|Да| B{Есть внешний firewall?}
  B -->|Да| C[Развернуть шлюз в DMZ]
  B -->|Нет| D[Настроить firewall перед шлюзом]
  C --> E[Установить Postfix + MailScanner]
  D --> E
  E --> F{Требуется антивирус?}
  F -->|Да| G[Установить ClamAV]
  F -->|Нет| H[Оставить только SpamAssassin]
  G --> I[Настроить обновления сигнатур]
  H --> I
  I --> J[Тестирование и мониторинг]

Социальные превью для публикации

OG title: Построение анти-спам шлюза с Postfix и MailScanner

OG description: Полное руководство по развёртыванию централизованного шлюза для фильтрации спама и вложений с Postfix, MailScanner, SpamAssassin и ClamAV.


Оригинальное местоположение документа:

http://www.carbonite.com/guides/scannerbuild.html

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро