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

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

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

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

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

Характеристика Значение
Название Linux-Debian
Номер (Порт) 2671
Тип Operating System
Вендор Debian
Профиль сбора tcp_input
udp_input

Примечание: если источник будет отдавать большой поток событий, и если таких источников будет много, то рекомендуется передавать события по протоколу UDP. Так как при использовании протокола TCP может образоваться большая очередь на агенте сбора лог-коллектора. Но при использовании протокола UDP могут происходить потери. Для выбора оптимальных настроек для вашей системы, рекомендуется обратиться в службу технического сопровождения Платформы Радар.

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

  1. Настройка службы журналирования.
  2. Настройка службы auditd.
  3. Настройка журналирования bash-команд.
  4. Проверка настроенной конфигурации.
  5. Включение источника на платформе.

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

Настройка службы журналирования

Для отправки событий стандарта syslog в Платформу Радар на источнике необходимо настроить службу журналирования и отправку событий.

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

Службы реализуют механизм централизованного протоколирования событий в ОС семейства Unix. Все части системы (включая ядро и системные службы) передают происходящие в них события службе журналирования. В свою очередь, служба журналирования добавляет к телу события информацию о важности (severity), категории (facility), времени происшествия события, hostname или IP-адрес хоста, имя и PID службы, сгенерировавшей лог.

Служба журналирования, согласно настройкам в файле конфигурации, классифицирует все события в несколько выходных потоков, согласно категории (facility) и важности (severity). Например, события ядра системы будут иметь категорию kern, а события почтового сервера - категорию mail. Если уровень важности не имеет значения, но необходимо, чтобы в одном файле были собраны события только одного демона, в файле конфигурации службы журналирования указывается запись kern.* -/var/log/kern.log, где * - любой уровень важности события. Но если необходимо, например, сохранять в файл события ошибок почтового сервера, указывается строка mail.err /var/log/mail.err. Таким образом, можно распределить события разных категорий и уровней важности по разным файлам.

Перед началом работы с платформой мы рекомендуем вам настроить параметры категории (facility) и важности (severity) события для оптимизации передаваемого в платформу потока.

Подробнее о механизме централизованного протоколирования событий вы можете ознакомиться в соответствующих руководствах для вашей ОС.

Определение используемой службы журналирования

Примечание: В случае пересылки событий источника через промежуточный узел, имя узла-источника может быть автоматически переопределено с использованием сетевого адреса отправителя; рекомендуется дополнительная проверка корректности имён источников, передаваемых на Платформу Радар.

Для систем на базе DEB ( Astra Linux / Debian / Ubuntu) выполните команду:

# dpkg --list | grep syslog

Для систем на базе RPM (РЕД ОС / ALT Linux / Red Hat / CentOS ) выполните команду:

# rpm -qa *syslog*

Для систем SUSE Linux Enterprise Server / openSUSE выполните команду:

# zypper search *syslog* --installed-only | grep 'i |'

На экран будет выведено название используемой службы. Если результат отличается от rsyslog или syslog-ng, то рекомендуется выполнить установку соответствующей службы.

Настройка rsyslog

Установка 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

Добавьте службу rsyslog в автозагрузку и запустите:

# systemctl enable rsyslog
# systemctl start rsyslog

Конфигурация rsyslog

Служба rsyslog использует основной конфигурационный файл /etc/rsyslog.conf для определения общих правил обработки логов и настройки самого демона, для модульного разделения конфигурации rsyslog, упрощения сопровождения и поддержки применяются дополнительные (inside) файлы конфигурации расположенные в /etc/rsyslog.d/. Подробнее об особенностях конфигурации rsyslog см. Приложение 1. Пример конфигурационного файла приведен в Приложение 2.

Для RHEL систем может потребоваться дополнительная настройка.
Если используется SElinux проверьте, выданы ли соответствующие разрешения.

Выполните следующие действия:

  • Откройте основной файл конфигурации rsyslog:

    # nano /etc/rsyslog.conf
    
  • Раскомментируйте или добавьте:

    module(load="imuxsock"
           SysSock.Use="on"
           SysSock.Ratelimit.Burst="20000"
           SysSock.Ratelimit.Interval="15")
    module(load="imklog")
    
    # module(load="imfile" mode="inotify" PollingInterval="10") # Применяется для получения событий из локального файла
    
    include(file="/etc/rsyslog.d/*.conf" mode="optional")
    
    #$MaxMessageSize 64k              # Устанавливает максимальный размер сообщения
    $WorkDirectory /var/spool/rsyslog
    $FileOwner root
    $FileGroup adm
    $FileCreateMode 0640
    $DirCreateMode 0755
    $Umask 0022
    

    Количество отправленных событий может превышать ограничения, установленные для модуля imuxsock. Директивы SysSock.Ratelimit.* устанавливают пользовательские ограничения, для полного отключения ограничений необходимо установить эти параметры равными 0

  • Закомментируйте или удалите строки, отвечающие за определение директив и загрузку модуля и imjournal.

  • Создайте дополнительный конфигурационный файл /etc/rsyslog.d/01-infile-system-journal.conf со следующим содержимым:

    # Установка правил для локального сохранения полученных событий в файлы.
    
    if $syslogfacility-text == 'auth' or $syslogfacility-text == 'authpriv' then {  
        action(type="omfile" file="/var/log/auth.log")  
    }  
    if $syslogfacility-text == 'user' then {  
        action(type="omfile" file="/var/log/user.log")  
    }  
    if $syslogfacility-text == 'cron' then {  
        action(type="omfile" file="/var/log/cron.log")  
    }  
    if $syslogfacility-text == 'kern' then {  
        action(type="omfile" file="/var/log/kern.log")  
    }  
    if $syslogfacility-text == 'mail' then {  
        action(type="omfile" file="/var/log/mail.log")    
    }
    

    Цифры в наименовании файлов в директории rsyslog.d определяют очередность загрузки.

  • Проверьте наличие ошибок и конфликтов конфигурации rsyslog:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Откройте файл /etc/systemd/journald.conf.

  • Установите параметр ForwardToSyslog=yes.
  • Для применения изменений конфигурации требуется перезапустить службы rsyslog и systemd-journald:

    # systemctl restart rsyslog
    # systemctl restart systemd-journald
    

