Tcpdump: захват и диагностика сетевого трафика. Инструкция и команды

Утилита tcpdump используется для захвата сетевого трафика в Linux и может пригодиться администраторам для диагностики сетевых подключений.

Однако если использовать команду без каких-либо опций, будет сложно отследить нужную информацию в потоке выводимых данных. К счастью, tcpdump позволяет фильтровать вывод команды, отлавливая только те пакеты, которые нас интересуют. В данной статье мы кратко расскажем о tcpdump и приведем примеры использования утилиты для захвата сетевого трафика в Linux.

Как установить tcpdump

С большой долей вероятности tcpdump уже предустановлен в вашем дистрибутиве. Если это не так, ПО можно установить с помощью менеджера пакетов.

Для установки tcpdump в Ubuntu, Debian и подобных операционных системах:

sudo apt install tcpdump

Установить tcpdump в дистрибутивах семейства RHEL можно командой:

sudo dnf install tcpdump

Установка в Arch Linux и его производных происходит следующим образом:

sudo pacman -S tcpdump

Примеры использования tcpdump

Обратите внимание!
Команда tcpdump требует привилегий администратора, примеры далее будут приведены для пользователя root. Вы также можете использовать sudo для выполнения данных команд.

Самая простая форма команды – ее запуск без дополнительных опций:

tcpdump

Если, как в примере выше, не указан интерфейс для захвата трафика, tcpdump выберет его автоматически.

Вывод содержимого трафика будет происходить до тех пор, пока выполнение команды не будет прервано. Завершить процесс можно комбинацией клавиш Ctrl + C.

Если на машине, на которой проводится диагностика, более одного интерфейса, надежнее указать нужный интерфейс вручную. Узнать доступные интерфейсы можно командой с ключом -D:

tcpdump -D

Пример вывода команды:

1.nic2 [Up, Running, Connected]
2.vlan20 [Up, Running, Connected]
3.vlan30 [Up, Running, Connected]
4.vmbr0 [Up, Running, Connected]
5.any (Pseudo-device that captures on all interfaces) [Up, Running]
6.lo [Up, Running, Loopback]
7.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
8.nflog (Linux netfilter log (NFLOG) interface) [none]
9.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
10.dbus-system (D-Bus system bus) [none]
11.dbus-session (D-Bus session bus) [none]
12.nic1 [none, Disconnected]

Помимо одиночных интерфейсов, также существует псевдоинтерфейс any, позволяющий захватывать трафик со всех интерфейсов одновременно. Для указания интерфейса используется ключ -i, например, для захвата трафика с интерфейса nic2 команда будет выглядеть следующим образом:

tcpdump -i nic2

По умолчанию tcpdump ограничивает объем выводимой информации о захватываемых пакетах. Повысить “вербозность” вывода можно флагами -v, -vv и -vvv:

tcpdump -i nic2 -vv

Если вы не хотите бесконечно захватывать пакеты, вы можете использовать ключ -c для указания количества пакетов. Программа автоматически завершит выполнение после захвата указанного количества пакетов. Например, следующая команда выведет информацию о первых 10 пакетах:

tcpdump -c 10

По умолчанию tcpdump пытается выполнить DNS-запросы для адресов в выводе, однако в некоторых случаях это может быть невозможно или не нужно. В таком случае отключить данное поведение можно ключом -n:

tcpdump -n

Если вы хотите сохранить трафик в файл вместо вывода на экран, можно использовать как обычное перенаправление вывода:

tcpdump > tcpdump_out.txt

Так и запись в файл .pcap. В последнем случае файл нельзя прочитать обычным текстовым редактором:

tcpdump -n -w dump.pcap

Для последующего анализа трафика используйте ключ -r и путь до файла:

tcpdump -r dump.pcap

Как интерпретировать вывод tcpdump для TCP-пакета

Каждый перехваченный пакет в выводе tcpdump записывается в виде новой строки. Пример подобной строки:

20:24:38.696750 IP 45.227.46.47.49833 > 10.0.30.3.443: Flags [S], seq 2195959688, win 64240, options [mss 1300,nop,wscale 8,nop,nop,sackOK], length 0

