Расшифровка логов 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 | Спец. действия | C, U, T, _ |
| 8 | Направление | o (скачивание), i (загрузка), d (удаление) |
| 9 | Вид доступа | a (аноним), r (авторизован) |
| 10 | Имя пользователя | Строка |
| 11 | Имя сервиса | ftp (обычно) |
| 12 | Метод аутентификации | 0 (стандарт) или 1 (RFC931) |
| 13 | Идентификатор | Число или * |
| 14 | Статус | c (завершён) или i (прерван) |
Итог
Логи xferlog — это мощный инструмент для мониторинга и безопасности FTP-сервера. Несмотря на кажущуюся сложность, они содержат структурированную информацию, которую легко читать, если знать порядок полей.
Ключевые выводы:
-
Каждая запись содержит 14 обязательных полей.
-
Важнейшие поля для анализа: IP-адрес, имя пользователя, направление операции, путь к файлу и статус завершения.
-
Используйте команды
grep,awk,cutдля быстрого поиска нужной информации. -
Регулярно анализируйте логи, чтобы вовремя выявлять подозрительную активность.
Теперь, когда вы умеете расшифровывать xferlog, логи FTP-сервера больше не будут для вас "тёмным лесом". Удачи в администрировании! 🚀