Настройка получения событий с помощью модуля imjournal

При необходимости, доступно использование модуля imjournal, при этом rsyslog напрямую обращается в журнал systemd-journald и получает события оттуда. Методика экспорта событий в Платформу Радар остается неизменной.

Выполните следующие действия:

  • Откройте файл /etc/rsyslog.conf.
  • Установите следующие значения модулей:

    module(load="imjournal"
           UsePid="system"
           FileCreateMode="0644"
           StateFile="imjournal.state"
           Ratelimit.Interval="15"
           Ratelimit.Burst="20000")
    module(load="imuxsock" SysSock.Use="off")
    #module(load="imklog") # Закомментируйте, иначе события kern будут дублироваться
    
  • Проверьте наличие ошибок и конфликтов конфигурации rsyslog:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Откройте файл /etc/systemd/journald.conf.

  • Установите параметр ForwardToSyslog=no.
  • Для применения изменений конфигураций перезапустите службы rsyslog и systemd-journald:

    # systemctl restart rsyslog
    # systemctl restart systemd-journald
    

Настройка экспорта системных событий

Выполните следующие действия:

  • Создайте дополнительный конфигурационный файл /etc/rsyslog.d/02-forward-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 {  
        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"
        )
        stop
    }
    
  • При необходимости настройте фильтр, установив значение $syslogseverity отправляемых в Платформу событий, в соответствии с:

    (0) emerg 
    (1) alert
    (2) crit
    (3) err
    (4) warning
    (5) notice
    (6) info
    (7) debug
    
  • Проверьте наличие ошибок и конфликтов конфигурации:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Для применения изменений конфигурации требуется перезапустить службу rsyslog:

    # systemctl restart rsyslog
    

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

Для исключения дублирования событий и экономии ресурсов целевого узла, рекомендуется отключить systemd-journald-audit.socket.

Выполните следующие действия:

  • Проверьте наличие audispd:

    # RHEL/CentOS/Fedora:
    rpm -q audit
    rpm -q audispd-plugins
    
    # Debian/Ubuntu:
    dpkg -l | grep auditd
    
  • Если плагин отсутствует, то установите его.

  • Откройте файл /etc/audit/plugins.d/syslog.conf (или /etc/audisp/plugins.d/syslog.conf если версия auditd ниже 3.0)
  • Установите значения параметров в файле /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            # формат данных, передаваемых плагином
    
  • Откройте файл /etc/audit/auditd.conf и установите значение параметра write_logs = no

  • Создайте файл /etc/rsyslog.d/03-fwd-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
    }
    
  • Проверьте наличие ошибок и конфликтов конфигурации rsyslog:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Для применения изменений конфигураций перезапустите службы rsyslogsystemd-journald и auditd :

    # systemctl restart rsyslog
    # systemctl restart systemd-journald
    # systemctl restart auditd
    
Настройка экспорта событий без audispd

Если использование audispd для передачи событий auditd недоступно, существует возможность настройки альтернативного конвейера доставки событий:

  • Откройте файл /etc/audit/auditd.conf:

    # nano /etc/audit/auditd.conf
    
  • Установите значение параметра write_logs = yes.

  • Создайте файл /etc/rsyslog.d/03-fwd-auditd.conf со следующим содержимым:

    # Этот ruleset устанавливает правила для экспорта событий аудита в Платформу Радар
    # Для использования udp, установите protocol="udp" и закомментируйте/удалите параметры в action после "port"
    
    input(type="imfile" File="/var/log/audit/audit.log"
          Severity="info"
          Facility="local6"
          tag="auditd:")
    
    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
    }
    
  • Проверьте наличие ошибок и конфликтов конфигурации rsyslog:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Для применения изменений конфигураций перезапустите службы rsyslog и auditd:

    # systemctl restart rsyslog
    # systemctl restart auditd
    

Настройка экспорта событий службы UFW

