Я пытаюсь использовать инструмент анализа журнала 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?
Как упоминалось в документации 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, внимательно изучите единицы и игнорируйте все, что не применимо, с помощью спецификатора формата % ^ :
формат даты% 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