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

FreeBSD

Общие данные

Платформа Радар поддерживает сбор событий со следующих версий операционной системы:

  • FreeBSD 14.0-RELEASE;
  • FreeBSD 13.2-RELEASE.

Для журналирования событий используются следующие службы:

  • syslog-ng - служба журналирования для отправки событий в платформу;
  • auditd - отвечает за запись сообщений аудита вызванных активностью приложений или системы.

Примечание: по умолчанию управление журналами в ОС FreeBSD осуществляется службой syslogd. Отправка логов этой службой возможна только по протоколу UDP.

В целях организации безопасной передачи данных на лог-коллектор по протоколу TCP, а также обеспечения возможности фильтрации сообщений по источникам и их содержимому предлагается установить пакет syslog-ng (см. раздел Настройка службы syslog-ng).

Характеристики источника в Платформе Радар:

Характеристика Значение
Название FreeBSD
Тип OS
Вендор The-FreeBSD-Project
Порт 2722
Протокол TCP

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

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

Настройка службы syslog-ng

Установите службу  syslog-ng:

pkg install syslog-ng

Включите службу syslog-ng в системном конфигурационном файле /etc/rc.conf:

syslog_ng_enable="YES"

Добавьте в конфигурационный файл службы /usr/local/etc/syslog-ng.conf следующие строки:

destination lc_net { tcp("<ip-адрес лог-коллектора>" port(2722) log_fifo_size(1000)); };

filter f_devd { not match("devd" value(PROGRAM)); };

log { source(src); filter(f_devd); destination(lc_net); };        

Где:

  • src - источник сообщений syslog, по умолчанию описан в первых строках конфигурационном файла /usr/local/etc/syslog-ng.conf;
  • lc_net - удаленный хост, на который будут отправляться сообщения;
  • <ip-адрес лог-коллектора> - IP-адрес лог-коллектора;
  • 2722 - номер порта для подключения ОС FreeBSD как источник событий;
  • f_devd - фильтр, запрещающий отправку на лог-коллектор сообщений от процесса devd;
  • value(PROGRAM) - указывает на то, что devd является процессом. Также можно использовать значение MESSAGE.

Примечание: более подробное описание настройки syslog-ng приведено в разделе ОС семейства Unix. Также можно настроить исключение из логирования любых сообщений, в том числе с помощью регулярных выражений.

Перезапустите службу syslog-ng:

service syslog-ng restart && pgrep syslog

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

Запустите службу auditd. Для этого:

  • включите службу в конфигурационном файле /etc/rc.conf
auditd_enable="YES"
  • выполните команду:
# 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 следующим образом:

# $FreeBSD$
#
dir:/var/audit
dist:off
flags:lo,aa,ad,ap
minfree:5
naflags:lo,aa
policy:cnt,argv
filesz:2M
expire-after:10M

Где:

  • dir - директория, в которой будут храниться файлы;
  • dist - если установлена в on или yes, то в директории /var/audit/dist будут создаваться жесткие ссылки на журналы auditd;
  • flags - указывает, какие события будут логироваться (подробный список флагов см. по ссылке);
  • minfree - минимальный процент свободного места на диске, на который сохраняются журналы auditd;
  • naflags - дополнительные флаги для событий, которые лишены атрибутов;
  • policy - политика обработки флагов и осуществления аудита;
  • filesz - максимальный размер файла аудита, после которого срабатывает ротация;
  • expire-after - размер, по достижении которого файлы аудита удаляются.