Выполните следующие действия:

  • Проверьте статус службы UFW:

    # ufw status
    
  • Если служба не запущена, то включите ее :

    # ufw enable
    
  • Включите журналирование событий:

    # ufw logging low | medium | high | full
    

    Где:

    • low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам;
    • medium — все то, что при значении low, а также все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости;
    • high — работает также как и medium. Плюс все пакеты с ограничением скорости;
    • full — также как и high, но без ограничения скорости.

    Примечание: рекомендуется использовать уровень логирования medium.

  • Перезапустите службу:

    # ufw reload
    
  • Создайте конфигурационный файл /etc/rsyslog.d/00-ufw.conf со следующим содержимым:

    template(
        name="ufwlogtemplate"
        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="ufwlogtemplate"
            action.repeatedmsgcontainsoriginalmsg="off"
            action.resumeRetryCount="-1"
            queue.type="LinkedList"
            queue.filename="syslog_queue_0"
            queue.saveOnShutdown="on"
            queue.maxDiskSpace="1024m"
            queue.timeoutEnqueue="0"
        )
    #    action(type="omfile" file="/var/log/ufw.log" template="ufwlogtemplate")          # Раскоментируйте, если необходимо отдельно записывать события в файл
        stop
    }
    
  • Перезапустите службу журналирования:

    # systemctl restart rsyslog
    

Настройка отправки событий службы firewalld

Выполните следующие действия:

  • Проверьте статус службы firewalld:

    # systemctl status firewalld
    
  • Если служба не запущена, то включите ее :

    # systemctl start firewalld
    
  • Включите журналирование заблокированных пакетов:

    # firewall-cmd --set-log-denied=all | unicast | broadcast | multicast
    

    Где:

    • all - записываются все заблокированные пакеты, независимо от типа;
    • unicast  – записываются только заблокированные пакеты с типом один-к-одному, то есть из одного хоста на другой хост (обычный сетевой трафик между узлами);
    • multicast – записываются заблокированные пакеты, адресованные всем узлам в сети (широковещательная рассылка);
    • broadcast – записываются заблокированные пакеты, адресованные определённой группе узлов (групповая рассылка).
  • Перезапустите службу:

    # systemctl restart firewalld
    
  • Создайте файл /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"
        )
    #    action(type="omfile" file="/var/log/firewalld.log" template="fwlogtemplate")    # Раскоментируйте, если необходима локальная запись событий в файл
        stop
    }
    
  • Проверьте наличие ошибок и конфликтов конфигурации rsyslog:

    # rsyslogd -f /etc/rsyslog.conf -N 1
    
  • Перезапустите службу rsyslog:

    # systemctl restart rsyslog
    

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

Установка 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

Добавьте службу syslog-ng в автозагрузку и запустите:

# systemctl enable syslog-ng
# systemctl start syslog-ng

Конфигурация syslog-ng

Служба syslog-ng использует основной конфигурационный файл /etc/syslog-ng/syslog-ng.conf для определения общих параметров и настройки самого демона, для модульного разделения конфигурации syslog-ng, упрощения сопровождения и поддержки применяются дополнительные файлы конфигурации обычно расположенные в /etc/syslog-ng/conf.d. Пример syslog-ng.conf расположен в Приложении 4.

Если используется SElinux проверьте, выданы ли соответствующие разрешения.

Выполните следующие действия:

  • Откройте файл /etc/syslog-ng/syslog-ng.confнастройте службу на сбор необходимых событий.
  • В начале файла укажите версию службы (если она не указана) и включенные конфигурационные файлы:

    @version: current
    @include "scl.conf"
    
  • В блоке 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..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_firewalld {
        match("_REJECT" value("MESSAGE")) or match("_DROP" value("MESSAGE"));
    };
    
    filter f_ufw {
        match("\\[UFW" value("MESSAGE"));
    };
    
    filter f_auth { facility(auth, authpriv); };
    filter f_cron { facility(cron) and level(info..emerg); };
    filter f_kern { facility(kern) and level(info..emerg) and not filter(f_firewalld) and not filter(f_ufw); };
    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 path укажите маршрутизацию принятого службой логирования потока событий (блок Source) в указанные файлы логов (блока Destination) в соответствии с заданными фильтрами:

    # Запись событий в соответствующие файлы:
    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"
    
  • Проверьте синтаксическую корректность конфигурации syslog-ng:

    # syslog-ng -s
    
  • Для завершения настройки необходимо перезапустить службу syslog-ng:

    # systemctl restart syslog-ng
    

Настройка экспорта системных событий

Выполните следующие действия:

  • Создайте дополнительный конфигурационный файл /etc/syslog-ng/conf.d/02-forward-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); };
    
  • Проверьте синтаксическую корректность конфигурации syslog-ng:

    # syslog-ng -s
    
  • Откройте файл /etc/systemd/journald.conf:

    nano /etc/systemd/journald.conf
    
  • Установите значение параметров ForwardToSyslog=no и Storage=auto.

  • Для применения изменений конфигураций перезапустите службы syslog-ngsystemd-journaldauditd:

    # systemctl restart syslog-ng
    # systemctl restart systemd-journald
    

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

