Шаблон 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 должно соответствовать первой строке "Connection from", запоминать IP, затем ждать строки "Accepted publickey for" и соответствовать IP из первой строки. Затем дождитесь "User child on pid" и запомните PID, затем сопоставьте строки с PID. Затем подождите строки 'internal-sftp' с ранее согласованным IP-адресом и запомните PID сеанса sftp, сопоставьте все строки PTP SFTP. Наконец, "Закрыть сессию:", если пользователь соответствует.
Это по крайней мере выполнимо с rsyslog или syslog-ng?
1 ответ
Насколько я понимаю, у вас есть набор данных журнала, и вы хотите сделать корреляцию событий с этими данными? Во-первых, данные журнала, с которыми вы работаете, являются неструктурированными, т. Е. " Соединение с 17x.xx.xx.xx порта 50512 на 199.xx.xx.xx порт 2222 rdomain" 0 " ". Хотя это имеет смысл для читателя-человека, оно не структурировано и будет проблемой, если вы используете другие инструменты для обработки этих данных.
Примером структурированных данных из этого сообщения будет что-то вроде:
$sourcePort=50512
sourceIP=17x.xx.xx.xx
и так далее.
Я бы посоветовал изучить эти сообщения системного журнала и проанализировать / преобразовать их в структурированные данные, например JSON. Доступны сборщики журналов, которые можно бесплатно скачать для анализа из системного журнала в JSON. Сборщики журналов принимают сообщения журнала из вашего Rsyslog и оттуда, анализируют сообщение из Syslog, преобразуют его в формат JSON (структурированные данные) и отправляют для обработки в какую-либо аналитику или другую панель мониторинга.