Робота з TCPDump

Ця утиліта є корисним інструментом для перехоплення та збору пакетів, що приходять на сервер та йдуть з нього.

Установка TCPDump

Для Ubuntu/Debian:

apt install tcpdump

Для Red Hat / CentOS:

sudo yum install tcpdump

Аргументи для команди

  • -c — завершує збір пакетів після досягнення встановленої кількості.

  • -C — дозволяє встановити максимальний розмір файлу дампа, після досягнення якого буде створено новий файл.

  • -e — відображає інформацію рівня з'єднання для кожного обробленого пакета.

  • -F — виведення пакетів із зазначеного файлу, а не з інтерфейсу.

  • -f — відображає доменне ім'я для кожної IP-адреси.

  • -G — створює новий файл дампа після вказаного часу.

  • -H — створює обмеження, що тільки заголовки 802.11s будуть оброблятися TCPDump.

  • -i — ім'я інтерфейсу, з якого будуть збиратися пакети. Щоб використовувати всі інтерфейси сервера, вкажіть значення any.

  • -I — увімкнення режиму моніторингу для вказаного інтерфейсу (для виявлення всіх проходячих пакетів).

  • -E — використовується для дешифрування IPSEC трафіку (потрібно вказати ключ для дешифрування).

  • -K — вимикає перевірку контрольних сум пакетів.

  • -L — відображає підтримувані протоколи з'єднання для вказаного інтерфейсу.

  • -n — вивід дампа без перетворення IP-адрес у доменні імена.

  • -nn — вивід адрес разом із їх портами.

  • -q — мінімізація інформації про пакети у виводі.

  • -tttt — відображає часові мітки для кожного пакета у стандартному форматі.

  • -v, -vv, -vvv — більш детальне відображення інформації про пакети.

  • -w — ім'я файлу, у якому буде збережено дамп (за замовчуванням без цього аргументу дамп відображається у реальному часі без запису у файл).

Використання

Щоб не засмічувати наш дамп зайвими пакетами, слід вибрати конкретний інтерфейс, з якого ми хочемо збирати інформацію, а не всі. Ви можете переглянути список усіх інтерфейсів, використовуючи цю команду:

tcpdump -D

На наших віртуальних серверах (VDS) основний мережевий інтерфейс — цеens3

Щоб відобразити журнали нашого мережевого інтерфейсу в режимі реального часу, використовуйте команду:

tcpdump -i ens3

Після використання команди ми побачимо багато рядків, що біжать, для зупинки дампа використовуйте комбінацію клавіш Ctrl + C.

Зібрані пакети даних мають приблизно такий вигляд:

22:31:56.330185 IP fsn.spacecore.network.65383 > fsn.spacecore.network.ssh: Flags [P.], seq 7841:7905, ack 10730080, win 6145, length 64

Але при використанні різних протоколів пакет може мати різні особливості всередині.

Спробуйте побачити більше інформації про пакети, використовуючи аргумент -v:

tcpdump -i ens3 -v

Тепер наші пакети мають більш масивну структуру такого типу:

22:36:42.254306 IP (tos 0x0, ttl 122, id 61139, offset 0, flags [DF], proto TCP (6), length 104) fsn.spacecore.network.65383 > fsn.spacecore.network.ssh: Flags [P.], cksum 0x2699 (correct), seq 321:385, ack 1027616, win 6141, length 64

У цьому випадку ви можете побачити більше інформації про протокол IP-адреси:

P (tos 0x0, ttl 122, id 61139, offset 0, flags [DF], proto TCP (6)

Аргументи для фільтрації

Не менш потужною особливістю є додатковий аргумент, який дозволяє фільтрувати різні типи пакетів за такими параметрами:

  • host — ім'я хоста.

  • ip — IP-адреса.

  • port — порт.

  • proto — протокол.

  • net — адреса мережі або підмережі.

  • src — джерело.

  • dst — одержувач.

Доступні протоколи: tcp, udp, icmp, arp, rarp, decnet тощо. Ці аргументи також можна комбінувати.

Наприклад, ми можемо переглянути всі пакети, які йдуть з нашого сервера до кінцевої адреси:

tcpdump dst 192.168.1.1

Навпаки, всі пакети, що надсилаються на наш сервер із джерела підмережі (ви також можете використовувати конкретну IP-адресу, як у прикладі вище):

tcpdump src net 192.168.1.1/24

Ви можете використовувати аргументи для знаходження пакетів потрібного розміру:

tcpdump less 48 // пакеты меньше 48 бит
tcpdump greater 128 // пакеты больше 128 бит

Припустимо, у вас є кілька серверів Garry's Mod на різних портах, і ви хочете перевірити, чи не піддаються вони зараз атаці DDoS. Для цього підійде команда:

tcpdump -nnv udp src portrange 27015-27025 -w garrysmod.dump

Розширені оператори

Крім того, TCPDump має оператори для створення різних комбінацій аргументів.

  • AND чи && (оператор «І»)

  • OR чи || (оператор «АБО»)

  • EXCEPT чи ! (оператор «ВИКЛЮЧЕННЯ»)

Припустимо, ми хочемо вивести весь трафік запитів MySQL, які надсилає 192.168.1.1 на порт 3306 (до будь-яких адрес):

tcpdump -nnv src 192.168.1.1 and tcp dst port 3306

Завершення

Дякуємо за ознайомлення! Ми детально розглянули TCPDump, який є дуже корисним інструментом, що є невід'ємною частиною роботи мережевих інженерів, а також обов'язково стане в нагоді звичайним користувачам.

Ви можете використовувати програму для читання пакетів на Windows за допомогою WireShark.

Last updated