Для исключения дублирования событий и экономии ресурсов целевого узла, рекомендуется отключить systemd-journald-audit.socket.

Выполните следующие действия:

  • Создайте файл /etc/syslog-ng/conf.d/03-fwd-auditd.conf со следующим содержимым:

    destination d_audit { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) persist-name("fwlog-audit")); };
    
    filter f_fwd_audit {facility(local6); };
    
    log { source(s_sys); filter(f_fwd_audit); destination(d_audit); };
    
  • Проверьте синтаксическую корректность конфигурации syslog-ng:

    # syslog-ng -s
    
  • Проверьте наличие audispd:

    # RHEL/CentOS/Fedora
    rpm -q audispd-plugins
    
    # Debian/Ubuntu
    dpkg -l | grep audispd-plugins
    
  • Если плагин отсутствует, то установите его.

  • Откройте файл /etc/audit/plugins.d/syslog.conf (или /etc/audisp/plugins.d/syslog.conf если версия auditd ниже 3.0).
  • Установите значения параметров в файле /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            # формат данных, передаваемых плагином
    
  • В файле /etc/audit/auditd.conf установите значение параметра write_logs = no.

  • Для применения изменений конфигураций перезапустите службы syslog-ngsystemd-journaldauditd:

    # systemctl restart syslog-ng
    # systemctl restart systemd-journald
    # systemctl restart auditd
    
Настройка экспорта событий без audispd

Если использование audispd для передачи событий auditd недоступно, существует возможность настройки альтернативного конвейера доставки событий:

  • Откройте файл /etc/audit/auditd.conf.
  • Установите значение параметра write_logs = yes.
  • Откройте файл /etc/audit/plugins.d/syslog.conf (или /etc/audisp/plugins.d/syslog.conf если версия auditd ниже 3.0).
  • Проверьте значение параметра в файле /etc/audit/plugins.d/syslog.conf:

    active = no
    
  • Откройте файл /etc/systemd/journald.conf.

  • Установите значение параметров ForwardToSyslog=no и Storage=auto.
  • Создайте файл /etc/syslog-ng/conf.d/03-fwd-auditd.conf со следующими параметрами:

    source s_auditd {
        file (/var/log/audit/audit.log persist-name ("s_auditd_for_siem") program_override("auditd"));
    };
    
    destination d_audit { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) persist-name("fwdlog-audit")); };
    
    filter f_fwd_audit {program("auditd"); };
    
    log { source(s_auditd); filter(f_fwd_audit); destination(d_audit); };
    
  • Проверьте синтаксическую корректность конфигурации syslog-ng:

    # syslog-ng -s
    
  • Для применения изменений конфигураций перезапустите службы syslog-ngsystemd-journaldauditd:

    # systemctl restart syslog-ng
    # systemctl restart systemd-journald
    # systemctl restart auditd
    

Настройка экспорта событий службы UFW

Выполните следующие действия:

  • Проверьте статус службы UFW:

    # ufw status
    
  • Если не служба не запущена, то включите ее:

    # ufw enable
    # systemctl enable ufw
    
  • Включите журналирование событий:

    # ufw logging low | medium | high | full
    

    Где:

    • low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам;
    • medium — все то, что при значении low, а также все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости;
    • high — работает также как и medium. Плюс все пакеты с ограничением скорости;
    • full — также как и high, но без ограничения скорости.

    Рекомендуется использовать уровень логирования medium.

  • Перезапустите службу:

    # ufw reload
    
  • Создайте файл /etc/syslog-ng/conf.d/00-ufw.conf со следующим содержимым:

    # Tamplate для отправки событий в Платформу Радар
    template ufwlogtemplate {
        template("<${PRI}>${DATE} ${HOST} ufw: ${MESSAGE}\n");
        template_escape(no);
    };
    
    # Для включения локальной записи событий ufw в файл:
    # destination d_ufw_infile { file("/var/log/ufw.log") template("ufwlogtemplate"); };
    
    # Для экспортра событий в Платформу Радар
    destination d_ufw_fwd { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) template("ufwlogtemplate") persist-name("ufwlog-forward")); };
    
    log { source(s_sys); filter(f_ufw); destination(d_ufw_fwd); };
    # Раскомментируйте, если необходимо записывать события ufw локально:
    #log { source(s_sys); filter(f_ufw); destination(d_ufw_infile); };
    
  • Перезапустите службу syslog-ng:

    # sudo systemctl restart syslog-ng
    

Настройка экспорта событий службы firewalld

Выполните следующие действия:

  • Проверьте статус службы firewalld:

    # systemctl status firewalld
    
  • Если не служба не запущена, то включите ее:

    # systemctl start firewalld
    
  • Включите журналирование заблокированных пакетов:

    # firewall-cmd --set-log-denied=all | unicast | broadcast | multicast
    

    Где:

    • all - записываются все заблокированные пакеты, независимо от типа;
    • unicast  – записываются только заблокированные пакеты с типом один-к-одному, то есть из одного хоста на другой хост (обычный сетевой трафик между узлами);
    • multicast – записываются заблокированные пакеты, адресованные всем узлам в сети (широковещательная рассылка);
    • broadcast – записываются заблокированные пакеты, адресованные определённой группе узлов (групповая рассылка).
  • В директории /etc/syslog-ng/conf.d добавьте файл 00-fwd-firewall.conf со следующими параметрами:

    # Tamplate для отправки событий в Платформу Радар
    template fwlogtemplate {
        template("<${PRI}>${DATE} ${HOST} firewalld: ${MESSAGE}\n");
        template_escape(no);
    };
    
    # Для включения локальной записи событий ufw в файл:
    # destination d_fwll_infile { file("/var/log/firewalld.log") template("fwlogtemplate"); };
    
    # Для экспортра событий в Платформу Радар
    destination d_fwll_fwd { tcp("<ip-адрес логколлектора>" port(<порт логколлектора>) log_fifo_size(1000) template("fwlogtemplate") persist-name("fwlllog-forward")); };
    
    log { source(s_sys); filter(f_firewalld); destination(d_fwll_fwd); };
    # Раскомментируйте, если необходимо записывать события ufw локально:
    #log { source(s_sys); filter(f_firewalld); destination(d_fwll_infile); };
    
  • Для завершения настройки необходимо перезапустить службу firewalld и syslog-ng:

    # systemctl restart firewalld
    # systemctl restart syslog-ng
    

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

Установка auditd

Если служба не установлена, то вы можете ее установить. Для этого выполните соответствующую команду:

ОС Команда
Astra Linux / Debian / Ubuntu # apt-get update 
# apt-get install auditd
РЕД ОС / ALT Linux / Red Hat / CentOS # Для 7 версий:
# yum -y install auditd
# Для 8+ версий:
# dnf install auditd
SUSE Linux / openSUSE # zypper install auditd

Установка плагина audispd

Если плагин не установлен, то вы можете ее установить. Для этого выполните соответствующую команду:

ОС Команда
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

Конфигурация auditd

Конфигурационный файл службы - /etc/audit/auditd.conf - содержит информацию о конфигурации, специфичную для аудита. Структура файла: одно ключевое слово конфигурации в каждой строке, знак равенства, а затем следует соответствующая информация о конфигурации.

Для корректного разрешения в ip адреса требуется настроить адресацию в /etc/hosts, для этого:

  • Откройте файл /etc/hosts:

    # nano /etc/hosts
    
  • Если имя узла localhost, измените его:

    hostname <Новое имя узла>
    
  • Удалите имя узла или его полное доменное имя (FQDN) из записей с адресами 127.0.0.1, 127.0.1.1 и ::1.

  • Добавьте в файл строку:

    <IP-адрес узла источника> <FQDN узла источника> <Имя узла источника>
    
  • Откройте файл /etc/audit/auditd.conf:

    # nano /etc/audit/auditd.conf
    
  • Укажите следующие значения параметров:

    log_format = ENRICHED
    name_format = NUMERIC
    disp_qos = lossless
    q_depth = 8192
    
  • Перезапустите службу auditd:

    # systemctl restart auditd
    

Пример файла конфигурации auditd.conf приведен в Приложении 5.
Описание всех параметров конфигурационного файла /etc/audit/auditd.conf приведено в Приложении 6.

Настройка правил расширенного аудита

Выполните следующие действия:

  • Создайте файл /etc/audit/rules.d/00-all-extended.rules.
  • Скопируйте в 00-all-extended.rules содержимое файла с рекомендуемыми настройками правил аудита.
  • Перезапустите службу auditd:

    systemctl restart auditd
    

Отключение сокета аудита systemd-journald

На современных дистрибутивах Linux служба systemd-journald использует отдельный сокет systemd-journald-audit.socket для приема событий аудита от ядра через netlink-сокет. При активной службе auditd с плагином audispd события аудита будут дублироваться в журнале systemd. Для экономии дискового пространства и исключения дублирования событий рекомендуется деактивировать сокет systemd-journald-audit.socket на этапе подключения узла в качестве источника событий Платформы Радар, для этого выполните следующие действия:

  1. Остановите сокет:

    # systemctl stop systemd-journald-audit.socket
    
  2. Отключите автозагрузку сокета при перезагрузке системы:

    # systemctl disable systemd-journald-audit.socket
    
  3. Выполните маскировку сокета для предотвращения случайных запусков:

    # systemctl mask systemd-journald-audit.socket
    
  4. Проверьте статус сокета:

    # systemctl is-active systemd-journald-audit.socket
    
  5. Перезапустите службу:

    # systemctl restart systemd-journald
    

    Настройка журналирования bash-команд

Для реализации механизма журналирования может использоваться встроенная переменная bash PROMPT_COMMAND, которая выполняется перед выводом приглашения командной строки. Переменная записывает предыдущую выполненную команду в формате syslog key-value.

Подготовка к настройке журналирования bash-команд