Настройте конфигурационный файл/etc/security/audit_user следующим образом:`

root:lo,ad:no
user:-fc,ad:+fw

Где:

  • укажите имя пользователя;
  • через двоеточие укажите действия, подлежащие аудиту;
  • после следующего двоеточия укажите события пользователя, которые не подлежат аудиту. Если в этой секции указано no, то аудиту подлежат все события.

В данном примере для пользователя user фиксируются неудачные попытки создания файлов и все административные события. Успешные попытки чтения файлов для этого пользователя не фиксируются. Конфигурационный файл/etc/security/audit_user описан по ссылке.

Служба auditd размещает журналы в директории /var/audit. Содержимое этих файлов зашифровано. Пример содержимого диреrтории:

-r--r-----  1 root        audit   276K Nov 29 14:40 20231129112729.20231129114034
-r--r-----  1 root        audit    57K Nov 29 14:48 20231129114118.20231129114856
-r--r-----  1 root        audit   428K Nov 29 15:03 20231129114939.20231129120354
-r--r-----  1 root        audit   191K Nov 29 15:11 20231129120446.20231129121153
-r--r-----  1 root        audit   118K Nov 29 15:21 20231129121240.20231129122152
-r--r-----  1 root        audit   190K Nov 29 15:29 20231129122235.20231129122958
-r--r-----  1 root        audit   102K Nov 29 16:46 20231129123040.not_terminated
lrwxr-xr-x  1 root        audit    40B Nov 29 15:30 current@ -> /var/audit/20231129123040.not_terminated

Где файл с расширением .not_terminated - это текущий журнал auditd.

Для расшифровки журналов используется утилита FreeBSD praudit:

# praudit -xl 20231129122235.20231129122958

Где:

  • x - параметр, формирующий сообщение в xml-формат;
  • l - параметр, формирующий вывод каждого события в одну строку.

Также все события auditd в реальном времени отправляются на устройство /dev/auditpipe.

Подготовьте скрипт автоматической передачи событий auditd в syslog-ng. Пример скрипта:

#!/bin/sh

## Подключите файл, содержащий системные функции, необходимые для запуска скрипта через rc
## https://man.freebsd.org/cgi/man.cgi?rc.subr(8)
. /etc/rc.subr

## Функция запуска расшифровки логирования auditd
audit2syslog_start()
{
    $COMMAND -xl /dev/auditpipe | logger ${audit2syslog_flags} &
}

## Функция останова логирования auditd
audit2syslog_stop()
{
    PID=`pgrep praudit`
    kill -s HUP $PID
}

## Объявите переменные
NAME=audit2syslog
RCVAR=audit2syslog_enable
COMMAND=/usr/sbin/praudit

START_CMD=${name}_start
STOP_CMD=${name}_stop

## Загрузите конфигурацию для audit2syslog из файла rc
load_rc_config $NAME

## Выполните команду rc
run_rc_command "$1"

Для активации скрипта в конфигурационный файл /etc/rc.conf добавьте следующие строки:

audit2syslog_enable="YES"
audit2syslog_flags="-t audit_trail -f"

Где в утилиту logger передаются следующие параметры:

  • t - устанавливает тег для сообщений;
  • f - направляет все события в syslog.

Далее события будут передаваться на лог-коллектор посредством syslog-ng.

Настройка лог-коллектора

Ниже приведена конфигурация лог-коллектора для работы с журналами FreeBSD:

cluster:
  url: "<IP-адрес платформы>"
  api_key: "<global_api_key>"
controller:
  port: 48000
metric_server:
  port: 48005
secret_file: "/opt/pangeoradar/configs/logcollector/secret"
secret_storage: "/opt/pangeoradar/configs/logcollector/secret_storage"
api_server:
  address: "<IP-адрес лог-коллектора>"
  port: 8085
  read_timeout: 60
  write_timeout: 60
  wait: 5
  enable_tls: false
  cert_file: "/opt/pangeoradar/certs/server.crt"
  key_file: "/opt/pangeoradar/certs/server.key"
  cert_key_pass: ""
  require_client_cert: false
  ca_file: "/opt/pangeoradar/certs/pgr.crt"
  log_level: "WARN"
journal:
  port: 48004
  log_level: "INFO"
  log_path: "/var/log/logcollector/journal.log"
  rotation_size: 30
  max_backups: 7
  max_age: 7
out_file: &out_file
  id: "out_file"
  file: "/var/log/logcollector/ouput_file.txt"
  rotation_size: 10
tcp_input: &tcp_input
  id: "tcp_input"
  host: "<ip-адрес лог коллектора>"
  port: <порт для приема соединений
  buf_size: 0
  format: "json"
tcp_sender: &tcp_sender
  id: "tcp_sender"
  target_host: "<IP-адрес кластера>"
  port: 2722
  log_level: "INFO"
senders:
  port: 48002
  out_file:
    - <<: *out_file
  tcp:
    - <<: *tcp_sender
collectors:
  tcp_receiver:
    - <<: *tcp_input
route_1: &route_1
  collector_id:
    - "tcp_input"
  sender_id:
    - "tcp_sender"
routers:
  - <<: *route_1

Где:

  • <IP-адрес платформы> - IP-адрес по которому выполняется доступ в веб-интерфейс Платформы Радар.
  • <global_api_key> - ваш ключ API, который можно получить в настройках кластера Платформы Радар;
  • <IP-адрес лог-коллектора> - IP-адрес, на котором расположен лог-коллектор;
  • <порт для приема соединений> - порт, на который будут приниматься события;
  • 2722 - номер порта для подключения ОС FreeBSD как источник событий.

Пример лога ОС FreeBSD

<118>Nov  7 15:59:50 kernel: Nov  7 15:59:50 host-pgr-fbsd su[876]: ilya to root on /dev/pts/0
<37>Nov  7 15:59:50 su[876]: ilya to root on /dev/pts/0
<78>Nov  7 16:00:00 /usr/sbin/cron[884]: (root) CMD (/usr/libexec/atrun)
<78>Nov  7 16:00:00 /usr/sbin/cron[882]: (root) CMD (newsyslog)
<78>Nov  7 16:00:00 /usr/sbin/cron[883]: (operator) CMD (/usr/libexec/save-entropy)
<14>Nov  7 16:01:42 devd[473]: Processing event '!system=DEVFS subsystem=CDEV type=DESTROY cdev=pts/2'
<78>Nov  7 16:05:00 /usr/sbin/cron[906]: (root) CMD (/usr/libexec/atrun)

Пример лога auditd для ОС FreeBSD

<audit>                                                                                                                                                                   <record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x1" desc="cmd" /><argument arg-num="1" value="0x1" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="1" /></record>                                                                                                                                          
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x3" desc="cmd" /><argument arg-num="1" value="0x3" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="6" /></record>                                                                                                                                           │
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x1" desc="cmd" /><argument arg-num="1" value="0x1" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="1" /></record>                                                                                                                                           │
<record version="11" event="fcntl(2)" modifier="0" time=2023-11-20 12:39:12.000000 msec=" + 425 msec" ><argument arg-num="2" value="0x3" desc="cmd" /><argument arg-num="1" value="0x3" desc="non-file: fd" /><subject audit-uid="ilya" uid="root" gid="wheel" ruid="root" rgid="wheel" pid="9998" sid="9789" tid="48612 172.30.250.1" /><return errval="success" retval="6" /></record>

<?xml version='1.0' ?>                                                                                                                                                    
<audit>                                                                                                                                                                   
</audit>    

Включение источника на платформе

Перейдите в веб-интерфейс платформы и выполните следующие действия:

  1. Перейдите в раздел АдминистрированиеИсточникиУправление источниками.
  2. Включите источник FreeBSD.
  3. Нажмите кнопку Синхронизировать.
  4. Перейдите в раздел События и проверьте наличие потока событий от данного источника.