Конфигурация и сценарии настройки CuckooMX

Ниже приведены сценарии настройки связки Postfix (приём SMTP), OPNsense (межсетевой экран и NAT) и CuckooMX с отправкой образцов в Cuckoo Sandbox по REST API.

Перед настройкой установите Postfix и разместите cuckoomx.pl с cuckoomx.conf (см. установку CuckooMX).

Иллюстрации воспроизводят рабочую конфигурацию из внутренней инструкции: адреса, доменные имена и подсети на скриншотах относятся к лабораторному стенду; на продакшене замените их на свои значения.

Настройка main.cf

Отредактируйте /etc/postfix/main.cf и задайте параметры в соответствии с вашей топологией, в частности:

  • myhostname — имя узла в почтовой системе;

  • inet_protocols — при необходимости ограничьте до ipv4, если IPv6 не используется;

  • mynetworks — перечислите доверенные подсети (например сегмент DMZ), через запятую после существующих значений;

  • inet_interfaces — для приёма из сети укажите all или явный список интерфейсов вместо loopback-only.

Редактирование main.cf
Figure 1. Фрагмент файла main.cf

Проверьте синтаксис и просмотрите только изменённые параметры:

sudo postfix check
postconf -n
Вывод postconf -n
Figure 2. Проверка параметров Postfix

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

Сетевые параметры узла с Postfix

На узле с Postfix настройте адресацию интерфейсов (пример: адрес в подсети VLAN и шлюз сегмента DMZ). Значения на скриншоте иллюстративны.

Назначение IP-адреса на интерфейсе
Figure 3. Сетевой интерфейс узла

Публикация SMTP через OPNsense

Если перед Postfix расположен шлюз OPNsense, настройте правила межсетевого экрана и переадресацию порта 25 на внутренний адрес сервера Postfix.

Правило межсетевого экрана

Создайте правило на внешнем интерфейсе (пример — WAN_1): направление входящий (In), протокол TCP, порт SMTP (25), источник согласно политике безопасности, назначение — адрес Postfix в DMZ.

OPNsense: правило firewall
Figure 4. Создание правила: общие параметры
OPNsense: протокол TCP
Figure 5. Транспортный протокол
OPNsense: назначение правила
Figure 6. Адрес назначения

При необходимости создайте аналогичные правила для других внешних интерфейсов или зон.

Переадресация порта SMTP (NAT port forward)

Настройте переадресацию внешнего TCP/25 на внутренний IP узла Postfix (Redirect target IP). Диапазон портов назначения задайте 25:25, если пробрасывается только SMTP.

NAT: интерфейс и источник
Figure 7. Параметры port forward
NAT: внешний адрес и порт
Figure 8. Адрес и порт назначения
NAT: перенаправление на Postfix
Figure 9. Внутренний адрес Postfix

Дополнительно: NAT one-to-one и ARP

При использовании внешнего адреса, отличного от адреса интерфейса, может потребоваться согласованная настройка one-to-one NAT и прокси ARP (зависит от топологии).

OPNsense: one-to-one NAT
Figure 10. One-to-one NAT
OPNsense: ARP proxy
Figure 11. ARP-прокси
OPNsense: сводка правил NAT
Figure 12. Сводка по NAT

Проверьте доставку тестового сообщения с внешнего клиента (например с отдельной рабочей станции в другой подсети).

Проверка приёма и содержимого почты

Отправьте тестовое сообщение на адрес на вашем Postfix. Убедитесь, что ящик получателя обновляется, а ответы сервера соответствуют ожиданиям (в том числе для несуществующих локальных получателей, если такая проверка входит в регламент).

Проверка SMTP с клиента
Figure 13. Отправка почты с тестового клиента
Просмотр ящика на сервере
Figure 14. Содержимое почтового ящика
Ответ сервера для несуществующего адреса
Figure 15. Поведение для несуществующего получателя
Пример письма с вложением
Figure 16. Письмо с вложением

Извлечение вложений утилитой ripmime

Postfix передаёт в контент-фильтр MIME-тело сообщения, а не отдельный файл вложения. Для ручной проверки из файла ящика можно применить ripmime:

sudo apt install ripmime
ripmime -i /path/to/mailbox -d /path/to/extract/dir

Параметр -i задаёт файл ящика (или Maildir), -d — каталог для извлечённых частей.

Извлечение вложений ripmime
Figure 17. Пример вызова ripmime