Перед выполнением настройки журналирования bash-команд убедитесь, что соблюдены следующие условия:

  • получен доступ root или права sudo для записи в /etc/profile.d/ ;
  • установлен logger;
  • установлен Bash (не zsh, fish и др.) версии 4.3 или выше.

Шаги по настройке журналирования bash-команд

  1. Создайте файл bash-syslog.sh в каталоге /etc/profile.d.
  2. Укажите в файле следующие настройки:

    #!/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.debug \
            "logger: 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
    

    Где:

    • RETRN_VAL=$? — сохраняем код возврата предыдущей команды (на всякий случай, можно расширить);
    • logger — отправляем сообщение в системный журнал;
    • -p user.debug — используем syslog-фасилити user/debug (по умолчанию попадёт в /var/log/syslog);
    • $(whoami) — кто выполнил команду.
  3. Выдайте разрешение на исполнение этого файла:

    # sudo chmod +x /etc/profile.d/bash-syslog.sh
    
  4. Запустите скрипт:

    # sudo bash /etc/profile.d/bash-syslog.sh
    
  5. Перезапустите экземпляр Bash:

    # exec bash -l
    

Проверка настройки журналирования bash-команд

Выполните команду:

# echo "Test command"
# tail -n 5 /var/log/syslog | grep "user.debug"

Ожидаемый результат:

<15>Aug 15 14:28:51 deb12-auditd logger: 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="172.30.253.1" hostname="deb12-auditd" shell="-bash" bash_version="5.2.15(1)-release" pid=6324 command="ls" exit_code=0

Откат изменений

  1. Создайте файл скрипта в любой директории:

    # nano /tmp/revert-bash-syslog.sh
    
  2. Укажите в файле 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"
    
  3. Установите права на выполнение:

    # sudo chmod +x /tmp/revert-bash-syslog.sh
    
  4. Запустите скрипт:

    # sudo bash /tmp/revert-bash-syslog.sh
    
  5. Перезапустите текущую оболочку:

    # exec bash -l
    

Настройки безопасности

Настройки межсетевого экрана

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

Если используется служба ufw:

  • На узле-источнике (разрешить исходящий трафик к SIEM/агенту):

    # sudo ufw allow out to <IP-агента> port <порт> proto <tcp/udp>
    
  • На узле-агенте (разрешить входящий трафик на SIEM/лог-агент):

    # sudo ufw allow in from <IP-источника> port <порт> proto <tcp/udp>
    
  • Опционально! Добавить разрешение для SSH (порт 22), чтобы не потерять доступ:

    # ufw allow 22/tcp
    
  • После внесения правил применяем изменения:

    # sudo ufw reload
    # sudo ufw status verbose
    

Если используется служба firewalld:

  • На узле-источнике (для исходящего трафика) проверьте (и скорректируйте) используется ли политика --set-target=DROP или специфические правила для исходящих соединений:

    firewall-cmd --get-active-zones # определяем активную зону
    
    firewall-cmd --zone=<из выввода --get-active-zones> --get-target # проверяем target для активной зоны:
    # ACCEPT → исходящий трафик по умолчанию разрешён
    # DROP/REJECT → все пакеты, не соответствующие правилам, будут отброшены
    
    firewall-cmd --zone=public --list-rich-rules
    # Если есть правила типа `reject` или `drop` для исходящего трафика — они будут видны здесь
    # Если правил нет — исходящий трафик разрешён.
    
  • На узле-агенте (для входящего трафика):

    # firewall-cmd --permanent --add-port=<порт>/<tcp/udp>
    
  • После изменения перезагрузить правила:

    # firewall-cmd --reload
    

Если используется служба iptables:

  • На узле-источнике (для исходящего трафика):

    # iptables -A OUTPUT -p <tcp/udp> --dport <порт> -j ACCEPT
    
  • На узле-агенте (для входящего трафика):

    # iptables -A INPUT  -p <tcp/udp> --dport <порт> -j ACCEPT
    

Настройки SElinux

  • Проверьте активен ли SElinux, выполнив команду:

    # getenforce
    
  • Если был получен ответ Permissive, то служба остановлена.

  • Если Enforcing, то служба запущена и ее необходимо настроить следующим образом:

    # ausearch -c 'audisp-remote' --raw | audit2allow -M my-audispremote
    # semodule -X 300 -i my-audispremote.pp
    
  • Для временного отключения SElinux выполните:

    # setenforce 0
    

Правила доступа к audit.log

В случае экспорта событий audit из файла и активном механизме SELinux, необходимо добавить соответствующе правила, разрешающие процессу rsyslog доступ к файлу audit.log, для этого:

  • Создайте файл syslogd.teсо следующим содержимым:

    module syslogd 1.0;
    
    require { 
        type syslogd_t;
        type auditd_log_t;
        class dir { open read watch };
        class file { getattr ioctl open watch };
    } 
    #============= syslogd_t ============== 
    allow syslogd_t auditd_log_t:dir { open read watch };
    allow syslogd_t auditd_log_t:file { getattr ioctl open watch };
    
  • Скомпилируйте модуль из .te в .mod файл:

    # checkmodule -M -m -o syslogd.mod syslogd.te
    
  • Создайте пакет политики (.pp файл) из скомпилированного модуля:

    # semodule_package -o syslogd.pp -m syslogd.mod
    
  • Установите пакет в систему:

    # semodule -i syslogd.pp
    
  • После установки перезапустите службу rsyslog/syslog-ng:

    # systemctl restart rsyslog
    # systemctl restart syslog-ng
    

