Построение шлюза анти-спама: руководство по MailScanner, Postfix, SpamAssassin и ClamAV
Кратко: инструкция показывает, как собрать централизованный шлюз анти-спама на базе Linux с Postfix (MTA), MailScanner (оркестратор), SpamAssassin (анти-спам) и ClamAV (антивирус). Включены подготовка сервера, установка и конфигурация каждого компонента, тестирование и рекомендации по эксплуатации. Подойдёт для малых и средних предприятий, которые хотят фильтровать почту до попадания в внутреннюю сеть.
By Brian Goldberg - {brian AT carbonite D0T com}
www.carbonite.com
Спам эволюционировал из раздражающей мелочи в реальную угрозу. Системным администраторам нужна стратегия борьбы со спамом. Можно устанавливать фильтры на каждом клиенте, но это трудоёмко в установке и сопровождении. Более удобный вариант — централизованное устройство, которое фильтрует почту до попадания её в вашу сеть. Такой «Анти-Спам Шлюз» проще управлять, его легче поддерживать и тонко настраивать для повышения эффективности.
Обзор
Построение минимального Linux-сервера a. Настройки пользователя и локали b. Разметка диска c. Настройка брандмауэра (опция) d. Выбор пакетов e. Переменная LANG
Установка Postfix (MTA) a. Отключение sendmail b. Установка Postfix c. Настройка Postfix d. Тестирование e. Пересылка почты f. Повторное тестирование
Установка MailScanner a. Установка пакета MailScanner b. Начальная настройка MailScanner
Установка SpamAssassin a. Установка SpamAssassin и модулей Perl b. Настройка через MailScanner
Установка 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 offb. Установка 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 = nof. Повторное тестирование
Перезапустите 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:offMailScanner сам запускает Postfix, поэтому отключите postfix через chkconfig:
chkconfig postfix offb. Настройка 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::ClamAVb. Настройка 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Перезапустите соответствующие сервисы.
Тестирование и контроль качества
Краткая методика тестирования перед запуском в продакшн:
- Тест на доставку: отправляйте письма к разным получателям, включая внешние и внутренние домены.
- Тест на спам: используйте эталонные тестовые сообщения (например, EICAR для антивируса) и набор реальных спам-примеров.
- Проверка очередей Postfix: убедитесь, что MailScanner корректно переводит сообщения между очередями (/var/spool/postfix/hold → /var/spool/postfix/incoming).
- Мониторинг логов: /var/log/maillog, /var/log/messages и логи MailScanner.
- Тест на открытое реле: попытайтесь отправить письмо, где отправитель не из ваших relay_domains — оно должно быть отклонено.
Критерии приёмки
- Сервер принимает SMTP-соединения и отвечает на EHLO/HELO.
- Почта для внутренних доменов корректно пересылается на основной SMTP-сервер.
- SpamAssassin помечает спам (по порогу, настроенному в MailScanner) и помещает в карантин или добавляет заголовки.
- ClamAV обнаруживает тестовые вредоносные образцы.
- Нет открытого релея для посторонних доменов.
Руководство по эксплуатации и поддержке (SOP)
Ежедневные проверки (быстрый чеклист):
- Проверить работоспособность процессов: postfix, MailScanner, clamd, freshclam
- Проверить логи на ошибки и большое количество отклонённых писем
- Убедиться, что обновления сигнатур ClamAV были успешны
- Убедиться, что подписи и правила SpamAssassin обновляются (если используется обновление правил)
Еженедельные задачи:
- Просмотреть карантин MailScanner и обучить/изменить правила по ложным срабатываниям
- Проверить, нет ли роста объёма очередей в Postfix
- Проверить доступность внешнего SMTP-сервера для relay
План реакции на инцидент (общая последовательность):
- Выяснить источник проблемы: логи Postfix/MailScanner/clamd
- Изолировать проблему: при необходимости временно отключить MailScanner или ClamAV
- Откат конфигурации: вернуть предыдущие конфиги из репозитория
- Проверить доставку почты на тестовых машинах
- Документировать причину и действия для пост-инцидентного анализа
Безопасность и приватность
- Минимизируйте привилегии: процессы должны работать от отдельных пользователей (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 = clamav1-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.
Оригинальное местоположение документа:
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента