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

Ниже приведена пошаговая установка связки Postfix (приём SMTP), OPNsense (межсетевой экран и NAT) и CuckooMX с отправкой образцов в Cuckoo Sandbox по REST API. Скрипт cuckoomx.pl и пример cuckoomx.conf следует брать из каталога cuckooMX modified репозитория Arachnid.UTM.

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

Команды, где явно не указано иное, выполняются с правами суперпользователя (sudo) в оболочке на узле с Postfix.

Установка Postfix и сопутствующих пакетов

Установите пакеты (пример для Debian или Ubuntu):

  • postfix — почтовый агент;

  • postfix-pcre — поддержка выражений PCRE в конфигурации Postfix;

  • mailutils — утилиты для работы с почтовыми ящиками из командной строки.

Установка пакетов Postfix и зависимостей
Figure 1. Установка пакетов в системе
Завершение установки пакетов
Figure 2. Подтверждение установки

В ходе настройки Postfix откроется диалог выбора типа конфигурации.

Диалог конфигурации Postfix
Figure 3. Мастер настройки Postfix
Диалог конфигурации Postfix
Figure 4. Продолжение мастера настройки

Рекомендуется тип Internet Site: Postfix принимает почту в вашей сети как полноценный сервер. Вариант Local only ограничивает приём локальным узлом (или интерфейсом loopback) и для сценария приёма почты из сети обычно не подходит.

Тип установки Internet Site
Figure 5. Выбор типа конфигурации почты

Укажите основной домен почты (FQDN зоны, в которой будут адреса получателей). После завершения установки убедитесь, что служба Postfix активна и слушает TCP-порт 25.

Имя почтового домена и проверка unit
Figure 6. Задание домена и проверка службы
Проверка состояния Postfix
Figure 7. Прослушивание порта 25

Для проверки сокета используйте, например, ss -lntp и убедитесь, что процесс master Postfix слушает порт 25.

Вывод ss: master на порту 25
Figure 8. Прослушивание SMTP на порту 25

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

OPNsense: one-to-one NAT
Figure 18. One-to-one NAT
OPNsense: ARP proxy
Figure 19. ARP-прокси
OPNsense: сводка правил NAT
Figure 20. Сводка по NAT

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

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

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

Проверка SMTP с клиента
Figure 21. Отправка почты с тестового клиента
Просмотр ящика на сервере
Figure 22. Содержимое почтового ящика
Ответ сервера для несуществующего адреса
Figure 23. Поведение для несуществующего получателя
Пример письма с вложением
Figure 24. Письмо с вложением

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

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

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

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

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

Установка CuckooMX

Зависимости Perl и утилита ripmime

Перед размещением скрипта установите перечисленные в вашей ревизии cuckoomx.pl модули Perl (часто пакетируются в дистрибутиве отдельными пакетами lib*-perl). Установите также ripmime, если используете его для отладки.

Установка зависимостей Perl
Figure 26. Установка модулей Perl
Установка пакета ripmime
Figure 27. Установка ripmime

Размещение скрипта и конфигурации

Создайте каталог для конфигурации (пример: /data/cuckoo/conf) и скопируйте в него cuckoomx.conf из поставки. Скрипт cuckoomx.pl разместите в выбранном каталоге (пример: /data/cuckoo/). Пути могут отличаться при согласовании с политикой размещения ПО.

Каталог conf и файл cuckoomx.conf
Figure 28. Каталог конфигурации
Файл cuckoomx.pl в каталоге данных
Figure 29. Каталог со скриптом
Список файлов CuckooMX
Figure 30. Проверка наличия файлов

Сделайте скрипт исполняемым:

sudo chmod +x /data/cuckoo/cuckoomx.pl

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

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

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

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

Редактирование 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 32. Фрагмент настроек API и гостевой ВМ
Пример полного cuckoomx.conf
Figure 33. Полный вид конфигурационного файла (пример)
Продолжение примера cuckoomx.conf
Figure 34. Продолжение конфигурации

Сохраните файл и выйдите из редактора (в 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 35. Сервис smtp до изменения
master.cf: добавлен content_filter
Figure 36. Сервис 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 37. Новый сервис 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 38. Пример запроса к API
Ответ API в терминале
Figure 39. Успешный ответ API

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

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

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

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

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

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

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