Разрешение TCP-подключений службы журналирования

При включённом SELinux процесс (напримерrsyslogd - контекст syslogd_t) не имеет права устанавливать TCP-соединения к произвольным портам, помеченным типом unreserved_port_t. Для корректной работы пересылки событий по TCP необходимо явно разрешить использование целевого порта, назначив ему SELinux-тип syslogd_port_t.

  • Если rsyslog использует фиксированный TCP-порт для отправки событий, выполните следующую команду:
# semanage port -a -t syslogd_port_t -p tcp <целевой порт соответствующий профилю сбора>
  • После этого SELinux будет рассматривать указанный порт как допустимый для сетевой активности rsyslogd.
  • Для проверки корректности назначения типа выполните:

    # semanage port -l | grep syslog
    

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

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

Перейдите в веб-интерфейс платформы и включите источник Unix/Linux.

Приложение 1. Подробнее о конфигурации службы rsyslog

Основные концепции и структура конфигурации

Общая схема обработки сообщений

Обработка сообщений в rsyslog состоит из трёх основных этапов:

  1. Источники данных (Inputs): сообщения принимаются через модули приёма (input modules), например imuxsock — приём системных логов через Unix-сокет.
  2. Наборы правил обработки (Rulesets): каждое сообщение передаётся в один или несколько наборов правил. Набор правил содержит упорядоченную последовательность правил.
  3. Механизмы вывода (Actions / Outputs): при совпадении условия правила выполняются связанные с ним действия. Действия определяют, что делать с сообщением: записать в файл, переслать на удаленный сервер, вставить в базу данных или выполнить другую обработку.

Источники данных (Inputs)

Каждый тип входа требует загрузки соответствующего модуля. Входы описываются с использованием объекта input() после загрузки модуля.

Пример:

module(load="imtcp") 
input(type="imtcp" port="514")

Наборы правил обработки (Rulesets)

Ruleset — именованный логический блок (набор правил обработки), который может быть привязан к конкретным источникам приёма сообщений.

Пример:

ruleset(name="fileLogging") {
    if prifilt("*.info") then {
        action(type="omfile" file="/var/log/info.log")
    }
}

Механизмы вывода (Actions / Outputs)

Действия отвечают за вывод сообщений:

  • в файлы;
  • в базы данных;
  • на удалённые системы.

Настройка выполняется через объект action().

Пример:

action(type="omfile" file="/var/log/messages")
Порядок обработки
  • Директивы конфигурации обрабатываются последовательно в порядке их определения (сверху вниз).
  • После выполнения команды stop последующие инструкции для данного сообщения не выполняются.
Конфигурационный файл

По умолчанию rsyslog загружает конфигурацию из файла /etc/rsyslog.conf. Дополнительные фрагменты конфигурации могут подключаться, как правило, из каталога /etc/rsyslog.d/.

Для указания альтернативного конфигурационного файла используется команда:

rsyslogd -f /path/to/your-config.conf

Форматы конфигурации

Используются следующие форматы конфигурации:

  • Basic (Sysklogd) - традиционный декларативный синтаксис, формат для простых конфигураций на одной строке. Используется для фильтрации по facility/severity и записи событий в лог-файлы. Подходит для базовых и небольших настроек, где не требуется сложная логика обработки.
  • Advanced (RainerScript) - современный, скриптовый синтаксис, ориентированный на гибкую обработку сообщений: модульная загрузка, определение шаблонов, условные выражения и расширенные фильтры по свойствам сообщений. Позволяет строить детализированную маршрутизацию и программную логику в конфигурации.
  • Obsolete legacy (Legacy) - устаревший, предназначен для небольших дополнений к basic-формату. Не рекомендуется к использованию при написании новых конфигураций из-за ограничений и потенциальных конфликтов с современными форматами

Одновременное использование синтаксиса разных форматов может приводить к конфликтам и непредсказуемому поведению!

  • Определение модуля в Advanced формате совместно с определением параметров модуля в Obsolete legacy формате создаст конфликт (например, $ModLoad imuxsock и module(load="imuxsock")),
  • Basic и Obsolete legacy правила обрабатываются до Advanced, что может приводить к игнорированию условных фильтров или непредсказуемой маршрутизации событий)

Получение событий

Сбор событий операционной системы и аудита выполняется с использованием следующих модулей:

  • imkmsg - современный интерфейс сбора событий ядра операционной системы, читает из недеструктивного интерфейса /dev/kmsg (несколько потребителей могут читать одни и те же сообщения) и сохраняет события ядра в структурированном формате (недоступен на некоторых дистрибутивах);
  • imklog - базовый интерфейс сбора событий ядра операционной системы
  • imfile - преобразует строки из локальных текстовых лог-файлов (например, /var/log/audit.log) в сообщения rsyslog, используется для сбора локальных логов, которые не идут через вызов syslog()
  • imuxsock - слушает локальный UNIX-сокет (обычно /dev/log) и принимает сообщения от локальных приложений через syslog(), основной источник «классических» локальных syslog-событий
  • imjournal - импортирует в структурированном формате записи systemd-journal в rsyslog, медленнее, чем imuxsock и при совместном их использовании создаются дубликаты событий.

