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

Компоненты модуля «Удаленный доступ» осуществляют запись событий в два приемника:

  • журнал аудита — события, важные с точки зрения безопасности, например, аутентификация и авторизация пользователей, доступ к защищенным ресурсам (см. документ «Руководство по эксплуатации» раздел «Аудит»);

  • технический журнал — события, содержащие отладочную информацию полезную при анализе работы программы (см. документ «Руководство по эксплуатации» раздел «Журналирование»).

Для сбора и передачи системных журналов используется служба syslog-ng (System Logging Daemon — Next Generation).

Файлы логов аудита и журналирования создаются автоматически при установке модуля и хранятся на устройствах, на которых они были сгенерированы, в каталогах:

Компонент Аудит Журналирование

Служба доступа по VNC

/var/log/inno-osmax/audit/tigervnc.log

/var/log/inno-osmax/tigervnc.log

WEB-клиент шлюза удаленного доступа

/var/log/inno-osmax/audit/guacamole_client.log

/var/log/inno-osmax/guacamole_client.log

Сервер шлюза удаленного доступа

/var/log/inno-osmax/audit/guacamole_server.log

/var/log/inno-osmax/guacamole_server.log

Служба доступа по SSH

/var/log/inno-osmax/audit/openssh.log

/var/log/inno-osmax/openssh.log

Служба доступа по RDP

/var/log/inno-osmax/audit/xrdp.log

/var/log/inno-osmax/xrdp.log

Настройка фильтрации syslog_ng

