FreeBSD
Общие данные
Платформа Радар поддерживает сбор событий со следующих версий операционной системы FreeBSD:
- FreeBSD 14.0-RELEASE;
- FreeBSD 13.2-RELEASE.
Для корректной работы механизма журналирования событий требуются следующие службы:
syslog-ng
- служба журналирования, предназначенная для отправки событий;auditd
- служба аудита, фиксирующая события, связанные с активностью приложений и систем.
Примечание: в стандартной конфигурации FreeBSD управление журналами осуществляется службой
syslogd
, которая поддерживает передачу данных исключительно по протоколу UDP..Для обеспечения безопасной передачи журналов по протоколу TCP, а также реализации механизмов фильтрации событий по источникам и их содержимому, рекомендуется использовать пакет
syslog-ng
.
Характеристики источника в Платформе Радар:
Характеристика | Значение |
---|---|
Название | FreeBSD |
Номер (Порт) | 2722 |
Вендор | The-FreeBSD-Project |
Тип | OS |
Профиль сбора | tcp_input |
Настройка источника включает в себя следующие процессы:
- Настройка службы syslog-ng.
- Настройка журналирования ZFS.
- Настройка службы auditd.
- Включение источника на платформе.
Настройка службы syslog-ng
для FreeBSD
Установка и активация службы
Установите пакет syslog-ng
и включите автозагрузку:
# pkg install syslog-ng
# sysrc syslog_ng_enable="YES"
Базовая конфигурация
Пример полной конфигурации syslog-ng (/usr/local/etc/syslog-ng.conf
):
@version:4.8
@include "scl.conf"
# ======================================================
# Глобальные настройки
# ======================================================
options {
chain_hostnames(off);
flush_lines(0);
threaded(yes);
};
# chain_hostnames - управляет записью имён хостов в логе (в текущем виде не будет добавлять предыдущие имена хоста к сообщениям при пересылке события)
# flush_lines - Определяет, после скольких сообщений syslog-ng будет записывать данные на диск.
# При необходимости выставить определенное значение (например 100) для сокращения количества операций записи на диск
# threaded - управляет многопоточностью обработки сообщений
# ======================================================
# Источники
# ======================================================
# Системные источники:
source src { system(); udp(); internal(); file("/var/log/uucp/Log" follow_freq(1)); };
# Источник для сбора событий ZFS:
# source s_zfs_events {
# file("/var/log/zfs_events.log" # Читает логи из указанного файла
# flags(no-multi-line, no-parse) # Отключает разбор многострочных сообщений и парсинг формата
# multi-line-mode(indented) # При наличии многострочных событий, объединяет их по отступам
# follow_freq(1)); # Управляет частотой проверки обновления файла (секунды)
# };
# ======================================================
# Назначения
# ======================================================
# Базовое унифицированное назначение для отправки событий в SIEM (тут требуется указать данные для подключения к узлу с установленным лог-коллектором):
destination d_siem { tcp("<ip адрес лог-коллектора>" port(<порт лог-коллектора>) log_fifo_size(1000)); };
# Стандартные назначения для записи системных журналов:
# Основные destination (без изменений имен файлов)
destination d_messages { file("/var/log/messages"); }; # Общие системные сообщения
destination d_security { file("/var/log/security"); }; # События безопасности
destination d_auth { file("/var/log/auth.log"); }; # Аутентификация и авторизация
# destination d_mail { file("/var/log/maillog"); }; # Почтовый сервис
# destination d_lpd_errs { file("/var/log/lpd-errs"); }; # Система печати LPD
destination d_xfer { file("/var/log/xferlog"); }; # FTP-транзакции
destination d_cron { file("/var/log/cron"); }; # Задачи планировщика
# destination d_debug { file("/var/log/debug.log"); }; # Отладочная информация
destination d_slip { file("/var/log/slip.log"); }; # SLIP-соединения
destination d_ppp { file("/var/log/ppp.log"); }; # PPP-соединения
destination d_kern { file("/var/log/kern.log"); }; # Сообщения ядра
destination d_firewall { file("/var/log/firewall.log"); }; # Фаервол/фильтрация пакетов
destination d_devd { file("/var/log/devd.log"); }; # События демона devd
# ======================================================
# Фильтры
# ======================================================
# Фильтры по уровню важности:
filter f_emerg { level(emerg); }; # 0: Emergency - система неработоспособна
filter f_alert { level(alert..emerg); }; # 1: Alert - требуется немедленное действие
filter f_crit { level(crit..emerg); }; # 2: Critical - критические состояния
filter f_err { level(err..emerg); }; # 3: Error - ошибки приложений
filter f_warning { level(warning..emerg); }; # 4: Warning - предупреждения
# filter f_notice { level(notice..emerg); }; # 5: Notice - важные штатные события
# filter f_info { level(info..emerg); }; # 6: Informational - информационные сообщения
# filter f_debug { level(debug..emerg); }; # 7: Debug - отладочная информация
# Фильтры по facility:
filter f_auth { facility(auth); }; # Аутентификация
filter f_authpriv { facility(authpriv); }; # Привилегированная авторизация
filter f_cron { facility(cron); }; # Планировщик задач
filter f_kern { facility(kern); }; # Ядро системы
filter f_ftp { facility(ftp); }; # FTP-сервис
filter f_ppp { program("ppp"); }; # PPP-соединения (добавлен)
filter f_slip { program("slattach"); }; # SLIP-соединения
# filter f_daemon { facility(daemon); }; # Фоновые демоны
# filter f_mail { facility(mail); }; # Почтовый сервис
# filter f_security { facility(security); }; # Сообщения безопасности (устаревшее)
# filter f_uucp { facility(uucp); }; # UUCP
# filter f_news { facility(news); }; # Сервер новостей
# filter f_local0 { facility(local0); }; # Локальные facility
# filter f_local1 { facility(local1); };
# filter f_local2 { facility(local2); };
# filter f_local3 { facility(local3); };
# filter f_local4 { facility(local4); };
# filter f_local5 { facility(local5); };
# filter f_local6 { facility(local6); };
# filter f_local7 { facility(local7); };
# Специальные фильтры:
filter f_firewall { program("ipfw|pf|ipfilter"); }; # Фильтрация пакетов
filter f_devd { not (program("devd") and level(info)); }; # Исключение спама devd
# filter f_zfs_events { tags("zfs_events"); }; # ZFS события (стандартный фильтр)
# Опциональный фильтр для devd (не производительный)
# filter f_devd_important {
# program("devd") and (
# match("usb|umass|da[0-9]|ugen|iface" value("MESSAGE")) # USB, диски, сетевые интерфейсы
# or level(warning..emerg) # Только предупреждения и выше
# );
# };
# ======================================================
# Дополнительные действия
# ======================================================
# Перезапись program для событий zfs (необходимо корректной нормализации)
rewrite r_set_program { set("zfs_events", value("PROGRAM")); };
# Правила маршрутизации для отправки в SIEM:
# log { source(s_zfs_events); rewrite(r_set_program); destination(d_siem); }; # ZFS в SIEM
log { source(src); filter(f_devd); destination(d_siem); }; # Системные логи (без devd) в SIEM
# Запись основных системных событий в файл:
log { source(src); filter(f_devd); destination(d_devd); flags(final); }; # События демона devd (управление устройствами)
log { source(src); destination(d_messages); }; # Все сообщения → /var/log/messages
log { source(src); filter(f_auth); destination(d_auth); }; # Аутентификация → auth.log
log { source(src); filter(f_authpriv); destination(d_security); }; # Привилегированные операции → security
log { source(src); filter(f_kern); destination(d_kern); }; # Ядро → kern.log
log { source(src); filter(f_cron); destination(d_cron); }; # Cron-задачи → cron
log { source(src); filter(f_ftp); destination(d_xfer); }; # FTP → xferlog
log { source(src); filter(f_firewall); destination(d_firewall); }; # Фаервол → firewall.log
# log { source(src); filter(f_mail); destination(d_mail); }; # Почта → maillog
# log { source(src); filter(f_debug); destination(d_debug); }; # Отладка → debug.log
# Критические события (дублирование в отдельные файлы):
log { source(src); filter(f_emerg); destination(d_security); flags(final); }; # Emergency → security
log { source(src); filter(f_alert); destination(d_security); flags(final); }; # Alert → security
log { source(src); filter(f_crit); destination(d_security); flags(final); }; # Critical → security
# Сетевые подключения (PPP/SLIP):
log { source(src); filter(f_ppp); destination(d_ppp); }; # PPP → ppp.log
log { source(src); filter(f_slip); destination(d_slip); }; # SLIP → slip.log
Где:
src
- стандартный источник syslog (определен в конфигурационном файле по умолчанию;d_siem
- назначение отправки на удаленный хост SIEM-платформы;<ip-адрес лог-коллектора>
- IP-адрес агента сбора лог-коллектора;порт лог-коллектора
- порт, по которому агент сбора лог-коллектора будет принимать события. Должен совпадать со значением, указанным в настройках соответствующего профиля сбора;f_devd
- фильтр, который позволяет исключить частые сообщения от процессаdevd
;log_fifo_size(1000)
- буферизация для предотвращения потери событий при сетевых сбоях
Примечание: более подробное описание настройки
syslog-ng
приведено в разделе ОС семейства Unix.
Настройка шифрования (опционально)
Для включения Шифрования TLS в базовой конфигурации замените параметр tcp()
на tls()
и укажите параметры сертификатов.
Перезапуск службы
Для перезапуска службы syslog-ng
выполните команду:
# service syslog-ng restart && pgrep syslog-ng
Проверьте подключение к агентy сбора лог-коллектора командой:
# nc -zv <ip адрес лог-коллектора> <порт лог-коллектора>
Пример событий ОС FreeBSD записанных syslog-ng:
Aug 13 20:20:00 freebsd_content /usr/sbin/cron[1115]: (root) CMD (/usr/libexec/atrun)
Aug 13 20:20:55 freebsd_content syslog-ng[1049]: syslog-ng shutting down; version='4.8.1'
Aug 13 22:20:50 freebsd_content devd[460]: Processing event '!system=DEVFS subsystem=CDEV type=CREATE cdev=pts/2'
Настройка журналирования ZFS
- Создайте файл для исполнения сервисного скрипта
/usr/local/etc/rc.d/zfs_events
. -
Укажите в файле следующие параметры:
#!/bin/sh # PROVIDE: zfs_events # REQUIRE: DAEMON # KEYWORD: shutdown . /etc/rc.subr name="zfs_events" rcvar=zfs_events_enable load_rc_config $name : ${zfs_events_enable="NO"} : ${zfs_events_output="/var/log/zfs_events.log"} pidfile="/var/run/${name}.pid" command="/sbin/zpool" command_args="events -H -v -f" start_cmd="zfs_events_start" stop_cmd="zfs_events_stop" zfs_events_start() { if [ -f "$pidfile" ] && kill -0 $(cat "$pidfile") 2>/dev/null; then echo "$name is already running." return 1 fi echo "Starting $name..." /usr/sbin/daemon -p "$pidfile" /bin/sh -c "$command $command_args > $zfs_events_output 2>&1" & } zfs_events_stop() { if [ -f "$pidfile" ] && kill -0 $(cat "$pidfile") 2>/dev/null; then echo "Stopping $name..." kill $(cat "$pidfile") rm -f "$pidfile" else echo "$name is not running." fi } run_rc_command "$1"
-
Определите рекомендуемые разрешения для необходимых файлов:
Права и владелец основного файла скрипта:
# sudo chown root:wheel /usr/local/etc/rc.d/zfs_events # Владелец: root, группа: wheel # sudo chmod 755 /usr/local/etc/rc.d/zfs_events # Права: rwxr-xr-x
Права для файла логов:
# sudo touch /var/log/zfs_events.log # файл лучше создать самостоятельно, чтобы сразу выдать необходимые разрешения # sudo chown root:wheel /var/log/zfs_events.log # Владелец: root, группа: wheel # sudo chmod 640 /var/log/zfs_events.log # Права: rw-r-----
Права для PID-файла:
# sudo touch /var/run/zfs_events.pid # sudo chown root:wheel /var/run/zfs_events.pid # Владелец: root, группа: wheel # sudo chmod 644 /var/run/zfs_events.pid # Права: rw-r--r--
-
Настройте автозапуск при загрузке системы. Для этого в конфигурационный файл
/etc/rc.conf
добавьте параметрzfs_events_enable="YES"
. -
Запустите скрипт:
# service zfs_events start
Настройка службы auditd
-
Включите и настройте автозапуск службы при загрузке системы:
-
включите автозапуск службы в конфигурационном файле
/etc/rc.conf
:echo 'auditd_enable="YES"' >> /etc/rc.conf
-
запустите службу в текущем сеансе:
# service auditd start && pgrep auditd
-
-
Конфигурационные файлы
auditd
расположены в директории/etc/security
:audit_class audit_control~ audit_user audit_warn auditdistd.conf~ audit_control audit_event audit_user~ auditdistd.conf
Внимание: изменения следует вносить в следующие конфигурационные файлы:
/etc/security/audit_control
(глобальные параметры аудита) и/etc/security/audit_user
(параметры аудита для конкретных пользователей). Подробнее см. в руководствеauditd
для FreeBSD. -
Настройте глобальные параметры аудита в файле
/etc/security/audit_control
:# Основные параметры системы аудита dir:/var/audit # Директория хранения журналов dist:off # Отключение создания жестких ссылок flags:lo,aa,ad,ap # Классы аудируемых событий minfree:5 # Минимальный процент свободного места naflags:lo,aa # Флаги для событий без атрибутов policy:cnt,argv # Политика обработки событий filesz:2M # Максимальный размер файла журнала expire-after:10M # Максимальный объем хранилища
Ключевые классы аудируемых событий:
lo
: события входа/выходаaa
: административные действияad
: изменения прав доступа-
ap
: операции с атрибутамиПолный список классов: FreeBSD Audit Documentation
-
Настройте параметры аудита по пользователям в файле
/etc/security/audit_user
:# Формат: пользователь:включаемые_классы:исключаемые_классы root:lo,ad:no # Аудит всех действий root user:-fc,ad:+fw # Для обычного пользователя: # - исключить успешные операции с файлами (-fc) # - включить неудачные попытки записи (+fw)
-
Работа с журналами аудита:
-
просмотр журнала:
# praudit -xl /var/audit/20231129122235.20231129122958
-
мониторинг событий в реальном времени:
# praudit -xl /dev/auditpipe
Примечание: журналы хранятся в
/var/audit
. -
Настройка интеграции с платформой:
- Создайте файл для исполнения сервисного скрипта
/usr/local/etc/rc.d/audit2syslog
. - Укажите в файле следующие параметры:
-
Определите рекомендуемые права и владельца файла:
Права для основного файла скрипта:
chown root:wheel /usr/local/etc/rc.d/audit2syslog # Владелец и группа chmod 755 /usr/local/etc/rc.d/audit2syslog # Права: rwxr-xr-x
Права для PID-файла и логов:
touch /var/run/audit2syslog.pid /var/log/audit2syslog.log chown root:wheel /var/run/audit2syslog.pid /var/log/audit2syslog.log chmod 644 /var/run/audit2syslog.pid /var/log/audit2syslog.log # rw-r--r--
Права для
/dev/auditpipe
:chown root:wheel /dev/auditpipe chmod 600 /dev/auditpipe # rw-------
-
Настройте автозапуск при загрузке системы. Для этого в конфигурационный файл
/etc/rc.conf
добавьте параметрaudit2syslog_enable="YES"
. -
Запустите сервис:
# service audit2syslog start
Пример событий auditd
<?xml version='1.0' ?>
<audit>
<record version="11" event="getaudit_addr(2)" modifier="0" time="Wed Aug 13 19:26:45 2025" msec=" + 612 msec" ><subject audit-uid="testuser" uid="root" gid="testuser" ruid="testuser" rgid="testuser" pid="1368" sid="1323" tid="0 0.0.0.0" /><return errval="success" retval="0" /></record>
<record version="11" event="auditon(2)" modifier="0" time="Wed Aug 13 19:26:45 2025" msec=" + 612 msec" ><argument arg-num="1" value="0x1d" desc="cmd" /><subject audit-uid="testuser" uid="root" gid="testuser" ruid="testuser" rgid="testuser" pid="1368" sid="1323" tid="0 0.0.0.0" /><return errval="success" retval="0" /></record>
<record version="11" event="su(1)" modifier="0" time="Wed Aug 13 19:26:45 2025" msec=" + 612 msec" ><subject audit-uid="testuser" uid="root" gid="testuser" ruid="testuser" rgid="testuser" pid="1368" sid="1368" tid="0 0.0.0.0" /><text>successful authentication</text><return errval="success" retval="0" /></record>
</audit>
Включение источника на платформе
Перейдите в веб-интерфейс платформы и включите источник FreeBSD.