Расшифровка логов FTP-сервера (xferlog): полное руководство

Логи FTP-сервера — это ценный источник информации для администраторов и владельцев сайтов. Они помогают отслеживать действия пользователей, выявлять подозрительную активность и расследовать инциденты. Однако формат логов xferlog может показаться сложным для неподготовленного глаза. В этой статье мы подробно разберём структуру каждой записи и научимся читать логи как открытую книгу.


Что такое xferlog?

xferlog — это стандартный файл журнала, который ведут многие FTP-серверы (например, ProFTPD, vsftpd). Он содержит детальную информацию о всех операциях: загрузках, скачиваниях, удалениях и других действиях пользователей.

Типичный путь к файлу:

  • /var/log/xferlog

  • /var/log/vsftpd.log

  • /var/log/proftpd/xferlog


Как выглядит запись в xferlog?

Пример строки из реального лога:

text

Sat May 05 10:41:25 2016 0 192.168.42.21 3370 /www/public/dolb/dolbofile.php b _ d r ftplogin ftp 0 * c

На первый взгляд — набор символов и цифр. Но каждое поле имеет строгое значение. Разберём его по порядку.


Полная структура записи xferlog

Поле Описание Наш пример
1 Время Дата и время события в формате DDD MMM dd hh:mm:ss YYYY Sat May 05 10:41:25 2016
2 Длительность Время передачи в секундах 0
3 IP-адрес Адрес клиента, инициировавшего трансфер 192.168.42.21
4 Размер файла Размер файла в байтах 3370
5 Имя файла Полный путь к файлу на сервере /www/public/dolb/dolbofile.php
6 Тип трансфера a — ASCII, b — бинарный (Binary) b
7 Специальные действия C — сжат, U — распакован, T — заархивирован, _ — нет _
8 Направление o — скачивание (outgoing), i — загрузка (incoming), d — удаление d
9 Вид доступа a — анонимный, r — авторизованный (registered) r
10 Имя пользователя Логин, под которым выполнялась операция ftplogin
11 Имя сервиса Обычно ftp ftp
12 Метод аутентификации 0 — обычный пароль, 1 — RFC931 (ident) 0
13 Идентификатор ID пользователя или *, если недоступен *
14 Статус c — завершён (completed), i — прерван (incomplete) c

Подробный разбор каждого поля

1. Время события

text

Sat May 05 10:41:25 2016
  • Формат: день недели, месяц, число, время, год.

  • Часовой пояс: обычно соответствует времени сервера.

2. Длительность трансфера

text

0
  • Время в секундах, затраченное на передачу.

  • Если 0 — файл был передан мгновенно (обычно для маленьких файлов) или операция была мгновенной (например, удаление).

3. IP-адрес клиента

text

192.168.42.21
  • Адрес, с которого был инициирован запрос.

  • Может быть как внутренним (локальные сети), так и внешним.

4. Размер файла

text

3370
  • Размер в байтах.

  • Для перевода в килобайты разделите на 1024.

5. Полное имя файла

text

/www/public/dolb/dolbofile.php
  • Абсолютный путь к файлу на сервере.

  • Позволяет точно идентифицировать, с каким файлом проводилась операция.

6. Тип трансфера

text

b
Значение Расшифровка
a ASCII — для текстовых файлов (HTML, PHP, CSS, JS)
b Binary — для бинарных файлов (изображения, архивы, исполняемые файлы)

Важно: неправильный выбор типа может привести к повреждению файлов. Бинарные файлы всегда передаются в режиме b.

7. Специальные действия

text

_
Значение Расшифровка
C Файл был сжат (compressed)
U Файл был распакован (uncompressed)
T Файл был заархивирован (tarred)
_ Никаких действий не производилось

Примечание: эта опция редко используется в современных серверах.

8. Направление трансфера

text

d
Значение Расшифровка
o Outgoing — файл был скачан с сервера
i Incoming — файл был загружен на сервер
d Delete — файл был удалён

Важно: поле d (удаление) критично для отслеживания несанкционированных действий.

9. Вид доступа

text

r
Значение Расшифровка
a Анонимный доступ (без логина/пароля)
r Авторизованный доступ (с логином и паролем)

10. Имя пользователя

