Как анализировать файлы журнала vsftpd с помощью goaccess

Я пытаюсь использовать инструмент анализа журнала goaccess для анализа журналов FTP-сервера vsftpd. Я знаю, что будучи анализатором журналов веб-сервера, goaccess - не лучший инструмент для этого. При этом он достаточно гибок с форматом журнала, и мы уже используем его для анализа журнала веб-сервера, поэтому я решил попробовать.

По умолчанию vsftpd имеет очень болтливый журнал:

Mon Mar 23 06:00:00 2020 [pid 11111] CONNECT: Client "1.1.1.1"
Mon Mar 23 06:00:00 2020 [pid 11111] [ftp] OK LOGIN: Client "1.1.1.1", anon password "blablabla"
Mon Mar 23 06:00:00 2020 [pid 11111] [ftp] FAIL DOWNLOAD: Client "1.1.1.1", "/file1", 0.00Kbyte/sec
Mon Mar 23 06:00:00 2020 [pid 11111] [ftp] OK DOWNLOAD: Client "1.1.1.1", "/file2", 17500 bytes, 203.15Kbyte/sec

Как современные серверы - обычно - имеют одну строку журнала для конкретного запроса, моим первым шагом было изменение журнала на формат xferlog , который дает одну строку на передачу.

# /etc/vsftpd.conf
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log

Теперь у меня есть строки журнала. как показано ниже.

Sat Mar 28 06:00:00 2020 1 1.1.1.1 17500 /file1 b _ o a anonymous ftp 0 * c
Sat Mar 28 06:00:00 2020 1 1.1.1.1 0 /file2 b _ o a anonymous@host ftp 0 * i

Поскольку это сервер загрузки, получающий только анонимные и пассивные запросы FTP, я могу предположить, что анонимный и анонимный @ host - это все, что клиент предоставляет для анонимного FTP. .

Как я могу проанализировать этот журнал с помощью goaccess?

0
задан 28 March 2020 в 15:53
1 ответ

Как упоминалось в документации vsftpd, формат xferlog используется совместно различным серверным программным обеспечением. документы proftpd имеют описание формата.

Вкратце поля в каждой строке называются:

current-time transfer-time remote-host file-size filename transfer-type ↩ 
  special-action-flag direction   access-mode username service-name ↩ 
  authentication-method authenticated-user-id completion-status

Итак, ваш пример,

Sat Mar 28 06:00:00 2020 1 1.1.1.1 17500 /file1 b _ o a anonymous ftp 0 * c

соответствует этим полям:

current-time: Sat Mar 28 06:00:00 2020 
transfer-time: 1
remote-host: 1.1.1.1
file-size: 17500
filename: /file1
transfer-type: b (binary)
special-action-flag: _ (no compression)
direction: o (outgoing, this will be always 'o' for a download only server)
access-mode: a (anonymous)
username:  whatever the client provides for anonymous FTP
service-name: ftp
authentication-method: 0 (none)
authenticated-user-id: * (none)
completion-status: c (completed) or i (incomplete)

Теперь мы можем попробуйте сопоставить различные поля журнала с тем, что принимает goaccess, внимательно изучите единицы и игнорируйте все, что не применимо, с помощью спецификатора формата % ^ :

  • Временная метка проблематична, поскольку время чередуется между днем ​​и годом. К счастью, игнорирование года работает нормально в goaccess. У вас могут быть проблемы в новогодние праздники или около них. Мы будем использовать формат даты% a% b% d и формат времени% H:% M:% S .
  • время передачи зарегистрировано в секунд, в то время как goaccess поддерживает только микро- или миллисекундное разрешение, поэтому нам придется игнорировать его.
  • remote-host - это одна из обязательных опций goaccess, она равна % h
  • file-size точно соответствует % b в байтах.
  • filename - это необработанный путь URL (% U ), как полный HTTP-запрос % r бесполезен
  • имя пользователя является случайным мусором, но мы сопоставим с % e для полноты
  • завершения-status было бы неплохо использовать это как статус, но goaccess ожидает кодов состояния HTTP, поэтому игнорируется
  • transfer-type , special-action-flag , direction , режим доступа , имя-службы , метод аутентификации , идентификатор-аутентифицированного пользователя не будут использоваться

Комбинированная конфигурация для анализа xferlog в goaccess будет выглядеть так:

log-format %d %t %^ %^ %h %b %U %^ %^ %^ %^ %e %^ %^ %^ %^
date-format %a %b %d
time-format %H:%M:%S

Сохраните эти строки в файле ( ~ / .goaccessrc ) и передайте его в goaccess с помощью:

goaccess -p ~/.goaccessrc
0
ответ дан 30 March 2020 в 01:27

Теги

Похожие вопросы