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 |
Настройка источника включает в себя следующие процессы:
- Настройка службы syslog-ng.
- Настройка службы auditd.
- Настройка лог-коллектора.
- Включение источника на платформе.
Настройка службы 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>
Включение источника на платформе
Перейдите в веб-интерфейс платформы и выполните следующие действия:
- Перейдите в раздел Администрирование → Источники → Управление источниками.
- Включите источник FreeBSD.
- Нажмите кнопку Синхронизировать.
- Перейдите в раздел События и проверьте наличие потока событий от данного источника.