text

ftplogin
  • Логин, под которым выполнялась операция.

  • Для анонимных подключений — обычно ftp или anonymous.

11. Имя сервиса

text

ftp
  • Как правило, всегда ftp.

  • В редких случаях может быть ftps или sftp.

12. Метод аутентификации

text

0
Значение Расшифровка
0 Стандартная аутентификация (логин/пароль)
1 RFC931-аутентификация (ident-протокол)

13. Идентификатор пользователя

text

*
  • ID пользователя в системе (UID).

  • * означает, что идентификатор недоступен.

14. Статус завершения трансфера

text

c
Значение Расшифровка
c Completed — операция успешно завершена
i Incomplete — операция была прервана

Расшифровка нашего примера

Исходная строка:

text

Sat May 05 10:41:25 2016 0 192.168.42.21 3370 /www/public/dolb/dolbofile.php b _ d r ftplogin ftp 0 * c

Человекочитаемый перевод:

В субботу, 5 мая 2016 года, в 10:41:25, пользователь ftplogin с IP-адреса 192.168.42.21 успешно удалил файл /www/public/dolb/dolbofile.php размером 3370 байт. Операция была мгновенной (0 секунд), использовался бинарный режим передачи, доступ был авторизованным, стандартная аутентификация. Файл не сжимался и не архивировался.


Типичные сценарии анализа логов

1. Отслеживание несанкционированных удалений

Команда (Linux):

bash

grep " d " /var/log/xferlog | grep -v "ваш_логин"

Находит все операции удаления, совершённые не вами.

2. Поиск загрузок больших файлов

bash

awk '$4 > 10485760' /var/log/xferlog

Показывает все файлы больше 10 МБ (10485760 байт).

3. Скачивания определённого типа файлов

bash

grep "\.zip" /var/log/xferlog | grep " o "

Находит все скачивания ZIP-архивов.

4. Активность конкретного пользователя

bash

grep "ftplogin" /var/log/xferlog

Показывает все операции пользователя ftplogin.

5. Скачивания конфиденциальных файлов

bash

grep -E "\.(php|config|env|htaccess)" /var/log/xferlog | grep " o "

Ищет скачивания конфигурационных файлов.


Полезные команды для работы с логами

Просмотр последних записей

bash

tail -f /var/log/xferlog

Поиск по IP-адресу

bash

grep "192.168.42.21" /var/log/xferlog

Подсчёт количества операций по пользователям

bash

awk '{print $10}' /var/log/xferlog | sort | uniq -c | sort -nr

Экспорт в CSV для Excel

bash

awk '{print $1" "$2" "$3","$4","$5","$6","$7","$8","$9","$10","$14}' /var/log/xferlog > ftp_log.csv

Расшифровка полей — шпаргалка

Позиция Значение Возможные значения
1 Дата/время DDD MMM dd hh:mm:ss YYYY
2 Длительность (сек) Число
3 IP-адрес IPv4 или IPv6
4 Размер (байты) Число
5 Путь к файлу Строка
6 Тип трансфера a (ASCII) или b (Binary)
7 Спец. действия CUT_
8 Направление o (скачивание), i (загрузка), d (удаление)
9 Вид доступа a (аноним), r (авторизован)
10 Имя пользователя Строка
11 Имя сервиса ftp (обычно)
12 Метод аутентификации 0 (стандарт) или 1 (RFC931)
13 Идентификатор Число или *
14 Статус c (завершён) или i (прерван)

Итог

Логи xferlog — это мощный инструмент для мониторинга и безопасности FTP-сервера. Несмотря на кажущуюся сложность, они содержат структурированную информацию, которую легко читать, если знать порядок полей.

Ключевые выводы:

  1. Каждая запись содержит 14 обязательных полей.

  2. Важнейшие поля для анализа: IP-адрес, имя пользователя, направление операции, путь к файлу и статус завершения.

  3. Используйте команды grepawkcut для быстрого поиска нужной информации.

  4. Регулярно анализируйте логи, чтобы вовремя выявлять подозрительную активность.

Теперь, когда вы умеете расшифровывать xferlog, логи FTP-сервера больше не будут для вас "тёмным лесом". Удачи в администрировании! 🚀