Зачем нужен централизованный сбор логов аудита и что мы построим
Разрозненные логи аудита на десятках серверов превращают расследование инцидента в поиск иголки в стоге сена. Без единой точки сбора вы тратите часы на ручной сбор данных, рискуете пропустить критичное событие и не можете оперативно реагировать на угрозы.
Централизованная система решает три ключевые задачи:
- Единая точка мониторинга – все события безопасности видны в одном месте.
- Оперативное расследование инцидентов – вы отслеживаете атаку по всей инфраструктуре за минуты.
- Соответствие требованиям стандартов – PCI DSS, ISO 27001 и других регуляторов требуют защищенного хранения и анализа логов аудита.
Архитектура решения, которую мы построим:
- Агенты – серверы с установленными auditd (генерация событий) и rsyslog (отправка).
- Защищенный канал – TLS-шифрование для предотвращения перехвата и подмены логов.
- Сервер-коллектор – центральный rsyslog, принимающий и классифицирующий логи.
- Структурированное хранилище – логи автоматически сортируются по хостам-источникам.
Инструкция проверена на современных системах с systemd (RHEL/CentOS 8/9, Ubuntu 20.04/22.04) и дает готовое решение для немедленного внедрения.
Подготовка инфраструктуры и установка необходимых компонентов
Перед началом убедитесь, что все узлы используют совместимые версии ПО. Несоответствие версий rsyslog может привести к проблемам с передачей.
Требования:
- Поддерживаемые дистрибутивы: RHEL/CentOS 8/9, Ubuntu 20.04/22.04 и их производные.
- Доступ с правами root или через sudo на всех узлах.
- Открытые порты между агентами и коллектором (по умолчанию 514/TCP или 6514/TLS).
- Свободное место на диске коллектора для хранения логов.
Установка и проверка auditd на серверах-агентах
Auditd – демон аудита Linux, который фиксирует события безопасности на уровне ядра.
Установка:
# Для RHEL/CentOS/Fedora
yum install audit audit-libs # или dnf install audit audit-libs
# Для Ubuntu/Debian
apt update && apt install auditd audispd-pluginsПроверка и запуск:
# Проверяем, что служба активна
systemctl status auditd
# Запускаем и добавляем в автозагрузку
systemctl start auditd
systemctl enable auditd
# Генерируем тестовое событие для проверки работы
auditctl -w /etc/shadow -p wa -k shadow_access
# Смотрим запись в логе
tail -f /var/log/audit/audit.logВ логе должна появиться запись о доступе к файлу /etc/shadow.
Установка и базовая настройка rsyslog на всех узлах
Rsyslog – высокопроизводительная система обработки системных логов с поддержкой модулей.
Установка с необходимыми модулями:
# Для RHEL/CentOS/Fedora
yum install rsyslog rsyslog-gnutls rsyslog-relp
# Для Ubuntu/Debian
apt install rsyslog rsyslog-gnutls rsyslog-relpПроверка версии и модулей:
rsyslogd -v
# Проверяем поддержку TLS и RELP
rsyslogd -N 1 | grep -E "(gtls|relp)"Базовая конфигурация для работы в режиме агента:
Файл /etc/rsyslog.conf должен содержать минимальную конфигурацию:
$ModLoad imuxsock # provides support for local system logging
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imtcp # TCP input module (для коллектора)
$ModLoad omrelp # RELP output module (альтернатива TLS)Перезапустите службу после изменений:
systemctl restart rsyslog
systemctl status rsyslogНастройка сервера-коллектора (приемник логов)
Сервер-коллектор аккумулирует логи со всех агентов инфраструктуры. Рекомендуется выделить отдельный сервер с достаточным дисковым пространством.
Конфигурация модуля приема и правил фильтрации
Создайте структуру каталогов для хранения логов:
mkdir -p /var/log/remote/
chown syslog:syslog /var/log/remote/
chmod 750 /var/log/remote/Добавьте в /etc/rsyslog.conf на коллекторе:
# Модуль для приема TCP-соединений
$ModLoad imtcp
$InputTCPServerRun 514
# Шаблон для структурированного хранения
$template RemoteHostAuth,"/var/log/remote/%HOSTNAME%/auth.log"
$template RemoteHostAudit,"/var/log/remote/%HOSTNAME%/audit.log"
$template RemoteHostSyslog,"/var/log/remote/%HOSTNAME%/syslog.log"
# Правила фильтрации
if ($fromhost-ip startswith "192.168.") then {
# Логи аудита
if ($programname == 'auditd' or $msg contains 'type=AVC') then {
action(type="omfile" fileTemplate="RemoteHostAudit")
stop
}
# Логи аутентификации
if ($syslogfacility-text == 'authpriv' or $programname == 'sshd') then {
action(type="omfile" fileTemplate="RemoteHostAuth")
stop
}
# Остальные системные логи
action(type="omfile" fileTemplate="RemoteHostSyslog")
}Эта конфигурация сортирует логи по хостам-источникам и разделяет их по типам событий.
Организация безопасного и удобного хранения
Настройте права доступа для защиты конфиденциальных логов:
# Только root и syslog имеют доступ
chmod 640 /var/log/remote/*/*.log
chown root:syslog /var/log/remote/*/*.logДобавьте конфигурацию logrotate для автоматической ротации логов. Создайте файл /etc/logrotate.d/remote-logs:
/var/log/remote/*/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 root syslog
sharedscripts
postrotate
systemctl reload rsyslog > /dev/null 2>&1 || true
endscript
}Мониторинг дискового пространства критически важен. Настройте оповещения при достижении 80-90% заполнения раздела с логами.
Настройка безопасной пересылки логов с агентов на коллектор (TLS)
Пересылка логов в открытом виде позволяет злоумышленнику перехватить конфиденциальную информацию. TLS шифрует канал и обеспечивает аутентификацию сторон.
Генерация и распространение сертификатов
Создайте инфраструктуру PKI на сервере-коллекторе:
# Создаем директорию для CA
mkdir /etc/rsyslog.d/tls
cd /etc/rsyslog.d/tls
# Генерируем приватный ключ CA
openssl genrsa -out ca.key 4096
# Создаем самоподписанный сертификат CA
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Company/CN=Logging CA"
# Генерируем приватный ключ сервера
openssl genrsa -out server.key 4096
# Создаем запрос на сертификат для сервера
openssl req -new -key server.key -out server.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Company/CN=log-collector.company.local"
# Подписываем сертификат сервера CA
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt
# Генерируем сертификаты для клиентов (агентов)
# Повторите для каждого агента:
openssl genrsa -out client-agent1.key 4096
openssl req -new -key client-agent1.key -out client-agent1.csr \
-subj "/C=RU/ST=Moscow/L=Moscow/O=Company/CN=agent1.company.local"
openssl x509 -req -days 365 -in client-agent1.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out client-agent1.crtРаспространение сертификатов:
- ca.crt – распространите на все агенты
- server.crt и server.key – оставьте на коллекторе
- client-agentX.crt и client-agentX.key – передайте на соответствующий агент
Установите строгие права на приватные ключи:
chmod 600 /etc/rsyslog.d/tls/*.key
chown root:root /etc/rsyslog.d/tls/*.keyКонфигурация rsyslog для работы поверх TLS
На сервере-коллекторе создайте файл /etc/rsyslog.d/tls-server.conf:
# Загружаем модуль для TLS
$ModLoad imtcp
$DefaultNetstreamDriver gtls
# Настройки TLS
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/tls/ca.crt
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/tls/server.crt
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/tls/server.key
# Разрешаем только TLS соединения
$InputTCPServerStreamDriverMode 1 # TLS required
$InputTCPServerStreamDriverAuthMode x509/name
$InputTCPServerRun 6514На агенте создайте файл /etc/rsyslog.d/tls-client.conf:
# Загружаем модуль для отправки
$ModLoad omfwd
# Настройка TLS
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/tls/ca.crt
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/tls/client-agent1.crt
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/tls/client-agent1.key
# Отправка логов аудита на коллектор
if $programname == 'auditd' or $msg contains 'type=AVC' then {
action(
type="omfwd"
Target="log-collector.company.local"
Port="6514"
Protocol="tcp"
StreamDriver="gtls"
StreamDriverMode="1"
StreamDriverAuthMode="x509/name"
streamdriver.CheckExtendedKeyPurpose="on"
queue.filename="forwardingq"
queue.maxdiskspace="1g"
queue.saveonshutdown="on"
queue.type="LinkedList"
action.resumeRetryCount="-1"
)
stop
}Перезапустите rsyslog на всех узлах:
systemctl restart rsyslogПроверьте, что служба запустилась без ошибок:
systemctl status rsyslog
tail -f /var/log/rsyslog/rsyslog.logИнтеграция auditd с rsyslog для отправки событий
Auditd по умолчанию пишет события только в локальный файл. Для отправки в rsyslog используется плагин audispd.
Настройте плагин syslog в файле /etc/audisp/plugins.d/syslog.conf:
active = yes
direction = out
path = builtin_syslog
type = builtin
args = LOG_INFO
format = stringВ файле /etc/audit/auditd.conf убедитесь, что включена запись логов и настроена достаточная глубина очереди:
write_logs = yes
log_format = RAW
log_group = root
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file_action = KEEP_LOGS
num_logs = 5
disp_qos = lossless
disp_priority = 10Для немедленного применения изменений перезапустите auditd:
systemctl restart auditdТеперь события auditd будут передаваться в локальный rsyslog через сокет, а оттуда – на центральный коллектор по защищенному TLS-каналу.
Проверка работоспособности всей системы
После настройки всех компонентов необходимо убедиться, что система работает корректно.
Генерация тестовых событий и отслеживание потока
Выполните на агенте команды для генерации событий аудита:
# 1. Попытка неудачного входа по SSH (с неверным паролем)
ssh localhost -o PasswordAuthentication=yes
# 2. Использование sudo
sudo ls /root
# 3. Доступ к защищенному файлу
cat /etc/shadow 2>/dev/null || true
# 4. Прямая отправка тестового сообщения через logger
logger -p authpriv.warn "Test audit message from $(hostname)"Отслеживайте поток событий на каждом этапе:
# На агенте: проверяем локальный лог auditd
tail -f /var/log/audit/audit.log
# На агенте: проверяем отправку в rsyslog
tail -f /var/log/rsyslog/rsyslog.log | grep -E "(audit|action)"
# На коллекторе: проверяем получение логов
tail -f /var/log/remote/[HOSTNAME]/audit.logЕсли события не появляются на коллекторе в течение 30 секунд, начинайте диагностику.
Диагностика частых проблем
1. Проверка статуса служб:
systemctl status auditd rsyslog2. Проверка открытых портов:
# На коллекторе
ss -tlnp | grep :6514
# На агенте
ss -tlnp | grep rsyslog3. Проверка брандмауэра и SELinux:
# Для firewalld
firewall-cmd --list-all | grep 6514
# Для iptables
iptables -L -n -v | grep 6514
# SELinux контекст для порта
semanage port -l | grep rsyslog4. Проверка сертификатов:
# Проверка срока действия
openssl x509 -in /etc/rsyslog.d/tls/server.crt -noout -dates
# Проверка цепочки доверия
openssl verify -CAfile /etc/rsyslog.d/tls/ca.crt /etc/rsyslog.d/tls/server.crt5. Детальная отладка rsyslog:
Временно включите отладку в /etc/rsyslog.conf:
$DebugLevel 2 # Уровень отладки от 0 до 2
$DebugFile /var/log/rsyslog-debug.logПосле диагностики не забудьте отключить отладку и перезапустить службу.
Расширенная настройка: ключевые правила auditd и управление системой
Базовая система работает. Теперь оптимизируйте её под конкретные требования безопасности.
Ключевые правила auditd для мониторинга:
Создайте файл /etc/audit/rules.d/security-monitoring.rules:
# Мониторинг попыток входа/выхода
-a always,exit -S all -F pid=1000 -F uid=0 -k authentication
# Отслеживание использования sudo
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/sudoers.d/ -p wa -k sudoers_changes
# Изменения в критичных файлах
-w /etc/passwd -p wa -k identity_management
-w /etc/shadow -p wa -k identity_management
-w /etc/group -p wa -k identity_management
-w /etc/gshadow -p wa -k identity_management
# Изменения в конфигурации SSH
-w /etc/ssh/sshd_config -p wa -k ssh_config
# Системные вызовы для подозрительной активности
-a always,exit -S execve -F path=/bin/bash -k shell_activity
-a always,exit -S mount -k filesystem_mount
# Доступ к файлам с конфиденциальными данными
-w /var/log/secure -p ra -k auth_access
-w /var/log/audit/ -p ra -k audit_accessПримените правила:
# Загружаем правила
auditctl -R /etc/audit/rules.d/security-monitoring.rules
# Проверяем активные правила
auditctl -lУправление ротацией логов на коллекторе:
Модифицируйте конфигурацию logrotate для аудита:
/var/log/remote/*/audit.log {
daily
missingok
rotate 90 # Храним 90 дней для соответствия требованиям
compress
delaycompress
dateext
dateformat -%Y%m%d
create 640 root syslog
sharedscripts
postrotate
systemctl reload rsyslog > /dev/null 2>&1 || true
endscript
}Мониторинг объема логов:
Добавьте в crontab регулярную проверку:
# Ежедневная проверка свободного места
0 2 * * * df -h /var/log/remote/ | mail -s "Log storage report" admin@company.local
# Еженедельный отчет по объему логов по хостам
0 3 * * 1 du -sh /var/log/remote/*/ | sort -hr | head -20 > /var/log/storage-report.txtИнтеграция с системами мониторинга:
Настроенная система становится источником данных для SIEM-решений. Вы можете использовать готовые методики аудита безопасности для анализа собранных логов и построения дашбордов.
Для анализа веб-логов в аналогичной централизованной системе обратитесь к руководству по практическому анализу логов Nginx и Apache.
Полученная система обеспечивает защищенный сбор логов аудита для соответствия требованиям стандартов безопасности. Для комплексной защиты инфраструктуры дополните её практическим харденингом Linux-серверов и аудитoм безопасности баз данных.
Для автоматизации рутинных задач администрирования используйте практическое руководство по Linux.