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

ОС семейства 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

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

  1. Настройка службы журналирования.
  2. Настройка службы auditd.
  3. Настройка службы ufw (опционально).
  4. Настройка службы firewalld (опционально).
  5. Настройка службы iptables (опционально).
  6. Настройка журналирования bash-команд (опционально).
  7. Настройки безопасности (опционально).
  8. Включение источника на платформе.

Все действия при настройке источника должны выполняться от имени суперпользователя.

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

Б - Настройка syslog-ng

Настройка 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