Разберем эту строку:

  • 20:24:38.696750 – время, в которое был захвачен пакет.
  • IP 45.227.46.47.49833 – IP и порт источника (source) пакета.
  • 10.0.30.3.443 – IP и порт назначения (destination) пакета.
  • Flags [S] – флаги TCP (SYN, ACK, RST и прочие). [S] в данном случае – SYN.
  • seq 2195959688 – порядковый номер.
  • win 64240 – размер окна в байтах.
  • options [mss 1300,nop,wscale 8,nop,nop,sackOK] – дополнительные опции.
  • length 0 – размер данных.

Содержание строки может изменяться в зависимости от установленных флагов. Подробнее о структуре пакетов TCP вы можете прочитать тут.

Фильтрация пакетов в tcpdump

Одна из наиболее удобных функций tcpdump – способность фильтровать интересующий нас трафик, будь то по интерфейсу (как обсуждалось ранее), номеру порта, протоколу или хосту. Без этих фильтров было бы крайне затруднительно найти нужную информацию в огромном количестве информации.

Несмотря на его название, tcpdump позволяет анализировать не только TCP-трафик. К примеру, данная команда позволяет нам увидеть UDP-трафик:

tcpdump -u udp

А в этом примере – ICMP:

tcpdump -u icmp

Помимо названия протокола, можно также использовать его номер – например, для ICMP это 1:

tcpdump -u proto 1

Полный список протоколов и соответствующих им номеров вы можете узнать, например, в этой статье на Wikipedia.

Для фильтрации трафика по определенному IP-адресу можно использовать фильтр host в комбинации с ключом -n. К примеру, чтобы отфильтровать трафик, относящийся к хосту 1.1.1.1:

tcpdump -n host 1.1.1.1

Если же нужно просмотреть трафик для определенной сети, а не просто для одного адреса, вы можете использовать фильтр net. Например, следующая команда покажет трафик, относящийся к сети 10.0.0.0/24:

tcpdump -n net 10.0.0

Фильтры port и portrange дают возможность отсеять пакеты по порту или их диапазону соответственно. К примеру, эта команда покажет трафик, относящийся к порту 443:

tcpdump -n port 443

Для трафика на портах 20–22 команда будет выглядеть так:

tcpdump -n portrange 20-22

tcpdump также позволяет применить фильтр к источнику или конечной цели трафика с помощью src, dst и src and dst. Например, для вывода пакетов, отправленных к адресу 8.8.8.8:

tcpdump -n dst host 8.8.8.8

Комбинирование фильтров

Описанные выше фильтры можно также использовать с логическими выражениями – “и” (and/&&), “или” (or/||) и “не” (not,!). Таким образом можно точечно фильтровать нужный нам трафик.

Например, чтобы вывести информацию о пакетах, отправленных к серверу 9.9.9.9 на udp-порт 53, можно использовать следующую команду:

tcpdump -n dst host 9.9.9.9 and udp port 53

Пример вывода:

sudo tcpdump -n dst host 9.9.9.9 and udp port 53
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wlp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
23:44:49.863675 IP 10.0.10.15.39214 > 9.9.9.9.domain: 25591+ [1au] A? google.com. (51)
^C
1 packet captured
1 packet received by filter
0 packets dropped by kernel

Заключение

Утилиту tcpdump часто используют, когда стандартные инструменты диагностики бессильны и логи молчат – она подходит для фильтрации трафика с различными фильтрами, позволяющими сделать выборку пакетов более интеллектуальной.

“По сути, перехват трафика — это просто чтение пакетов с сетевого интерфейса. Перехватить можно любой пакет и сделать это разными способами. Обычно tcpdump используют специалисты наступательной безопасности — те, кто занимается пентестом, анализом защищенности, поиском уязвимостей. Иногда — системные администраторы для диагностики сети. И, конечно, злоумышленники. Хотя заполучить чужую конфиденциальную информацию с помощью tcpdump практически невозможно, потому что она не отправляется в открытом виде. Практически во всех взаимодействиях в сети используется шифрование. Для расшифровки нужен приватный ключ или сертификат. Все современные протоколы этот приватный ключ напрямую через трафик не отправляют”
Константин Зубченко, независимый эксперт по кибербезопасности, автор Skillfactory

В данной статье мы кратко рассказали о tcpdump и ее основных параметрах. Умение использовать эту утилиту может значительно упростить диагностику сетевых проблем.

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.

0
16