Перейти к содержанию

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

Настройка источника включает в себя следующие процессы:

  1. Настройка службы syslog-ng.
  2. Настройка журналирования ZFS.
  3. Настройка службы auditd.
  4. Включение источника на платформе.

Настройка службы 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

  1. Создайте файл для исполнения сервисного скрипта /usr/local/etc/rc.d/zfs_events.
  2. Укажите в файле следующие параметры:

    #!/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" 
    
  3. Определите рекомендуемые разрешения для необходимых файлов:

    Права и владелец основного файла скрипта:

    # 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--
    
  4. Настройте автозапуск при загрузке системы. Для этого в конфигурационный файл /etc/rc.conf добавьте параметр zfs_events_enable="YES".

  5. Запустите скрипт:

    # service zfs_events start
    

Настройка службы auditd

  1. Включите и настройте автозапуск службы при загрузке системы:

    • включите автозапуск службы в конфигурационном файле /etc/rc.conf:

      echo 'auditd_enable="YES"' >> /etc/rc.conf
      
    • запустите службу в текущем сеансе:

      # service auditd start && pgrep auditd
      
  2. Конфигурационные файлы 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.

  3. Настройте глобальные параметры аудита в файле /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

  4. Настройте параметры аудита по пользователям в файле /etc/security/audit_user:

    # Формат: пользователь:включаемые_классы:исключаемые_классы
    root:lo,ad:no          # Аудит всех действий root
    user:-fc,ad:+fw        # Для обычного пользователя:
                           # - исключить успешные операции с файлами (-fc)
                           # - включить неудачные попытки записи (+fw)
    
  5. Работа с журналами аудита:

    • просмотр журнала:

      # praudit -xl /var/audit/20231129122235.20231129122958
      
    • мониторинг событий в реальном времени:

      # praudit -xl /dev/auditpipe
      

    Примечание: журналы хранятся в /var/audit.

Настройка интеграции с платформой:

  1. Создайте файл для исполнения сервисного скрипта /usr/local/etc/rc.d/audit2syslog.
  2. Укажите в файле следующие параметры:
  3. Определите рекомендуемые права и владельца файла:

    Права для основного файла скрипта:

    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-------
    
  4. Настройте автозапуск при загрузке системы. Для этого в конфигурационный файл /etc/rc.conf добавьте параметр audit2syslog_enable="YES".

  5. Запустите сервис:

    # 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.