Одновременное использование imuxsock и imjournal недопустимо, так как приведет к дублированию событий. Выбор между этими модулями определяется требованиями и ограничениями к нагрузке, памяти, производительности на источнике событий. По умолчанию модуль imuxsock требует меньшего объема затрачиваемых ресурсов.
Для RHEL систем (РЕД ОС в частности), для корректной совместной работы rsyslog с включенным модулем imuxsock и systemd-journald требуется дополнительная настройка.

Отправка событий

Экспорт событий ОС и аудита в агент сбора лог-коллектора выполняется с помощью модуля omfwd, который пересылает логи по сети с использованием классических протоколов syslog (UDP, TCP, TLS).

Для этого в разделе Outputs(action) конфигурационного файла /etc/rsyslog.conf или /etc/rsyslog.d/00-radar.conf добавить следующее:

При использовании Basic формата:

*.* @@<ip адресс logcollector>:<порт>

где:

  • <ip-адрес агента сбора лог-коллектора> - IP-адрес агента сбора лог-коллектора;
  • port - порт, по которому агент сбора лог-коллектора будет принимать события. Должен совпадать со значением, указанным в настройках соответствующего профиля сбора;
  • @@ - указывается в случае, если используется протокол TCP;
  • @ - указывается в случае, если используется протокол UDP.

При использовании Advanced формата:

# Forward all messages to a remote server using TCP.
# The linked-list queue prevents blocking if the server is temporarily unreachable.
action(
    type="omfwd"              # Output module for forwarding messages
    protocol="tcp"            # Use TCP (reliable transport)
    target="<ip адресс logcollector>" # Destination server (replace with your host)
    port="<порт>"                # TCP port on the remote syslog server
    queue.type="linkedList"   # Best practice for network forwarding
)

# Forward all messages to a remote server using UDP.
action(
    type="omfwd"
    protocol="udp"            # UDP (unreliable, but lower overhead)
    target="logs.example.com"
    port="514"
)

В Advanced формате, по умолчанию отправляются все события (от всех facility/priority)

Если необходима фильтрация, для каждого целевого условия составляется подобная конструкция:

if prifilt("mail.info") then {
     action(type="omfwd"
            protocol="tcp"
            target="<ip адресс logcollector>"
            port="<порт>"
            queue.type="linkedList")
}

Приложение 2. Пример файла конфигурации службы rsyslog

#### MODULES ####
module(load="imuxsock"
       SysSock.Use="on"
       SysSock.Ratelimit.Burst="20000"
       SysSock.Ratelimit.Interval="15")
module(load="imklog")
#module(load="immark")
#module(load="imjournal"
#       UsePid="system"
#       FileCreateMode="0644"
#       StateFile="imjournal.state"
#       Ratelimit.Interval="15"
#       Ratelimit.Burst="20000")
#module(load="imuxsock" SysSock.Use="off")

#### 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")

Приложение 3. Настройка взаимодействия 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
    

Приложение 4. Пример файла конфигурации службы 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"

Приложение 5. Пример файла конфигурации службы auditd

Для ОС на базе DEB (Debian / Ubuntu):

local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log
log_group = adm
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NUMERIC
##name = mydomain
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no

Для ОС на базе RPM (Red Hat / CentOS):

local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log
log_group = adm
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 6
name_format = NUMERIC
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
transport = TCP
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no
q_depth = 8192
overflow_action = SYSLOG
max_restarts = 10
plugin_dir = /etc/audit/plugins.d
end_of_event_timeout = 2

Приложение 6. Описание параметров файла 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 RAW
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 Поведение службы при потерях между службой и диспетчером. Допустимые значения
- lossy - блокировать связь;
- lossless - не блокировать связь
lossy параметр не указывается
dispatcher Это программа, которая запускается службой при запуске. Она будет передавать копии всех событий аудита на стандартный ввод этого приложения. Убедитесь, что вы доверяете приложению, которое вы добавляете в эту строку, поскольку оно запускается с правами root /sbin/audispd параметр не указывается
name_format Формат наименования узлов (node) компьютеров, которые добавляются в поток событий аудита. Допустимые значения:
- none - в событие аудита не указывается имя компьютера;
- hostname - указывается имя, возвращаемое запросом gethostname
- fqd - полное доменное имя компьютера
- numeric - тоже что и fqd, но при этом определяется IP-адрес компьютера
- user - наименование учетной записи пользователя компьютера
NUMERIC HOSTNAME
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 Параметр определяет, насколько большой должна быть внутренняя очередь событий аудита параметр не указывается 1200
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

Приложение 7. Пример правил аудита

-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=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