Замовляйте VPS-сервер зі скидкою 15%
Акція завершиться через
00Днів
:
00Годин
:
00Хвилин
:
00Секунд

Робота з TCPDump

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

 

Встановлення TCPDump

Для Ubuntu/Debian:

apt install tcpdump

 

Для Red Hat / CentOS:

sudo yum install tcpdump
 

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

  • -c — завершує збір пакетів після досягнення заданої кількості.
  • -C — дає змогу встановити максимальний розмір файлу дампа, після досягнення якого буде створено новий файл.
  • -e — виводить інформацію про канальний рівень для кожного обробленого пакета.
  • -F — зчитує пакети із заданого файлу, а не з інтерфейсу.
  • -f — відображає доменне ім'я для кожної IP-адреси.
  • -G — створює новий файл дампа через вказаний проміжок часу.
  • -H — накладає обмеження, за якого TCPDump обробляє лише заголовки 802.11s.
  • -i — ім'я інтерфейсу, з якого будуть збиратися пакети. Для використання всіх інтерфейсів сервера вкажіть значення any.
  • -I — вмикає режим моніторингу для зазначеного інтерфейсу (для виявлення всіх пакетів, що проходять).
  • -E — використовується для розшифрування трафіку IPSEC (необхідно вказати ключ для розшифрування).
  • -K — вимикає перевірку контрольних сум пакетів.
  • -L — виводить підтримувані типи протоколів підключення для вказаного інтерфейсу.
  • -n — пропускає перетворення IP-адрес у доменні імена в дампі.
  • -nn — виводить адреси разом із їхніми портами.
  • -q — мінімізує обсяг інформації про пакети у виводі.
  • -tttt — показує для кожного пакета часові позначки у стандартному форматі.
  • -v, -vv, -vvv — дедалі більш докладний вивід інформації про пакети.
  • -Z — користувач системи, від імені якого буде створюватися файл дампа.
  • -w — ім'я файлу, до якого буде збережено дамп (за замовчуванням без цього аргументу дамп виводиться в режимі реального часу без запису до файлу).

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

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

tcpdump -D
 
 

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

Для виведення логів нашого мережевого інтерфейсу в режимі реального часу використовуємо команду:

tcpdump -i ens3
 

Не забувайте, що для TCPDump потрібні права суперкористувача, тому ці команди слід виконувати від імені root або з використанням sudo.

Після виконання команди ви побачите багато рядків, що швидко біжать; для зупинки дампа використовуйте комбінацію клавіш 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
 

Зверніть увагу на зазначений діапазон портів.
Завдяки аргументу -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.