ОС семейства Unix
Общие данные
Примечание: начиная с версии
3.7.2в Платформе Радар все источники, которые являются операционными системами семейства Unix, объединены в один источник Linux-Unix.
Платформа Радар обеспечивает сбор и обработку событий для следующих операционных систем семейства Unix, а также для используемых в них механизмов фильтрации трафика:
- Astra Linux Special Edition 1.7 и выше;
- РЕД ОС 7.1 - 8;
- Ubuntu 16.04, 18.04, 20.04, 22.04;
- CentOS 6, 7, 8, 9;
- Debian 8, 9, 10, 12;
- Oracle Solaris 10, 11;
- Red Hat Enterprise Linux 6, 7, 8;
- SUSE Linux Enterprise Server 11.3, 12, 15;
- Fedora 30, 31.
Межсетевые экраны:
- ufw
- firewalld
- iptables
Для журналирования событий используются следующие службы:
rsyslogилиsyslog-ng- служба журналирования для отправки событий на платформу;auditd- служба аудита, фиксирующая события безопасности, вызванные активностью приложений или системы.
Характеристики источника в Платформе Радар:
| Характеристика | Значение |
|---|---|
| Название | Linux-Unix |
| Номер (Порт) | 2671 |
| Тип | Linux |
| Вендор | Unix |
| Профиль сбора | tcp_input udp_input |
Настройка источника включает в себя следующие процессы:
- Настройка службы журналирования.
- Настройка службы
auditd. - Настройка службы
ufw(опционально). - Настройка службы
firewalld(опционально). - Настройка службы
iptables(опционально). - Настройка журналирования bash-команд (опционально).
- Настройки безопасности (опционально).
- Включение источника на платформе.
Все действия при настройке источника должны выполняться от имени суперпользователя.
1. Настройка службы журналирования
Для отправки событий стандарта syslog в Платформу Радар на источнике необходимо настроить службу журналирования и отправку событий.
В целях организации безопасной передачи данных на агент сбора лог-коллектора по протоколу TCP, а также обеспечения возможности фильтрации сообщений по источникам и их содержимому предлагается использовать службы rsyslog или syslog-ng.
Шаг 1. Определите службу журналирования, используемую источником.
Для систем на базе DEB ( Astra Linux / Debian / Ubuntu) выполните команду:
# dpkg --list | grep syslog
Для систем на базе RPM (РЕД ОС / ALT Linux / Red Hat / CentOS ) выполните команду:
# rpm -qa | grep syslog
Для систем SUSE Linux Enterprise Server / openSUSE выполните команду:
# zypper search *syslog* --installed-only | grep 'i |'
Отсутствие вывода или
No packages foundозначает, что служба журналирования не установлена. В этом случае выберите поддерживаемую источником событий службу (rsyslogилиsyslog-ng) и перейдите в "Шаг 2"
Шаг 2. Перейдите в раздел документации соответствующий выбранной службе журналирования:
Настройка rsyslog
Шаг 3 (А). Установка rsyslog
Если служба не установлена, то вы можете ее установить. Для этого выполните соответствующую команду:
| ОС | Команда |
|---|---|
| Astra Linux / Debian / Ubuntu | # apt-get update# apt-get install rsyslog |
| РЕД ОС / ALT Linux / Red Hat / CentOS | # Для 7 версий:# yum -y install rsyslog# Для 8+ версий:# dnf install rsyslog |
| SUSE Linux / openSUSE | # zypper install rsyslog |
Для RHEL систем может потребоваться дополнительная настройка взаимодействия c systemd-journald.
Шаг 4 (А). Добавьте службу rsyslog в автозагрузку и запустите:
# systemctl enable rsyslog
# systemctl start rsyslog
Шаг 5 (А). Откройте основной файл конфигурации rsyslog:
# nano /etc/rsyslog.conf
Шаг 6 (А). Приведите значения модулей и директив в соответствии с нижеизложенным:
module(load="imuxsock"
SysSock.Use="on"
SysSock.Ratelimit.Burst="20000"
SysSock.Ratelimit.Interval="15")
module(load="imklog")
#$MaxMessageSize 64k # Устанавливает максимальный размер сообщения
$WorkDirectory /var/spool/rsyslog
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
# Установка правил для локального сохранения полученных событий в файлы.
if ($syslogfacility-text == 'auth' or $syslogfacility-text == 'authpriv') then {
action(type="omfile" file="/var/log/auth.log")
}
if $syslogfacility-text == 'user' and $syslogseverity <= 5 then {
action(type="omfile" file="/var/log/user.log")
}
if $syslogfacility-text == 'cron' and $syslogseverity <= 6 then {
action(type="omfile" file="/var/log/cron.log")
}
if $syslogfacility-text == 'kern' and $syslogseverity <= 6 then {
action(type="omfile" file="/var/log/kern.log")
}
if $syslogfacility-text == 'mail' and $syslogseverity <= 6 then {
action(type="omfile" file="/var/log/mail.log")
}
Количество отправленных событий может превышать ограничения, установленные для модуля
imuxsock. ДирективыSysSock.Ratelimit.*устанавливают пользовательские ограничения, для полного отключения ограничений необходимо установить эти параметры равными0
Шаг 7 (А). Настройте фильтр установив значение $syslogseverity отправляемых в Платформу событий в соответствии с таблицей значений критичности событий:
(0) emerg
(1) alert
(2) crit
(3) err
(4) warning
(5) notice
(6) info
(7) debug
Шаг 8 (А). Создайте файл /etc/rsyslog.d/01-forward-system-journal.conf со следующим содержимым:
# В текущем файле устанавливаются правила экспорта системных событий в Платформу Радар
# Для использования udp, установите protocol="udp" и закоментируйте/удалите параметры в action после параметра"port"
if ($syslogfacility-text == "auth" or
$syslogfacility-text == "authpriv" or
$syslogfacility-text == "user" or
$syslogfacility-text == "cron" or
$syslogfacility-text == "kern" or
$syslogfacility-text == "mail") and
($syslogseverity <= 6) then { # $syslogseverity устанавливает общее значение важности отправляемых в Платформу радар событий
action(
type="omfwd"
protocol="tcp"
target="<ip-адрес логколлектора>"
port="<порт логколлектора>"
action.repeatedmsgcontainsoriginalmsg="off"
action.resumeRetryCount="-1"
queue.type="LinkedList"
queue.filename="syslog_queue_1"
queue.saveOnShutdown="on"
queue.maxDiskSpace="1024m"
queue.timeoutEnqueue="0"
)
}
Шаг 9 (А). Создайте файл /etc/rsyslog.d/02-forward-auditd.conf со следующим содержимым:
# В текущем файле устанавливается правило для экспорта событий аудита в Платформу Радар
# Для использования udp, установите protocol="udp" и закоментируйте/удалите параметры в action после "port"
if $syslogfacility-text == 'local6' then {
action(
type="omfwd"
protocol="tcp"
target="<ip адресс logcollector>"
port="<порт>"
action.repeatedmsgcontainsoriginalmsg="off"
action.resumeRetryCount="-1"
queue.type="LinkedList"
queue.filename="syslog_queue_3"
queue.saveOnShutdown="on"
queue.maxDiskSpace="1024m"
queue.timeoutEnqueue="0"
)
stop
}
Шаг 10 (А). Проверьте наличие ошибок и конфликтов конфигурации rsyslog
# rsyslogd -f /etc/rsyslog.conf -N 1
Шаг 11 (А). Откройте файл /etc/systemd/journald.conf
# nano /etc/systemd/journald.conf
Шаг 12 (А). Установите параметр ForwardToSyslog=yes
Шаг 13 (А). Для применения изменений конфигураций перезапустите службы rsyslog и systemd-journald:
# systemctl restart rsyslog
# systemctl restart systemd-journald
Настройка syslog-ng
Шаг 3 (Б). Установка syslog-ng
Если служба не установлена, то вы можете ее установить. Для этого выполните соответствующую команду:
| ОС | Команда |
|---|---|
| Astra Linux / Debian / Ubuntu | # apt-get update # apt-get install syslog-ng |
| РЕД ОС / ALT Linux / Red Hat / CentOS | # Для 7 версий:# yum -y install syslog-ng# Для 8+ версий:# dnf install syslog-ng |
| SUSE Linux / openSUSE | # zypper install syslog-ng |
Шаг 4 (Б). Добавьте службу syslog-ng в автозагрузку и запустите:
# systemctl enable syslog-ng
# systemctl start syslog-ng
Шаг 5 (Б). Настройка основного конфигурационного файла:
- Откройте
/etc/syslog-ng/syslog-ng.conf
# nano /etc/syslog-ng/syslog-ng.conf
- в начале файла укажите версию службы (если она не указана) и библиотеку конфигураций SCL:
@version: current
@include "scl.conf"
- в секции для
global optionsустановите следующие глобальные переменные:
options {
flush_lines (0);
time_reopen (10);
log_fifo_size (1000);
chain_hostnames (off);
use_dns (no);
dns-cache(no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
stats-freq(0);
mark-freq(0);
};
- В секции
Sourcesукажите источники получения событий, например:
source s_sys {
system();
internal();
};
- в секции
Destinationsукажите пути для хранения собираемых журналов:
# стандартные файлы журналов.
destination d_auth { file("/var/log/auth.log"); };
destination d_cron { file("/var/log/cron.log"); };
destination d_daemon { file("/var/log/daemon.log"); };
destination d_kern { file("/var/log/kern.log"); };
destination d_lpr { file("/var/log/lpr.log"); };
destination d_mail { file("/var/log/mail.log"); };
destination d_user { file("/var/log/user.log"); };
#destination d_uucp { file("/var/log/uucp.log"); };
# универсальные файлы журналов.
destination d_messages { file("/var/log/messages"); };
destination d_syslog { file("/var/log/syslog"); };
# опциональные файлы журналов
#destination d_debug { file("/var/log/debug"); };
#destination d_error { file("/var/log/error"); };
# опциональные выводы событий
# root's консоль.
#destination d_mlal { usertty("*"); };
# virtual консоль.
#destination d_cons { file("/dev/console"); };
- в секции
Filtersзадайте правила и уровни журналирования для отбора сообщений. Рекомендуемые настройки:
filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); };
filter f_devd { program("devd") and level(debug..info); };
filter f_audit {
program("audit")
or program("audispd")
or program("audisp-syslog");
};
filter f_messages {
level(info, notice, warn)
and not facility(auth, authpriv, cron, daemon, mail, news)
and not filter(f_audit);
};
filter f_syslog {
not facility(auth, authpriv, mail)
and level(info..emerg)
and not filter(f_audit);
};
filter f_auth { facility(auth, authpriv); };
filter f_cron { facility(cron) and level(info..emerg); };
filter f_kern { facility(kern) and level(info..emerg); };
filter f_lpr { facility(lpr) and level(info..emerg); };
filter f_user { facility(user) and level(info..notice); };
filter f_daemon { facility(daemon) and level(info..emerg); };
filter f_mail { facility(mail) and level(info..emerg); };
#filter f_uucp { facility(uucp) and level(info..emerg); };
#filter f_error { level(err); };
#filter f_console { level(warn .. emerg); };
#filter f_crit { level(crit .. emerg); };
-
Закомментируйте или удалите директивы из блока
Log path: -
На последней строке конфигурационного файла укажите директиву для включения дополнительных файлов конфигурации:
@include "/etc/syslog-ng/conf.d/*.conf"
Шаг 6 (Б). Создайте файл /etc/syslog-ng/conf.d/01-local-system-journal.conf со следующими параметрами:
# Локальное сохранение событий в дирректории /var/log:
log { source(s_sys); filter(f_messages); destination(d_messages); };
log { source(s_sys); filter(f_syslog); destination(d_syslog); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
log { source(s_sys); filter(f_kern); destination(d_kern); };
log { source(s_sys); filter(f_lpr); destination(d_lpr); };
log { source(s_sys); filter(f_user); destination(d_user); };
log { source(s_sys); filter(f_daemon); destination(d_daemon); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
#log { source(s_sys); filter(f_uucp); destination(d_uucp); };
#log { source(s_sys); filter(f_debug); destination(d_debug); };
#log { source(s_sys); filter(f_error); destination(d_error); };
#log { source(s_sys); filter(f_console); destination(d_cons); };
#log { source(s_sys); filter(f_crit); destination(d_mlal); };
Шаг 7 (Б). Создайте файл /etc/syslog-ng/conf.d/02-forward-system-journal.conf со следующими параметрами:
destination d_fwd_systemj { tcp("<IP-адрес агента сбора лог-коллектора>" port(<порт лог-коллектора>) log_fifo_size(1000) persist-name("fwd-systemj")); };
filter f_fwd_systemj {
level(info..emerg)
and not facility(local6)
and not facility(news, uucp)
and not filter(f_devd);
};
log { source(s_sys); filter(f_fwd_systemj); destination(d_fwd_systemj); };
Шаг 8 (Б). Создайте файл /etc/syslog-ng/conf.d/03-forward-auditd.conf со следующим содержимым:
destination d_audit { tcp("<IP-адрес агента сбора лог-коллектора>" port(<порт лог-коллектора>) log_fifo_size(1000) persist-name("fwd-audit")); };
filter f_fwd_audit {facility(local6); };
log { source(s_sys); filter(f_fwd_audit); destination(d_audit); };
Шаг 9 (Б). Проверьте синтаксическую корректность конфигурации syslog-ng:
# syslog-ng -s
Шаг 10 (Б). Откройте файл /etc/systemd/journald.conf:
nano /etc/systemd/journald.conf
Шаг 11 (Б). Установите значение параметров ForwardToSyslog=no и Storage=auto
Шаг 12 (Б). Для применения изменений конфигураций перезапустите службы syslog-ng и systemd-journald :
# systemctl restart syslog-ng
# systemctl restart systemd-journald
2. Настройка экспорта событий службы auditd
Шаг 1. Если служба не установлена, то вы можете ее установить. Для этого выполните соответствующую команду:
| ОС | Команда |
|---|---|
| Astra Linux / Debian / Ubuntu | # apt-get update # apt-get install auditd |
| РЕД ОС / ALT Linux / Red Hat / CentOS | # Для 7 версий:# yum -y install audit# Для 8+ версий:# dnf install audit |
| SUSE Linux / openSUSE | # zypper install auditd |
Шаг 2. Откройте файл /etc/audit/auditd.conf:
nano /etc/audit/auditd.conf
Шаг 3. Установите следующие значения для параметров:
write_logs = no
log_format = ENRICHED
name_format = FQD
q_depth = 8192
Полный перечень параметров, с пояснениями приведен в Приложении 4
Шаг 4. Создайте файл /etc/audit/rules.d/00-all-extended.rules.
```
nano /etc/audit/rules.d/00-all-extended.rules
```
Шаг 5. Скопируйте в 00-all-extended.rules рекомендуемые правила аудита.
Шаг 6. Настройте локальное разрешение имён в /etc/hosts. Необходимо, если в auditd.conf используется name_format = numeric или fqd.
- откройте файл
/etc/hosts:
# nano /etc/hosts
-
приведите строку с адресом
127.0.1.1к виду<IP> <FQDN> <имя_хоста>:Если статический IP — вместо
127.0.1.1укажите действующий адрес:10.10.10.10 server.domain.local serverЕсли динамический IP — оставьте
127.0.1.1:
127.0.1.1 server.domain.local server
- убедитесь, что в строках
127.0.0.1и::1указан толькоlocalhost:
# ПРИМЕР!
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
Использовать конфигурацию
auditdс параметромname_format = numericна узлах с динамическими IP-адресами не рекомендуется.
Шаг 7. Проверьте наличие audispd:
# RHEL/CentOS/Fedora:
rpm -q audispd-plugins
# Debian/Ubuntu:
dpkg -l | grep audispd-plugins
Шаг 8. Если плагин не установлен - установите его. Для этого выполните соответствующую команду:
| ОС | Команда |
|---|---|
| Astra Linux / Debian / Ubuntu | # apt-get update # apt-get install audispd-plugins |
| РЕД ОС / ALT Linux / Red Hat / CentOS | # Для 7 версий:# yum -y install audispd-plugins# Для 8+ версий:# dnf install audispd-plugins |
| SUSE Linux / openSUSE | # zypper install audispd-plugins |
Шаг 9 Откройте файл /etc/audit/plugins.d/syslog.conf (или /etc/audisp/plugins.d/syslog.conf если версия auditd ниже 3.0)
# nano /etc/audit/plugins.d/syslog.conf
Шаг 10 Установите значения параметров в файле /etc/audit/plugins.d/syslog.conf:
active = yes # определяет, активен ли плагин
direction = out # определяет направление потока данных плагина
path = /sbin/audisp-syslog # aбсолютный путь к исполняемому файлу плагина
type = always # определяет, когда запускать плагин (always - для каждого события)
args = LOG_LOCAL6 # аргументы командной строки (LOG_LOCAL6 - устанавливает facility передаваемых в syslog событий)
format = string # формат данных, передаваемых плагином
Шаг 11. Перезапустите службу auditd:
# systemctl restart auditd
Шаг 12. Рекомендуется деактивировать сокет systemd-journald-audit.socket с целью исключения дублирования событий и экономии дискового пространства:
- Остановите сокет:
# systemctl stop systemd-journald-audit.socket
- Отключите автозагрузку сокета при перезагрузке системы:
# systemctl disable systemd-journald-audit.socket
- Добавьте маскировку сокета во избежание случайных запусков:
# systemctl mask systemd-journald-audit.socket
- Проверьте статус сокета:
# systemctl is-active systemd-journald-audit.socket
- Перезапустите службу
# systemctl restart systemd-journald
3. Настройка службы ufw (опционально)
Шаг 1. Включите журналирование событий службы UFW:
# ufw logging medium
Уровни журналирования определяются:
low— регистрирует все заблокированные пакеты, не соответствующие заданной политике, а также пакеты, соответствующие зарегистрированным правилам. С ограничением скорости;medium— то же что low, плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. С ограничением скорости;high— регистрирует все пакеты. С ограничением скорости;full— регистрирует все пакеты. Без ограничения скорости.
Шаг 2. Перезапустите службу ufw:
# ufw reload
Шаг 3. В зависимости от используемой службы журналирования выполните:
Шаг 4 (А). Настройте экспорт событий если используется rsyslog, для этого:
- Cоздайте файл
/etc/rsyslog.d/00-fwd-ufw.conf
# nano /etc/rsyslog.d/00-fwd-ufw.conf
- Скопируйте следующее содержимое в файл
/etc/rsyslog.d/00-fwd-ufw.conf:
template(
name="t_ufw"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3164% %HOSTNAME% ufw: %msg%\n"
)
if $msg contains '[UFW ' then {
action(type="omfwd"
target="IP-адрес агента сбора лог-коллектора"
port="порт агента сбора лог-коллектора"
protocol="tcp"
template="t_ufw"
action.repeatedmsgcontainsoriginalmsg="off"
action.resumeRetryCount="-1"
queue.type="LinkedList"
queue.filename="syslog_queue_0"
queue.saveOnShutdown="on"
queue.maxDiskSpace="1024m"
queue.timeoutEnqueue="0"
)
stop
}
- Проверьте корректность конфигурации
# rsyslogd -f /etc/rsyslog.conf -N 1
- Перезапустите службу
rsyslog:
# systemctl restart rsyslog
Шаг 4 (Б). Настройте экспорт событий если используется syslog-ng, для этого:
- Создайте файл
/etc/syslog-ng/conf.d/00-fwd-ufw.conf:
# nano /etc/syslog-ng/conf.d/00-fwd-ufw.conf
- Скопируйте следующее содержимое в файл
/etc/syslog-ng/conf.d/00-fwd-ufw.conf:
filter f_ufw {
match("\\[UFW" value("MESSAGE"));
};
template t_ufw {
template("<${PRI}>${DATE} ${HOST} ufw: ${MESSAGE}\n");
template_escape(no);
};
destination d_ufw_fwd { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) template("t_ufw") persist-name("ufw-forward")); };
log { source(s_sys); filter(f_ufw); destination(d_ufw_fwd); flags(final); };
- Проверьте корректность конфигурации
# syslog-ng -s
- Перезапустите службу
rsyslog:
# systemctl restart syslog-ng
4. Настройка службы firewalld (опционально)
Шаг 1. Проверьте статус службы firewalld:
# systemctl status firewalld
Шаг 2. Если служба не запущена, то включите ее :
# systemctl start firewalld
Шаг 3. Включите журналирование заблокированных пакетов:
# firewall-cmd --set-log-denied=all
Где set-log-denied принимает значения:
all- записываются все заблокированные пакеты, независимо от типа;unicast– записываются только заблокированные пакеты с типом один-к-одному, то есть из одного хоста на другой хост (обычный сетевой трафик между узлами);multicast– записываются заблокированные пакеты, адресованные всем узлам в сети (широковещательная рассылка);broadcast– записываются заблокированные пакеты, адресованные определённой группе узлов (групповая рассылка).
Шаг 2. Перезапустите службу firewalld:
```
# systemctl restart firewalld
```
Шаг 3. В зависимости от используемой службы журналирования выполните:
Шаг 4 (А). Настройте экспорт событий если используется rsyslog, для этого:
- Cоздайте файл
/etc/rsyslog.d/00-fwd-firewall.conf
# nano /etc/rsyslog.d/00-fwd-firewall.conf
- Скопируйте следующее содержимое в файл
/etc/rsyslog.d/00-fwd-firewall.conf:
template(
name="fwlogtemplate"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3164% %HOSTNAME% firewalld: %msg%\n"
)
if ($msg contains "_DROP" or $msg contains "_REJECT") then {
action(
type="omfwd"
protocol="tcp"
target="<ip-адрес логколлектора>"
port="<порт логколлектора>"
template="fwlogtemplate"
action.repeatedmsgcontainsoriginalmsg="off"
action.resumeRetryCount="-1"
queue.type="LinkedList"
queue.filename="syslog_queue_0"
queue.saveOnShutdown="on"
queue.maxDiskSpace="1024m"
queue.timeoutEnqueue="0"
)
stop
}
-
Проверьте корректность конфигурации
# rsyslogd -f /etc/rsyslog.conf -N 1 -
Перезапустите службу
rsyslog:# systemctl restart rsyslog
Шаг 4 (Б). Настройте экспорт событий если используется syslog-ng, для этого:
- Cоздайте файл
/etc/syslog-ng/conf.d/00-fwd-firewall.conf
# nano /etc/syslog-ng/conf.d/00-fwd-firewall.conf
- Скопируйте следующее содержимое в файл
/etc/syslog-ng/conf.d/00-fwd-firewall.conf:
filter f_firewalld {
match("_REJECT" value("MESSAGE")) or match("_DROP" value("MESSAGE"));
};
template t_firewalld {
template("<${PRI}>${DATE} ${HOST} firewalld: ${MESSAGE}\n");
template_escape(no);
};
destination d_firewalld_fwd { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) template("t_firewalld") persist-name("firewalld-forward")); };
log { source(s_sys); filter(f_firewalld); destination(d_firewalld_fwd); flags(final); };
- Проверьте корректность конфигурации
# syslog-ng -s
- Перезапустите службу
syslog-ng:
# systemctl restart syslog-ng
5. Настройка службы iptables (опционально)
Шаг 1. Определите правила, для которых требуется вести журналирование
- Выполните команду:
iptables -L -v --line-numbers
- Сохраните номера правил и цепочку, в которой они находится.
Шаг 2. Определите префиксы для журналируемых типов событий.
Добавляемые правила LOG должны использовать единый формат префикса, в котором <краткое описание события> отражает действие и суть правила (например, ACCEPT SSH, DROP ICMP, FORWARD HTTP):
"Iptables: <краткое наименования типа события>: "
Шаг 3. Добавьте правило -j LOG перед каждым правилом для которого требуется вести журналирование:
iptables -I <цепочка> <номер правила> <условия> -j LOG --log-prefix "Iptables: <краткое описание события>: "
Где <номер правила> — это номер строки целевого правила из первого шага.
Пример. Запись ACCEPT (разрешение SSH)
```
# Исходное правило (например, строка №3 в цепочке INPUT):
# 3 ACCEPT tcp -- anywhere anywhere tcp dpt:22
# Вставляем LOG перед ним:
iptables -I INPUT 3 -p tcp --dport 22 -j LOG --log-prefix "Iptables: ACCEPT SSH: "
```
После добавления целевое правило сместится на одну позицию вниз, а общий порядок сохранится.
Шаг 4. Проверьте, что правила корректны и в нужном порядке
iptables -L -v --line-numbers
Шаг 5. Сохраните правила:
iptables-save > /etc/iptables/rules.v4
Шаг 6. В зависимости от используемой службы журналирования выполните:
Шаг 7 (А). Настройте экспорт событий если используется rsyslog, для этого:
- Cоздайте файл
/etc/rsyslog.d/00-fwd-iptables.conf
# nano /etc/rsyslog.d/00-fwd-iptables.conf
- Скопируйте следующее содержимое в файл /etc/rsyslog.d/00-fwd-iptables.conf:
template(
name="t_iptables"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3164% %HOSTNAME% iptables: %msg%\n"
)
if ($msg contains "Iptables: ") then {
action(
type="omfwd"
protocol="tcp"
target="<ip-адрес логколлектора>"
port="<порт логколлектора>"
template="t_iptables"
action.repeatedmsgcontainsoriginalmsg="off"
action.resumeRetryCount="-1"
queue.type="LinkedList"
queue.filename="syslog_queue_0"
queue.saveOnShutdown="on"
queue.maxDiskSpace="1024m"
queue.timeoutEnqueue="0"
)
stop
}
- Проверьте корректность конфигурации
# rsyslogd -f /etc/rsyslog.conf -N 1
- Перезапустите службу
rsyslog:
# systemctl restart rsyslog
Шаг 7 (Б). Настройте экспорт событий если используется syslog-ng, для этого:
- Cоздайте файл
/etc/rsyslog.d/00-fwd-iptables.conf
# nano /etc/syslog-ng/conf.d/00-fwd-iptables.conf
- Скопируйте следующее содержимое в файл /etc/syslog-ng/conf.d/00-fwd-iptables.conf:
filter f_iptables {
match("Iptables: " value("MESSAGE"));
};
template t_iptables {
template("<${PRI}>${DATE} ${HOST} iptables: ${MESSAGE}\n");
template_escape(no);
};
destination d_iptables_fwd { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) template("t_iptables") persist-name("iptables-forward")); };
log { source(s_sys); filter(f_iptables); destination(d_iptables_fwd); flags(final); };
- Проверьте корректность конфигурации
# syslog-ng -s
- Перезапустите службу
syslog-ng:
# systemctl restart syslog-ng
6. Настройка журналирования bash-команд (опционально)
Перед выполнением настройки журналирования bash-команд убедитесь, что соблюдены следующие условия: - установлен
logger; - установлен bash (не zsh, fish и др.) версии 4.3 или выше.
Шаг 1. Создайте файл /etc/profile.d/bash-syslog.sh cо следующим содержимым:
#!/bin/bash
# Логирование всей введённой пользователем строки через syslog (key=value формат)
# Работает только в интерактивных сессиях bash
__audit_logger() {
local RETVAL=$?
local CMD="$(history 1 | sed 's/^ *[0-9]* *//')"
[[ -z "$CMD" && $RETVAL -eq 0 ]] && return
local ESCAPED_CMD=${CMD//\"/\\\"}
# Получаем системные данные
local TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
local USER=$(whoami)
local LOGIN_USER=$LOGNAME
local USER_ID=$(id -u)
local GID=$(id -g)
local GROUP=$(id -gn)
local PID=$$
local HOST=$(hostname)
local IP=${SSH_CONNECTION%% *}
IP=${IP:-"local"}
local TTY=$(tty 2>/dev/null)
local CWD=$(pwd)
local SHELL_NAME=$0
local BASH_VER=$BASH_VERSION
# Формируем и отправляем лог
logger -t logger -p user.notice \
"type=logger_audit_command timestamp=\"$TS\" UID=\"$USER\" AUID=\"$LOGIN_USER\" uid=$USER_ID gid=$GID GID=\"$GROUP\" cwd=\"$CWD\" tty=\"$TTY\" ip=\"$IP\" hostname=\"$HOST\" shell=\"$SHELL_NAME\" bash_version=\"$BASH_VER\" pid=$PID command=\"$ESCAPED_CMD\" exit_code=$RETVAL"
}
# Активируем только в интерактивных сессиях
if [[ $- == *i* ]]; then
export PROMPT_COMMAND=__audit_logger
fi
Шаг 2. Выдайте разрешение на исполнение:
# chmod +x /etc/profile.d/bash-syslog.sh
Шаг 3. Запустите скрипт:
# bash /etc/profile.d/bash-syslog.sh
Шаг 4. Перезапустите экземпляр bash:
# exec bash -l
Шаг 5. Для проверки, выполните команду:
# echo "Test command"
# tail -n 5 /var/log/syslog | grep "user.debug"
Ожидаемый результат:
<15>Aug 15 14:28:51 example logger: type=logger_audit_command timestamp="2025-08-15T11:28:51Z" UID="root" AUID=\"root\" uid=0 gid=0 GID="root" cwd="/root" tty="/dev/pts/0" ip="10.10.10.10" hostname="example" shell="-bash" bash_version="5.2.15(1)-release" pid=6324 command="ls" exit_code=0
Откат изменений
Шаг 1. Создайте файл /tmp/revert-bash-syslog.sh со следующим содержимым:
#!/bin/bash
set -e # Завершить выполнение при любой ошибке
# Путь к скрипту, который мы создавали для журналирования
HOOK_FILE="/etc/profile.d/bash-syslog.sh"
echo "[!] Откат журналирования bash-команд через syslog..."
# Проверяем наличие файла
if [ -f "$HOOK_FILE" ]; then
echo "[+] Найден скрипт журналирования: $HOOK_FILE"
echo "[+] Удаляю..."
rm -f "$HOOK_FILE"
echo "Скрипт удалён."
else
echo "[=] Файл $HOOK_FILE не найден — возможно, уже был удалён."
fi
# На всякий случай очищаем переменную окружения в текущей сессии
unset PROMPT_COMMAND
echo "PROMPT_COMMAND очищен из текущего окружения."
echo " exec bash -l - выполнение"
echo " echo \$PROMPT_COMMAND # ← должно быть пусто"
echo " Для проверки, что команды больше не журналируются после перезагрузки:"
echo " tail -f /var/log/syslog | grep logger"
Шаг 2. Выдайте разрешение на исполнение:
# sudo chmod +x /tmp/revert-bash-syslog.sh
Шаг 3. Запустите скрипт:
# sudo bash /tmp/revert-bash-syslog.sh
Шаг 4. Перезапустите экземпляр bash:
# exec bash -l
7. Настройки безопасности
Если на узлах не используются
SELinuxи/или межсетевой экран, пропустите данный раздел и перейдите к включению источника на платформе.
Шаг 1. Определите параметры подключения
- IP-адрес узла-агента логколлектора
- IP-адрес узла-источника
- порт и протокол (
tcpилиudp), используемые для передачи событий
Шаг 2. Настройте межсетевой экран (настройка выполняется на обоих узлах: источнике событий и агенте сбора).
Если используется ufw
- На узле-источнике (разрешить исходящий трафик):
# ufw allow out to <IP-агента> port <порт> proto <tcp/udp>
- На узле-агенте (разрешить входящий трафик):
# ufw allow in from <IP-источника> port <порт> proto <tcp/udp>
- Примените изменения:
# ufw reload
# ufw status verbose
Если используется firewalld:
- Определите активную зону:
firewall-cmd --get-active-zones
- Проверьте политику зоны:
# firewall-cmd --zone=<зона> --get-target
- На узле-агенте откройте порт:
# firewall-cmd --permanent --add-port=<порт>/<tcp/udp>
- Примените изменения:
# firewall-cmd --reload
Если для зоны используется
DROPилиREJECT, убедитесь, что отсутствуют правила, блокирующие исходящий трафик с узла-источника.
Если используется iptables
- На узле-источнике:
# iptables -A OUTPUT -p <tcp/udp> --dport <порт> -j ACCEPT
- На узле-агенте:
# iptables -A INPUT -p <tcp/udp> --dport <порт> -j ACCEPT
Шаг 3. Выполните, для проверки статуса SElinux:
# getenforce
Возможные результаты:
Permissive— политики не блокируют действия (настройка не требуется)Enforcing— требуется дополнительная настройка
Шаг 4. Создайте локальное правило SElinux позволяющее выполнение операций, необходимых для работы audisp-remote
# ausearch -c 'audisp-remote' --raw | audit2allow -M my-audispremote
# semodule -X 300 -i my-audispremote.pp
Шаг 5. Разрешите использование сетевого порта для службы журналирования
- При включённом
SElinuxпроцессы журналирования (например,rsyslogилиsyslog-ng) ограничены в использовании сетевых портов. Для передачи событий необходимо явно разрешить использование целевого порта:
semanage port -a -t syslogd_port_t -p <tcp/udp> <порт>
- Проверьте применение настройки:
semanage port -l | grep syslog
Если после выполнения настройки проблемы с передачей событий сохраняются, временно переведите
SELinuxв режимPermissiveвыполнивsetenforce 0для проверки влияния политик.
8. Включение источника на платформе
Перейдите в веб-интерфейс платформы и включите источник Linux-Unix.
Приложение 1. Настройка взаимодействия systemd-journald и rsyslog
Необходимо для обеспечения корректной настройки управления сокетом между systemd-journald и rsyslog в RHEL-совместимых системах. Без неё модуль imuxsock rsyslog создаёт собственный сокет /dev/log и становится его владельцем, что приводит к некорректной маршрутизации событий. Включение drop-in для rsyslog.service с зависимостью от syslog.socket гарантирует, что socket-activation инициируется systemd.
Шаг 1. Отредактируйте конфигурацию journald в /etc/systemd/journald.conf включив переадресацию:
[Journal]
ForwardToSyslog=yes
Шаг 2. Создайте замену для файла конфигурации модуля rsyslog по адресу /etc/systemd/system/rsyslog.service.d/logging.conf со следующим содержимым, чтобы обеспечить корректное создание и связывание сокетов:
# На некоторых дистрибутивах может отсутствовать каталог "rsyslog.service.d", его нужно создать:
# mkdir -p /etc/systemd/system/rsyslog.service.d
# Содержимое файла /etc/systemd/system/rsyslog.service.d/logging.conf:
[Unit]
Requires=syslog.socket
[Install]
Alias=syslog.service
Шаг 3. Загрузите файл drop-in и перезапустите службы:
# systemctl daemon-reload
# systemctl enable rsyslog.service
# systemctl restart rsyslog.service
# systemctl restart systemd-journald.service
Приложение 2. Пример файла конфигурации службы syslog-ng
Пример файла /etc/syslog-ng/syslog-ng.conf:
@version: current
@include "scl.conf"
options {
flush_lines (0);
time_reopen (10);
log_fifo_size (1000);
chain_hostnames (off);
use_dns (no);
dns-cache(no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
stats-freq(0);
mark-freq(0);
};
########################
# Sources
########################
source s_sys {
system();
internal();
};
########################
# Destinations
########################
# стандартные файлы журналов.
destination d_auth { file("/var/log/auth.log"); };
destination d_cron { file("/var/log/cron.log"); };
destination d_daemon { file("/var/log/daemon.log"); };
destination d_kern { file("/var/log/kern.log"); };
destination d_lpr { file("/var/log/lpr.log"); };
destination d_mail { file("/var/log/mail.log"); };
destination d_user { file("/var/log/user.log"); };
#destination d_uucp { file("/var/log/uucp.log"); };
# универсальные файлы журналов.
destination d_messages { file("/var/log/messages"); };
destination d_syslog { file("/var/log/syslog"); };
# опциональные файлы журналов
#destination d_debug { file("/var/log/debug"); };
#destination d_error { file("/var/log/error"); };
# опциональные выводы событий
# root's консоль.
#destination d_mlal { usertty("*"); };
# virtual консоль.
#destination d_cons { file("/dev/console"); };
########################
# Filters
########################
filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); };
filter f_devd { program("devd") and level(debug..info); };
filter f_audit {
program("audit")
or program("audispd")
or program("audisp-syslog");
};
filter f_messages {
level(info..warn)
and not facility(auth, authpriv, mail, news)
and not filter(f_audit);
};
filter f_syslog {
not facility(auth, authpriv, mail)
and level(info..emerg)
and not filter(f_audit);
};
filter f_auth { facility(auth, authpriv); };
filter f_cron { facility(cron) and level(info..emerg); };
filter f_kern { facility(kern) and level(info..emerg); };
filter f_lpr { facility(lpr) and level(info..emerg); };
filter f_user { facility(user) and level(info..emerg); };
filter f_daemon { facility(daemon) and level(info..emerg); };
filter f_mail { facility(mail) and level(info..emerg); };
#filter f_uucp { facility(uucp) and level(info..emerg); };
#filter f_error { level(err); };
#filter f_console { level(warn .. emerg); };
#filter f_crit { level(crit .. emerg); };
########################
# Log paths
########################
# Запись событий в соответствующие файлы:
log { source(s_sys); filter(f_messages); destination(d_messages); };
log { source(s_sys); filter(f_syslog); destination(d_syslog); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
log { source(s_sys); filter(f_kern); destination(d_kern); };
log { source(s_sys); filter(f_lpr); destination(d_lpr); };
log { source(s_sys); filter(f_user); destination(d_user); };
log { source(s_sys); filter(f_daemon); destination(d_daemon); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
#log { source(s_sys); filter(f_uucp); destination(d_uucp); };
#log { source(s_sys); filter(f_debug); destination(d_debug); };
#log { source(s_sys); filter(f_error); destination(d_error); };
#log { source(s_sys); filter(f_console); destination(d_cons); };
#log { source(s_sys); filter(f_crit); destination(d_mlal); };
@include "/etc/syslog-ng/conf.d/*.conf"
Приложение 3. Пример файла конфигурации службы rsyslog
#### MODULES ####
module(load="imuxsock"
SysSock.Use="on"
SysSock.Ratelimit.Burst="20000"
SysSock.Ratelimit.Interval="15")
module(load="imklog")
#### GLOBAL DIRECTIVES ####
#$MaxMessageSize 64k # Устанавливает максимальный размер сообщения
$WorkDirectory /var/spool/rsyslog
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
#### INCLUDE ADDITIONAL CONFIGS ####
include(file="/etc/rsyslog.d/*.conf" mode="optional")
Приложение 4. Описание параметров файла auditd.conf
Перечень рекомендуемых параметров конфигурации приведен в таблице:
| Ключевое слово | Описание | Debian / Ubuntu | Red Hat / CentOS |
|---|---|---|---|
local_events |
Параметр определяет, необходимо ли службе собирать локальные события | yes |
yes |
write_logs |
Параметр определяет, необходимо ли службе записывать журналы | yes |
yes |
log_file |
Полный путь к файлу журнала, в котором будут храниться записи аудита | /var/log/audit/audit.log |
/var/log/audit/audit.log |
log_group |
Группа, которая применяется к разрешениям файла журнала | adm |
adm |
log_format |
Формат журнала. Параметр описывает, как информация должна храниться. Доступные значения - RAW - запись аудита будут храниться точно так, как его отправляет ядро;- NOLOG - запись аудита храниться не будет;- ENRICHED - запись аудита будет храниться с обогащением: добавится информация о uid, gid, системных вызовах, архитектуре и адресе сокета перед записью события на диск. |
ENRICHED |
ENRICHED |
flush |
Команда сброса данных на диск. Допустимые значения: - none- incremental- data- sync |
INCREMENTAL_ASYNC |
INCREMENTAL_ASYNC |
freq |
Сколько записей следует записать перед выполнением команды flush. Доступно только, если flush имеет значение incremental |
50 |
50 |
max_log_file |
Максимальный размер файла журнала, в мегабайтах | 8 |
8 |
num_logs |
Количество сохраняемых файлов журнала | 5 |
5 |
priority_boost |
Необходимое повышение приоритета | 4 |
6 |
disp_qos(УСТАРЕЛ) |
В новых версиях auditd не используется. Поведение службы при потерях между службой и диспетчером. Допустимые значения - lossy - блокировать связь;- lossless - не блокировать связь |
lossy |
параметр не указывается |
dispatcher |
Это программа, которая запускается службой при запуске. Она будет передавать копии всех событий аудита на стандартный ввод этого приложения. Убедитесь, что вы доверяете приложению, которое вы добавляете в эту строку, поскольку оно запускается с правами root | /sbin/audispd |
параметр не указывается |
name_format |
Формат наименования узлов (node) компьютеров, которые добавляются в поток событий аудита. Допустимые значения: - none - в событие аудита не указывается имя компьютера;- hostname - указывается имя, возвращаемое запросом gethostname- fqd - полное доменное имя компьютера- numeric - тоже что и fqd, но при этом определяется IP-адрес компьютера- user - наименование учетной записи пользователя компьютера |
FQD |
FQD |
max_log_file_action |
Поведение службы при достижении максимального размера файла журнала. Допустимые значения: - ignore - ничего не делать;- syslog - выдать предупреждение в системный журнал;- suspend - прекратить запись;- rotate - последовательно менять журналы для записи;- keep_logs - аналогичен параметру Rotate, за исключением того, что он не использует параметр num_logs. Это предотвращает перезапись журналов аудита |
ROTATE |
ROTATE |
space_left |
Количество оставшихся на диске мегабайт, при достижении которых служба будет требовать выполнение параметра space_left_action, поскольку в системе начинает заканчиваться дисковое пространство |
75 |
75 |
space_left_action |
Поведение службы когда в системе начало заканчиваться дисковое пространство. Допустимые значения: - ignore - ничего не делать;- syslog - выдать предупреждение в системный журнал;- email - отправить предупреждение на адрес электронной почты, указанный в параметре action_mail_acct и в системный журнал;- exec - выполнить скрипт;- suspend - прекратить запись журналов- single - перевести компьютер в однопользовательский режим- halt - выключить компьютер. |
SYSLOG |
SYSLOG |
verify_email |
Поведение службы для проверки адреса электронной почты | yes |
yes |
action_mail_acct |
Адрес электронной почты или алиас. Значение по умолчанию - root |
root |
root |
admin_space_left |
Количество оставшихся на диске мегабайт, при достижении которых служба будет требовать выполнение параметра admin_space_left_action, поскольку в системе начинает критически не хватать дискового пространства |
50 |
50 |
admin_space_left_action |
Поведение службы когда в системе начинает критически не хватать дискового пространства. Допустимые значения те же, что и для space_left_action |
SUSPEND |
SUSPEND |
disk_full_action |
Какое действие следует предпринять, если служба обнаружила что диск, на который записываются файлы журналов, заполнен. Допустимые значения те же, что и для space_left_action |
SUSPEND |
SUSPEND |
disk_error_action |
Какие действия следует предпринять при возникновении ошибки при записи событий аудита на диск или изменении последовательности журналов. | SUSPEND |
SUSPEND |
use_libwrap |
Параметр определяет, следует ли использовать tcp_wrappers для обнаружения попыток подключения с разрешенных компьютеров |
yes |
yes |
tcp_listen_queue |
Параметр определяет количество допустимых ожидающих соединений в очереди | 5 |
5 |
tcp_max_per_addr |
Параметр определяет количество разрешенных одновременных подключений с одного IP-адреса | 1 |
1 |
tcp_client_max_idle |
Параметр определяет количество секунд, в течение которых допустимо бездействие клиента (не поступают данные), прежде чем служба подаст жалобу для закрытия неактивного подключения. Значение 0 отключает проверку. |
0 |
0 |
enable_krb5 |
Параметр определяет, использовать ли Kerberos 5 для аутентификации и шифрования |
no |
параметр не указывается |
krb5_principal |
Это принципал для этого сервера. По умолчанию используется auditd. Учитывая это значение по умолчанию, сервер будет искать ключ с именем вида Auditd/hostname@EXAMPLE.COM, хранящийся в /etc/audit/audit.key, для аутентификации, где имя хоста — это имя хоста сервера, возвращаемое DNS |
auditd |
auditd |
transport |
Протокол передачи данных. Если установлено значение TCP, будут использоваться только TCP-соединения в виде открытого текста. Если установлено значение KRB5, для аутентификации и шифрования будет использоваться Kerberos 5 |
параметр не указывается | tcp |
distribute_network |
Параметр определяет, используется ли распределенная сеть | no |
no |
q_depth |
Параметр определяет, насколько большой должна быть внутренняя очередь событий аудита | 8192 |
8192 |
overflow_action |
Параметр определяет, какое действия нужно предпринять службе при переполнении внутренней очереди. Допустимые значения те же, что и для space_left_action |
параметр не указывается | SYSLOG |
max_restarts |
Параметр определяет, сколько раз служба может попытаться перезапустить вышедший из строя плагин | параметр не указывается | 10 |
plugin_dir |
Параметр определяет путь, по которому установлены плагины. | параметр не указывается | /etc/audit/plugins.d |
end_of_event_timeout |
Параметр определяет количество секунд, используемое библиотечными процедурами пользовательского пространства auparse() и утилитами aureport(8), ausearch(8) для того, чтобы считать событие завершенным при анализе потока журнала событий. |
параметр не указывается | 2 |
Приложение 5. Пример правил аудита
-D
-b 8192
-f 1
-w /etc/audit/ -p rwxa -k audit_configs_full_monitor
-w /var/log/alternatives.log -p rwxa -k log_monitor
-w /var/log/faillog -p rwxa -k log_monitor
-w /var/log/wtmp -p rwxa -k log_monitor
-a exclude,always -F msgtype=BPRM_FCAPS
-a exclude,always -F msgtype=MMAP
-a exclude,always -F msgtype=BPF
-a exclude,always -F msgtype=CWD
-a exclude,always -F exe=/usr/bin/lnav
-a exclude,always -F exe=/lib/systemd/systemd-journald
-a exclude,always -F exe=/lib64
-a exclude,always -F exe=/run/systemd
-a exclude,always -F exe=/usr/bin/systemctl
#-a exclude,always -F exe=/usr/lib/postfix/sbin/pickup
-a exclude,always -F msgtype=FD_PAIR
#-a exclude,always -F msgtype=PATH
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -k perm_changes
-w /root/.hidden -p wa -k watch_hidden
# ===== EXECVE (ВСЕ КОМАНДЫ) =====
-a always,exit -F arch=b64 -S execve,execveat -k exec_all_commands
-a always,exit -F arch=b32 -S execve,execveat -k exec_all_commands
# ===== PRIVILEGE ESCALATION =====
-a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid,setresuid,setresgid,setfsuid,setfsgid -k privilege_escalation
-a always,exit -F arch=b32 -S setuid,setgid,setreuid,setregid,setresuid,setresgid,setfsuid,setfsgid -k privilege_escalation
# ===== SENSITIVE FILES =====
-a always,exit -F arch=b64 -S open,openat,openat2 -F path=/etc/shadow -F auid!=-1 -k shadow_read
-a always,exit -F arch=b32 -S open,openat -F path=/etc/shadow -F auid!=-1 -k shadow_read
-a always,exit -F arch=b64 -S open,openat,openat2 -F path=/etc/passwd -F auid!=-1 -k passwd_read
-a always,exit -F arch=b32 -S open,openat -F path=/etc/passwd -F auid!=-1 -k passwd_read
# ===== MOUNT OPERATIONS =====
-a always,exit -F arch=b64 -S mount,umount2 -k mount_operations
-a always,exit -F arch=b32 -S mount,umount2 -k mount_operations
# ===== PTRACE (Process Tracing) =====
-a always,exit -F arch=b64 -S ptrace -k ptrace_usage
-a always,exit -F arch=b32 -S ptrace -k ptrace_usage
# ===== SOCKET OPERATIONS =====
-a always,exit -F arch=b64 -S socket -F a0=2 -k socket_ipv4
-a always,exit -F arch=b32 -S socket -F a0=2 -k socket_ipv4
-a always,exit -F arch=b64 -S socket -F a0=0xa -k socket_ipv6
-a always,exit -F arch=b32 -S socket -F a0=0xa -k socket_ipv6
-a always,exit -F arch=b64 -S bind -k network_bind
-a always,exit -F arch=b32 -S bind -k network_bind
# ===== TIME MANIPULATION =====
-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time_changes
-a always,exit -F arch=b32 -S adjtimex,settimeofday,stime,clock_settime -k time_changes
# ===== NETWORK CONFIG =====
-a always,exit -F arch=b64 -S sethostname,setdomainname -k network_modifications
-a always,exit -F arch=b32 -S sethostname,setdomainname -k network_modifications
# ===== PROCESS TRACKING =====
-a always,exit -F arch=b64 -S fork,vfork,clone,clone3 -F auid!=-1 -k process_creation
-a always,exit -F arch=b32 -S fork,vfork,clone,clone3 -F auid!=-1 -k process_creation
-a always,exit -F arch=b64 -S exit,exit_group -F auid!=-1 -k process_exit_users
-a always,exit -F arch=b32 -S exit,exit_group -F auid!=-1 -k process_exit_users
# ===== FILE OPERATIONS (ТОЛЬКО ВАЖНЫЕ) =====
# Статистика файлов (базовая информация)
-a always,exit -F arch=b64 -S stat,lstat,statx -k file_stat
-a always,exit -F arch=b32 -S lstat,stat -k file_stat
# fstat - информация о открытом файле (используется везде, но НУЖЕН для корреляции)
-a always,exit -F arch=b64 -S fstat -k fstat_usage
-a always,exit -F arch=b32 -S fstat -k fstat_usage
# mknod - создание специальных файлов
-a always,exit -F arch=b64 -S mknod,mknodat -k mknod_usage
-a always,exit -F arch=b32 -S mknod,mknodat -k mknod_usage
# chown - изменение владельца (ВАЖНО! но логируется через watch тоже)
-a always,exit -F arch=b64 -S chown,fchown,lchown,fchownat -F auid!=-1 -k chown_usage
-a always,exit -F arch=b32 -S chown,fchown,lchown,fchownat -F auid!=-1 -k chown_usage
# link операции - создание жестких и символических ссылок
-a always,exit -F arch=b64 -S link,linkat,symlink,symlinkat -F auid!=-1 -k link_usage
-a always,exit -F arch=b32 -S link,linkat,symlink,symlinkat -F auid!=-1 -k link_usage
# УДАЛЕНЫ: chdir, getcwd, readlink (шум)
# УДАЛЕНЫ: access, getdents (системные, вызываются 1000x/сек)
# УДАЛЕНЫ: chmod (логируется через watch /usr/bin/chmod -p x)
# ===== SOCKET OPTIONS =====
-a always,exit -F arch=b64 -S setsockopt -F auid!=-1 -k setsockopt_usage
-a always,exit -F arch=b32 -S setsockopt -F auid!=-1 -k setsockopt_usage
-a always,exit -F arch=b64 -S getsockopt -F auid!=-1 -k getsockopt_usage
-a always,exit -F arch=b32 -S getsockopt -F auid!=-1 -k getsockopt_usage
-a always,exit -F arch=b64 -S listen -k listen_usage
-a always,exit -F arch=b32 -S listen -k listen_usage
-a always,exit -F arch=b64 -S accept,accept4 -k accept_usage
-a always,exit -F arch=b32 -S accept4 -k accept_usage
-a always,exit -F arch=b64 -S shutdown -k shutdown_usage
-a always,exit -F arch=b32 -S shutdown -k shutdown_usage
-a always,exit -F arch=b64 -S getpeername -k getpeername_usage
-a always,exit -F arch=b32 -S getpeername -k getpeername_usage
-a always,exit -F arch=b64 -S getsockname -k getsockname_usage
-a always,exit -F arch=b32 -S getsockname -k getsockname_usage
# ===== SIGNALS & IPC =====
-a always,exit -F arch=b64 -S getgroups -k groups_query
-a always,exit -F arch=b32 -S getgroups -k groups_query
-a always,exit -F arch=b64 -S kill,rt_sigqueueinfo,tgkill -k kill_signal_usage
-a always,exit -F arch=b32 -S kill,rt_sigqueueinfo,tgkill -k kill_signal_usage
-a always,exit -F arch=b64 -S futex -F auid!=-1 -k futex_usage
-a always,exit -F arch=b32 -S futex -F auid!=-1 -k futex_usage
-a always,exit -F arch=b64 -S shmget,shmctl,shmdt,shmat -k ipc_shm_usage
-a always,exit -F arch=b32 -S shmget,shmctl,shmdt,shmat -k ipc_shm_usage
-a always,exit -F arch=b64 -S semget,semctl,semop,semtimedop -k ipc_sem_usage
-a always,exit -F arch=b32 -S semget -k ipc_sem_usage
-a always,exit -F arch=b64 -S msgget,msgctl,msgsnd,msgrcv -k ipc_msg_usage
-a always,exit -F arch=b32 -S msgget,msgctl,msgsnd,msgrcv -k ipc_msg_usage
-a always,exit -F arch=b64 -S inotify_init,inotify_init1,inotify_add_watch,inotify_rm_watch -k inotify_usage
-a always,exit -F arch=b32 -S inotify_init,inotify_init1,inotify_add_watch,inotify_rm_watch -k inotify_usage
-a always,exit -F arch=b64 -S splice,tee,vmsplice -k splice_usage
-a always,exit -F arch=b32 -S splice,tee,vmsplice -k splice_usage
-a always,exit -F arch=b64 -S pipe,pipe2 -k pipe_usage
-a always,exit -F arch=b32 -S pipe,pipe2 -k pipe_usage
-a always,exit -F arch=b64 -S flock -F auid!=-1 -k flock_usage
-a always,exit -F arch=b32 -S flock -F auid!=-1 -k flock_usage
-a always,exit -F arch=b64 -S mlock,mlock2,munlock,mlockall,munlockall -k mlock_usage
-a always,exit -F arch=b32 -S mlock,mlock2,munlock,mlockall,munlockall -k mlock_usage
-a always,exit -F arch=b64 -S mremap -F auid!=-1 -k mremap_usage
-a always,exit -F arch=b32 -S mremap -F auid!=-1 -k mremap_usage
-a always,exit -F arch=b64 -S mincore -F auid!=-1 -k mincore_usage
-a always,exit -F arch=b32 -S mincore -F auid!=-1 -k mincore_usage
-a always,exit -F arch=b64 -S madvise -F auid!=-1 -k madvise_usage
-a always,exit -F arch=b32 -S madvise -F auid!=-1 -k madvise_usage
# ===== WATCH RULES (Конфигурационные файлы) =====
-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/gshadow -p wa -k gshadow_changes
-w /etc/security/opasswd -p wa -k opasswd_changes
-w /etc/ssh/sshd_config -p wa -k sshd_config_changes
-w /etc/ssh/ssh_config -p wa -k ssh_config_changes
-w /root/.ssh -p wa -k root_ssh_changes
-w /home -p wa -k home_changes
-w /etc/pam.d/ -p wa -k pam_changes
-w /etc/security/pwquality.conf -p wa -k pwquality_changes
-w /etc/security/ -p wa -k security_config_changes
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_d_changes
-w /etc/cron.d/ -p wa -k cron_d_changes
-w /etc/cron.daily/ -p wa -k cron_daily_changes
-w /etc/cron.hourly/ -p wa -k cron_hourly_changes
-w /etc/cron.monthly/ -p wa -k cron_monthly_changes
-w /etc/cron.weekly/ -p wa -k cron_weekly_changes
-w /etc/crontab -p wa -k crontab_changes
-w /var/spool/cron/ -p wa -k cron_spool_changes
-w /etc/systemd/ -p wa -k systemd_changes
-w /usr/lib/systemd/system/ -p wa -k systemd_system_changes
-w /lib/systemd/system/ -p wa -k systemd_lib_changes
-w /etc/init.d/ -p wa -k init_d_changes
-w /etc/rc.local -p wa -k rc_local_changes
-w /etc/profile -p wa -k profile_changes
-w /etc/profile.d/ -p wa -k profile_d_changes
-w /etc/bash.bashrc -p wa -k bashrc_changes
-w /etc/zsh/ -p wa -k zsh_changes
-w /etc/hosts -p wa -k hosts_changes
-w /etc/hostname -p wa -k hostname_changes
-w /etc/network -p wa -k network_config_changes
-w /etc/resolv.conf -p wa -k resolv_conf_changes
-w /sbin/insmod -p x -k insmod_execution
-w /sbin/rmmod -p x -k rmmod_execution
-w /sbin/modprobe -p x -k modprobe_execution
-a always,exit -F arch=b64 -S init_module,delete_module,finit_module -k kernel_module_operations
-a always,exit -F arch=b32 -S init_module,delete_module,finit_module -k kernel_module_operations
-w /etc/modprobe.conf -p wa -k modprobe_conf_changes
-w /etc/modprobe.d/ -p wa -k modprobe_d_changes
-w /boot -p wa -k boot_changes
-w /boot/grub -p wa -k grub_changes
-w /boot/grub2 -p wa -k grub2_changes
-w /etc/ld.so.preload -p wa -k ld_preload_changes
-w /etc/ld.so.conf -p wa -k ld_so_conf_changes
-w /etc/ld.so.conf.d/ -p wa -k ld_so_conf_d_changes
#-a always,exit -F arch=b64 -S open,openat,openat2 -F dir=/tmp -k tmp_library_load
#-a always,exit -F arch=b32 -S open,openat -F dir=/tmp -k tmp_library_load
-a always,exit -F arch=b64 -S open,openat,openat2 -F dir=/dev/shm -k shm_library_load
-a always,exit -F arch=b32 -S open,openat -F dir=/dev/shm -k shm_library_load
-w /etc/selinux -p wa -k selinux_changes
-w /usr/sbin/setenforce -p x -k setenforce_execution
-w /usr/sbin/semodule -p x -k semodule_execution
-w /etc/apparmor -p wa -k apparmor_changes
-w /etc/apparmor.d/ -p wa -k apparmor_d_changes
-w /etc/audit/ -p wa -k audit_config_changes
-w /etc/libaudit.conf -p wa -k libaudit_conf_changes
-w /sbin/auditctl -p x -k auditctl_execution
-w /sbin/auditd -p x -k auditd_execution
-w /var/log/audit/ -p wa -k audit_log_changes
-w /etc/locale.conf -p wa -k locale_changes
-w /etc/localtime -p wa -k localtime_changes
# ===== DANGEROUS TOOLS =====
-w /usr/bin/docker -p x -k docker_execution
-w /var/lib/docker/ -p wa -k docker_data_changes
-w /etc/docker/ -p wa -k docker_config_changes
-w /usr/bin/nc -p x -k nc_execution
-w /usr/bin/ncat -p x -k ncat_execution
-w /usr/bin/socat -p x -k socat_execution
-w /usr/bin/netcat -p x -k netcat_execution
-w /usr/bin/tcpdump -p x -k tcpdump_execution
-w /usr/sbin/tcpdump -p x -k tcpdump_sbin_execution
-w /usr/bin/ssh -p x -k ssh_execution
-w /usr/bin/scp -p x -k scp_execution
-w /usr/bin/sudo -p x -k sudo_execution
-w /usr/bin/su -p x -k su_execution
-w /usr/bin/python3 -p x -k python3_execution
-w /usr/bin/perl -p x -k perl_execution
# ===== AUDITD CONFIGS AND RULES =====
-a always,exit -F arch=b64 -S openat,open_by_handle_at -F a2&1 -F path=/etc/audit -k audit_write
-a always,exit -F arch=b64 -S write -F path=/etc/audit -k audit_modify
-a always,exit -F arch=b64 -S truncate,ftruncate -F path=/etc/audit -k audit_modify
# ===== ENOSPACE RULES ====
-a always,exit -F arch=b64 -S open,openat,creat,write,writev,pwritev,truncate,ftruncate,fallocate,mkdir,mknod,link,symlink -F exit=-28 -k enospc
-a always,exit -F arch=b32 -S open,openat,creat,write,writev,pwritev,truncate,ftruncate,fallocate,mkdir,mknod,link,symlink -F exit=-28 -k enospc
# ===== ИСКЛЮЧЕНИЕ IPTABLES (добавлено 29.12.2025) =====
-a never,exit -F arch=b64 -S execve -F exe=/usr/sbin/xtables-nft-multi -F auid=-1
-a never,exit -F arch=b32 -S execve -F exe=/usr/sbin/xtables-nft-multi -F auid=-1
-a never,exit -F arch=b64 -S execve -F exe=/usr/sbin/iptables -F auid=-1
-a never,exit -F arch=b32 -S execve -F exe=/usr/sbin/iptables -F auid=-1
-a never,exit -F arch=b64 -S execve -F exe=/usr/sbin/ip6tables -F auid=-1
-a never,exit -F arch=b32 -S execve -F exe=/usr/sbin/ip6tables -F auid=-1
-e 1