Настройка CuckooMX

Права доступа

Пользователь, указанный в user= для сервиса pipe в master.cf, должен иметь возможность читать cuckoomx.conf, записывать в каталог карантина (outputdir в XML) и вызывать sendmail. Настройте владельца и группу, либо ACL, вместо широких прав на всех.

На лабораторных стендах иногда выставляют полные права на каталог и файлы для ускорения отладки; на промышленной эксплуатации такой подход не рекомендуется.

Права на дерево каталогов
Figure 18. Пример широких прав на каталог (только для лаборатории)

Редактирование cuckoomx.conf

Откройте файл конфигурации в редакторе, например:

sudo nano /data/cuckoo/conf/cuckoomx.conf

Задайте:

  • в элементе api-url — базовый URL REST API Cuckoo Sandbox (пример на скриншоте: http://192.168.30.53:8090);

  • в элементе api-token — токен из cuckoo.conf на стороне песочницы; вводите значение без лишних пробелов; не путайте латинскую букву «O» с цифрой «0»;

  • в элементе guest — имя гостевой виртуальной машины в Cuckoo, на которой выполняется анализ.

Фрагмент cuckoomx.conf: api-url
Figure 19. Фрагмент настроек API и гостевой ВМ
Пример полного cuckoomx.conf
Figure 20. Полный вид конфигурационного файла (пример)
Продолжение примера cuckoomx.conf
Figure 21. Продолжение конфигурации

Сохраните файл и выйдите из редактора (в nano: запись — Ctrl+O, выход — Ctrl+X).

Интеграция с Postfix: файл master.cf

cd /etc/postfix
sudo nano master.cf

В сервисе smtp для smtpd добавьте опцию content_filter=cuckoomx в той же многострочной записи, что и smtpd, с корректным отступом столбцов. Ошибка в этом месте приводит к сообщению об ошибке при выполнении postfix check.

master.cf: сервис smtp
Figure 22. Сервис smtp до изменения
master.cf: добавлен content_filter
Figure 23. Сервис smtp с content_filter

В конец master.cf добавьте сервис типа pipe с именем cuckoomx, совпадающим с content_filter. Укажите непривилегированного пользователя (например cuckoomx, cuckoo или отдельную учётную запись) и путь к cuckoomx.pl в argv. Не используйте пользователя root. Макросы Postfix в конце строки argv — -f ${sender} ${recipient} — оставьте без изменений (подстановку выполняет Postfix, не оболочка).

Пользователь не обязан совпадать с учётной записью процесса Cuckoo на другом узле: постановка задач выполняется по API.

master.cf: сервис cuckoomx pipe
Figure 24. Новый сервис pipe для CuckooMX

Перезагрузите конфигурацию Postfix:

sudo systemctl reload postfix

Проверка доступности API

Перед приёмом боевой почты проверьте с узла Postfix доступ к API (при необходимости установите пакет curl). Базовый URL должен совпадать с api-url в cuckoomx.conf (без слэша в конце). Типовая проверка состояния Cuckoo 2.x:

curl "http://АДРЕС_API:8090/cuckoo/status"

Если ответ имеет код 401, включена проверка токена; укажите тот же токен, что в api-token:

curl -H "Authorization: Bearer ВАШ_ТОКЕН" "http://АДРЕС_API:8090/cuckoo/status"

Подробнее о путях /tasks/create/file и заголовке Bearer см. справочник CuckooMX и справочник Cuckoo Sandbox.

Проверка API через curl
Figure 25. Пример запроса к API
Ответ API в терминале
Figure 26. Успешный ответ API

После отправки письма с вложением при корректной настройке в каталоге данных (например под /data/cuckoo/) появляется рабочий каталог карантина, а в веб-интерфейсе Cuckoo — новые задачи анализа.

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

sudo tail -f /var/log/mail.log | grep cuckoomx

Сообщения об ошибках в журнале Postfix

Если postfix check указывает на строку с content_filter, убедитесь, что опция продолжает запись сервиса smtp … smtpd, а не оформлена отдельной строкой без привязки к сервису (подробнее — устранение неисправностей).

При ошибках вида «не найден модуль Perl» установите недостающие пакеты модулей и снова выполните sudo systemctl reload postfix.

mail.log: ошибка Perl
Figure 27. Пример ошибки загрузки модуля Perl в журнале

Следующая страница: Установка CuckooMX.