Я хотел бы зарегистрировать пользовательский 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 (структурированные данные) и отправляют в какую-то аналитическую или другую панель управления для обработки.