Конфигурационные файлы модуля «Удаленный доступ» расположены в каталоге /usr/share/syslog-ng/include/scl/, который включает файл, содержащий общие настройки, и файлы компонентов модуля:

  • irc.conf — общие настройки, содержащий инструкцию (template) с описанием формата сообщения;

    Пример файла:

    template t_irc{
        template("<${PRI}> ${ISODATE} ${HOST} ${PROGRAM} ${PID} ${MESSAGE}\n");
    };
  • irc_guacamole_client.conf — конфигурационный файл WEB-клиента шлюза удаленного доступа;

    Пример файла
    source s_irc_net {
     tcp(ip(127.0.0.1) port(514) keep-hostname(yes));
    };
    
    rewrite r_rewrite_pid{set("-", value("PID"));};
    
    destination d_guacamole_clientlog
    {
      file(
            "/var/log/inno-osmax/guacamole_client.log"
            template(t_irc)
            frac-digits(3)
            owner("osmax")
            group("osmax")
            perm(0640)
          );
    };
    
    filter f_guacamole_clientlog
    {
      not facility(local7);
    };
    
    log
    {
      source(s_irc_net);
      filter(f_guacamole_clientlog);
      rewrite(r_rewrite_pid);
      destination(d_guacamole_clientlog);
      flags(final);
    };
    
    destination d_guacamole_clientaudit
    {
      file(
            "/var/log/inno-osmax/audit/guacamole_client.log"
            template(t_irc)
            frac-digits(3)
            owner("osmax")
            group("osmax")
            perm(0640)
          );
    };
    
    filter f_guacamole_clientaudit
    {
      program(guacamole_client) and facility(local7) and message("IRC:");
    };
    
    log
    {
      source(s_irc_net);
      filter(f_guacamole_clientaudit);
      rewrite(r_rewrite_pid);
      destination(d_guacamole_clientaudit);
      flags(final);
    };
  • irc_guacamole_server.conf — конфигурационный файл сервера шлюза удаленного доступа;

    Пример файла (Astra Linux)
    estination d_guaclog
    {
        file(
                "/var/log/inno-osmax/guacamole_server.log"
                template(t_irc)
                frac-digits(3)
                owner("osmax")
                group("osmax")
                perm(0640)
            );
    };
    
    filter f_guaclog
    {
            program(guacd) and message("IRC:") and not facility(local7);
    };
    
    log
    {
            source(s_src);
            filter(f_guaclog);
            destination(d_guaclog);
            flags(final);
    };
    
    destination d_guacaudit
    {
            file(
                    "/var/log/inno-osmax/audit/guacamole_server.log"
                    template(t_irc)
                    frac-digits(3)
                    owner("osmax")
                    group("osmax")
                    perm(0640)
                );
    };
    
    filter f_guacaudit
    {
            program(guacd) and message("IRC:") and facility(local7);
    };
    
    log
    {
            source(s_src);
            filter(f_guacaudit);
            destination(d_guacaudit);
            flags(final);
    };
    Пример файла (РЕД ОС)
    destination d_guaclog
    {
        file(
                "/var/log/inno-osmax/guacamole_server.log"
                template(t_irc)
                frac-digits(3)
                owner("osmax")
                group("osmax")
                perm(0640)
            );
    };
    
    filter f_guaclog
    {
            program(guacd) and message("IRC:") and not facility(local7);
    };
    
    log
    {
            source(s_sys);
            filter(f_guaclog);
            destination(d_guaclog);
            flags(final);
    };
    
    destination d_guacaudit
    {
            file(
                    "/var/log/inno-osmax/audit/guacamole_server.log"
                    template(t_irc)
                    frac-digits(3)
                    owner("osmax")
                    group("osmax")
                    perm(0640)
                );
    };
    
    filter f_guacaudit
    {
            program(guacd) and message("IRC:") and facility(local7);
    };
    
    log
    {
            source(s_sys);
            filter(f_guacaudit);
            destination(d_guacaudit);
            flags(final);
    };
  • irc_tigervnc.conf — конфигурационный файл службы доступа по VNC;

    Пример файла (Astra Linux)
    destination d_tigervnclog
    {
        file(
                "/var/log/inno-osmax/tigervnc.log"
                template(t_irc)
                frac-digits(3)
                perm(0640)
            );
    };
    
    filter f_tigervnclog
    {
        program(x0vncserver) and message("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_tigervnclog);
        destination(d_tigervnclog);
        flags(final);
    };
    
    destination d_tigervncaudit
    {
        file(
                "/var/log/inno-osmax/audit/tigervnc.log"
                template(t_irc)
                frac-digits(3)
                perm(0640)
            );
    };
    
    filter f_tigervncaudit
    {
        program(x0vncserver) and message("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_tigervncaudit);
        destination(d_tigervncaudit);
        flags(final);
    };
    Пример файла (РЕД ОС)
    destination d_tigervnclog
    {
        file(
                "/var/log/inno-osmax/tigervnc.log"
                template(t_irc)
                frac-digits(3)
                perm(0640)
            );
    };
    
    filter f_tigervnclog
    {
        program(x0vncserver) and message("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_tigervnclog);
        destination(d_tigervnclog);
        flags(final);
    };
    
    destination d_tigervncaudit
    {
        file(
                "/var/log/inno-osmax/audit/tigervnc.log"
                template(t_irc)
                frac-digits(3)
                perm(0640)
            );
    };
    
    filter f_tigervncaudit
    {
        program(x0vncserver) and message("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_tigervncaudit);
        destination(d_tigervncaudit);
        flags(final);
    };
  • irc_openssh.conf — конфигурационный файл службы доступа по SSH;

    Пример файла (Astra Linux)
    destination d_opensshlog
    {
        file("/var/log/inno-osmax/openssh.log"
        template(t_irc)
        frac-digits(3));
    };
    
    filter f_opensshlog
    {
        program(openssh) and match("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_opensshlog);
        destination(d_opensshlog);
        flags(final);
    };
    
    destination d_opensshaudit
    {
        file("/var/log/inno-osmax/audit/openssh.log"
        template(t_irc)
        frac-digits(3));
    };
    
    filter f_opensshaudit
    {
        program(openssh) and match("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_opensshaudit);
        destination(d_opensshaudit);
        flags(final);
    };
    Пример файла (РЕД ОС)
    destination d_opensshlog
    {
        file("/var/log/inno-osmax/openssh.log"
        template(t_irc)
        frac-digits(3));
    };
    
    filter f_opensshlog
    {
        program(openssh) and match("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_opensshlog);
        destination(d_opensshlog);
        flags(final);
    };
    
    destination d_opensshaudit
    {
        file("/var/log/inno-osmax/audit/openssh.log"
        template(t_irc)
        frac-digits(3));
    };
    
    filter f_opensshaudit
    {
        program(openssh) and match("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_opensshaudit);
        destination(d_opensshaudit);
        flags(final);
    };
  • irc_xrdp.conf — конфигурационный файл службы доступа по RDP.

    Пример файла (Astra Linux)
    destination d_xrdplog
    {
        file(
            "/var/log/inno-osmax/xrdp.log"
            template(t_irc)
            frac-digits(3)
        );
    };
    
    filter f_xrdplog
    {
        program(xrdp) and match("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_xrdplog);
        destination(d_xrdplog);
        flags(final);
    };
    
    destination d_xrdpaudit
    {
        file(
            "/var/log/inno-osmax/audit/xrdp.log"
            template(t_irc)
            frac-digits(3));
        };
    
    filter f_xrdpaudit {
        program(xrdp) and match("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_src);
        filter(f_xrdpaudit);
        destination(d_xrdpaudit);
        flags(final);
    };
    Пример файла (РЕД ОС)
    destination d_xrdplog
    {
        file(
            "/var/log/inno-osmax/xrdp.log"
            template(t_irc)
            frac-digits(3)
        );
    };
    
    filter f_xrdplog
    {
        program(xrdp) and not (program(xrdp-sesman)) and match("IRC:") and not facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_xrdplog);
        destination(d_xrdplog);
        flags(final);
    };
    
    destination d_xrdpaudit
    {
        file(
            "/var/log/inno-osmax/audit/xrdp.log"
            template(t_irc)
            frac-digits(3));
        };
    
    filter f_xrdpaudit {
        program(xrdp) and not (program(xrdp-sesman)) and match("IRC:") and facility(local7);
    };
    
    log
    {
        source(s_sys);
        filter(f_xrdpaudit);
        destination(d_xrdpaudit);
        flags(final);
    };

Настройка фильтрации rsyslog

Конфигурационные файлы модуля «Удаленный доступ» расположены в каталоге /etc/rsyslog.d/, который включает файл, содержащий общие настройки, и файлы компонентов модуля:

  • 10_irc.conf — общие настройки; файл содержащий инструкцию (template) с описанием формата сообщения;

    Пример файла
    template(name="t_irc" type="list") {
        constant(value="<")
        property(name="pri")
        constant(value=">")
        constant(value=" ")
        property(name="timestamp" dateFormat="rfc3339")
        constant(value=" ")
        property(name="hostname")
        constant(value=" ")
        property(name="programname")
        constant(value=" ")
        property(name="procid")
        property(name="msg" spifno1stsp="on" )
        property(name="msg" droplastlf="on" )
        constant(value="\n")
        }
  • 11_guacamole_client.conf — конфигурационный файл WEB-клиента шлюза удаленного доступа;

    Пример файла
    module(load="imtcp")
    
    ruleset(name="guacamole_client"){
        if ($syslogfacility-text != "local7") then
        {
            action(type="omfile" File="/var/log/inno-osmax/guacamole_client.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="osmax" dirGroup="osmax" fileCreateMode="0640" fileOwner="osmax" fileGroup="osmax")
        } else {
            action(type="omfile" File="/var/log/inno-osmax/audit/guacamole_client.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="osmax" dirGroup="osmax" fileCreateMode="0640" fileOwner="osmax" fileGroup="osmax")
          }
        stop
    }
    
    input(type="imtcp" port="514" address="127.0.0.1" ruleset="guacamole_client")
  • 11_guacamole_server.conf — конфигурационный файл сервера шлюза удаленного доступа;

    Пример файла
    if ($programname == 'guacd') and ($msg contains "IRC:") then {
        if ($syslogfacility-text != "local7") then
        {
            action(type="omfile" File="/var/log/inno-osmax/guacamole_server.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="osmax" dirGroup="osmax" fileCreateMode="0640" fileOwner="osmax" fileGroup="osmax")
        } else {
            action(type="omfile" File="/var/log/inno-osmax/audit/guacamole_server.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="osmax" dirGroup="osmax" fileCreateMode="0640" fileOwner="osmax" fileGroup="osmax")
          }
        stop
    }
  • 11_tigervnc.conf — конфигурационный файл службы доступа по VNC;

    Пример файла
    if $programname == "x0vncserver" and $msg contains "IRC:" then {
    if ($syslogfacility-text != "local7") then
    {
    action(type="omfile" File="/var/log/inno-osmax/tigervnc.log" template="t_irc"
    createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
    } else {
    action(type="omfile" File="/var/log/inno-osmax/audit/tigervnc.log" template="t_irc"
    createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
    }
    stop
    }
  • 11_openssh.conf — конфигурационный файл службы доступа по OpenSSH;

    Пример файла
    if $programname == "sshd" and $msg contains "IRC:" then {
        if ($syslogfacility-text != "local7") then
        {
            action(type="omfile" File="/var/log/inno-osmax/openssh.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
        } else {
            action(type="omfile" File="/var/log/inno-osmax/audit/openssh.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
          }
        stop
    }
  • 11_xrdp.conf — конфигурационный файл службы доступа по xRDP.

    Пример файла
    if $programname contains "xrdp" and $msg contains "IRC:" then {
        if ($syslogfacility-text != "local7") then
        {
            action(type="omfile" File="/var/log/inno-osmax/xrdp.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
        } else {
            action(type="omfile" File="/var/log/inno-osmax/audit/xrdp.log" template="t_irc"
                createDirs="on" dirCreateMode="0755" dirOwner="root" dirGroup="adm" fileCreateMode="0640" fileOwner="root" fileGroup="adm")
          }
        stop
    }
Так как логика обработки конфигурационных файлов rsyslog критична к их алфавитной последовательности, имена файлов содержат цифровой префикс в соответствии с общепринятой практикой.

Каждый конфигурационный файл включает одну инструкцию, состоящую из следующих логических частей:

  • фильтр if для отбора сообщений;

  • инструкция fileOwner для смены владельца конечного файла, отличного от root;

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

  • инструкция fileOwner для возврата владельца конечного файла;

  • инструкция stop для остановки передачи сообщения на обработку, чтобы оно не попало в конечный журнал /var/log/syslog.

Настройка ротации и архивирования

Для настройки ротации и архивирования используется служба logrotate, которая обеспечивает автоматическую ротацию, сжатие, удаление и отправку лог-файлов по почте. Обычно служба logrotate запускается как ежедневное задание Cron в формате Quartz. В зависимости от настроек каждый лог-файл может обрабатываться ежедневно, еженедельно, ежемесячно или при достижении определенного размера.

Настройки задаются в конфигурационных файлах, которые создаются автоматически при установке модуля в каталоге /etc/logrotate.d/ и включают параметры:

  • /app/inno-osmax/logs/<компонент>/<имя лог-файла> — путь до лог-файла;

  • rotate 36 — лог-файл проходит 36 регулярных ротаций перед удалением;

  • maxsize=10M — максимальный размера файла: 10MB;

  • copytruncate — удаление записей из оперативного файла выполняется после создания копии лог-файла;

  • compress — выполнение сжатия лог-файла после ротации;

  • monthly — период ротации лог-файла (один раз в месяц);

  • missingok — если лог-файл отсутствует, выполняется переход к следующему файлу без вывода сообщения об ошибке;

  • notifempty — если лог-файл пустой, ротация не выполняется.

Примеры:

  • конфигурационные файлы шлюза удаленный доступ:

    • /etc/logrotate.d/irc.conf;

      /var/log/inno-osmax/audit/guacamole_server.log
      /var/log/inno-osmax/guacamole_server.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }
    • /etc/logrotate.d/irc_guacamole_client.conf;

      /var/log/inno-osmax/audit/guacamole_client.log
      /var/log/inno-osmax/guacamole_client.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }
  • конфигурационные файлы устройств:

    • /etc/logrotate.d/irc.conf;

      /var/log/inno-osmax/audit/tigervnc.log
      /var/log/inno-osmax/tigervnc.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }
    • /etc/logrotate.d/irc_openssh.conf;

      /var/log/inno-osmax/audit/openssh.log
      /var/log/inno-osmax/openssh.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }
    • /etc/logrotate.d/irc_xrdp.conf;

      /var/log/inno-osmax/audit/xrdp.log
      /var/log/inno-osmax/xrdp.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }
    • /etc/logrotate.d/irc_xrdp_sesman.conf.

      /var/log/inno-osmax/audit/xrdp-sesman.log
      /var/log/inno-osmax/xrdp-sesman.log {
          rotate 36
          maxsize=10M
          copytruncate
          compress
          dateext
          monthly
          missingok
          notifempty
      }