Назад | Перейти на главную страницу

rsyslog / syslog-ng шаблон для регистрации ssh и связанных sftp сессий для пользователя

Я хотел бы зарегистрировать пользовательский ssh ​​и следующий сеанс sftp в файл, в имени которого будет имя пользователя:

У меня есть это:

Jan  8 13:43:38 mx1 sshd[84622]: Connection from 17x.xx.xx.xx port 50512 on 199.xx.xx.xx port 2222 rdomain "0"
Jan  8 13:43:39 mx1 sshd[84622]: Accepted key ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI found at /sites/users/<user>/home/<user>/.ssh/authorized_keys:1
Jan  8 13:43:39 mx1 sshd[84622]: Postponed publickey for <user> from 17x.xx.xx.xx port 50512 ssh2 [preauth]
Jan  8 13:43:39 mx1 sshd[84622]: Accepted key ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI found at /sites/users/<user>/home/<user>/.ssh/authorized_keys:1
Jan  8 13:43:39 mx1 sshd[84622]: Accepted publickey for <user> from 17x.xx.xx.xx port 50512 ssh2: ED25519 SHA256:z6YhMPFiis6PAHg6XaWDj3Yyq4HqRCqv2SjXIP259EI
Jan  8 13:43:39 mx1 sshd[84622]: User child is on pid 12325
Jan  8 13:43:39 mx1 sshd[12325]: Changed root directory to "/sites/users/<user>"
Jan  8 13:43:39 mx1 sshd[12325]: Starting session: forced-command (config) 'internal-sftp -u 0002 -l INFO' for <user> from 17x.xx.xx.xx port 50512 id 0
Jan  8 13:43:39 mx1 internal-sftp[9660]: session opened for local user <user> from [17x.xx.xx.xx]
Jan  8 13:43:42 mx1 internal-sftp[9660]: session closed for local user <user> from [17x.xx.xx.xx]
Jan  8 13:43:42 mx1 sshd[12325]: Close session: user <user> from 17x.xx.xx.xx port 50512 id 0

Таким образом, регистрация IMO должна соответствовать первой строке «Подключение от», запоминать IP, затем ждать строки «Принятый публичный ключ для» и соответствовать IP из первой строки. Затем подождите, пока «Дочерний пользователь находится на pid», запомните PID, затем сопоставьте строки с PID. Затем дождитесь строк 'internal-sftp' с ранее сопоставленным IP и запомните PID сеанса sftp, сопоставьте все строки PID SFTP. Наконец, «Закройте сеанс:», если пользователь найден.

По крайней мере, это можно сделать с помощью rsyslog или syslog-ng?

Насколько я понимаю, у вас есть набор данных журнала, и вы хотите выполнить корреляцию событий на этих данных? Во-первых, данные журнала, с которыми вы работаете, неструктурированы, т.е.Подключение с порта 50512 17x.xx.xx.xx на порт 2222 199.xx.xx.xx rdomain "0"". Хотя это имеет смысл для человека-читателя, он не структурирован и может вызвать затруднения при использовании других инструментов для обработки этих данных.

Пример структурированных данных из этого сообщения будет примерно таким:

$sourcePort=50512
sourceIP=17x.xx.xx.xx

и так далее.

Я бы посоветовал изучить эти сообщения системного журнала и проанализировать / преобразовать их в структурированные данные, то есть в JSON. Доступны сборщики журналов, которые вы можете бесплатно скачать для синтаксического анализа из системного журнала в JSON. Сборщики журналов принимают сообщения журнала из вашего Rsyslog и оттуда анализируют сообщение из Syslog, конвертируют в формат JSON (структурированные данные) и отправляют в какую-то аналитическую или другую панель управления для обработки.