Аудит сетевого трафика с помощью tcpdump

Утилита tcpdump является весьма мощным инструментом, предназначенным для перехвата и анализа различных сетевых пакетов. Такая команда весьма популярна среди пользователей операционной системы «Линукс».

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

Стоит отметить, что для анализа сетевого потока нередко применяется программа Wirshark. Она представлена в виде графической утилиты, но не дает возможности работать с использованием терминалов.

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

Установка tcpdump

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

Чаще всего для установки используются репозитории Ubuntu/Debian или Fedora/Red Hat/CentOS. Для осуществления поставленной задачи потребуется ввести в команд.

Для Debian.

Обновляем репозиторий.

# apt-get update

# apt-get install tcpdump

Для CentOs 7:

# yum update

# yum install tcpdump

Centos 8:

# dnf update

# dnf install tcpdump

Синтаксис

Эта команда имеет весьма простой и понятный синтаксис, отличается наличием большого количества вспомогательных опций. Перед изучением примеров эксплуатации команды требуется тщательно рассмотреть возможности.

Синтаксис:

tcpdump [опции] [требуемый интерфейс] [фильтр/фильтры]

При запуске утилиты tcpdump необходимо в обязательном порядке определиться с интерфейсом. Именно с его помощью будет осуществляться отслеживание сетевых пакетов. Если пользователь не укажет требуемый интерфейс, «по умолчанию» будет использован именно тот, который располагается первым в списке.

Опции дают возможность настроить способ отображения, а также откорректировать возможности самой команды. После указания типа используемого фильтра отсеиваются те пакеты, которые не нужны для исследования.

Основной перечень опций, поддерживаемых утилитой:

  • «-A» – для выведения всех пакетов (формат ASCII).
  • «-c» – для закрытия утилиты после перехвата определенного количества сетевых пакетов.
  • «-C» - для записи обнаруженных сетевых пакетов в единый файл, проверки его размера. Если он будет больше заданных пользователем параметров, появляется возможность создания нового файла.
  • «-D» - для выведения списка всех сетевых интерфейсов, которые доступны для пользователя.
  • «-e» - для выведения информации об уровне соединения для каждого отдельного пакета. Такая опция может оказаться полезной в том случае, когда пользователю нужно увидеть MAC-адрес.
  • «-f» - для выведения доменного имени для каждого отдельного IP-адреса.
  • «-F» - для прочтения и тщательного изучения пакетов именно из файла, а не из интерфейса.
  • «-G» - для создания нового файла спустя определенный временной промежуток.
  • «-H» - для обнаружения и изучения заголовков «802.11s».
  • «-i» - для указания имени интерфейса при последующей перехватке пакетов. У пользователя появляется возможность захватить пакет с различных интерфейсов после прописывания any.
  • «-I» - для переключения интерфейса в режим монитора. В последующем будут перехвачены все проходящие пакеты.
  • «-j» - для установки формата Timestamp, который предназначен для последующего сохранения пакетов.
  • «-J» - для просмотра Timestamp, которые доступны на данный момент времени.
  • «-K» - для исключения вероятности проверки контрольных сумм пакетов.
  • «-l» - для добавления поддержки прокрутки, используемой совместно с выводом.
  • «-L» - для выведения поддерживаемых протоколов, предназначенных для подключения интерфейса.
  • «-n» - для исключения вероятности отображения доменных имен.
  • «-r» - для прочтения специализированных пакетов из фалов, которые созданы с использованием «-w».
  • «-v», «-vv», « -vvv» - для более подробного вывода требуемой информации.
  • «-q» - для выведения минимального количества данных.
  • «-w» - для записи вывода в определенный файл.
  • «-Z» - для просмотра пользователя, от имени которого в последующем создаются файлы.

При указании требуемой команды требуется обязательно прописывать фильтры, которые позволят увидеть только те пакеты, необходимые пользователю. Фильтровать получаемую информацию можно различными способами – по протоколу, пот типу сети, по интерфейсу, по IP-адресу и многому другому.

После указания определённых опций, рассмотрим фильтры. Пользователю доступно несколько параметров, позволяющих отсеивать ненужную информацию:

  • «host» - по названию хоста.
  • «ip» - по IP-адресу.
  • «proto» - по протоколу.
  • «net» - по адресу определенной сети или подсети.
  • «port» – по адресу требуемого порта.
  • «src» - по показателям, которые касаются только отправителя.
  • «dst» - по показателям, которые касаются только получателя.

Допускается комбинирование фильтров между собой. Это позволит получить именно тот результат, который ждет пользователь.

Вышеописанный список – это далеко не весь функционал, который поддерживает утилита tcpdump. Этого перечня будет вполне достаточно для решения большинства самых популярных задач.

Примеры

Перед использованием утилиты необходимо в обязательном порядке проверить, какие именно интерфейсы доступны для вас. Для этой цели можно воспользоваться аргументом «-D».

tcpdump -D

Сетевые интерфейсыИзучение примеров использования tcpdump стоит начать с возможности захвата трафика (к примеру, при наличии интерфейса eth0). У большинства пользователей такой интерфейс является основным. Именно он подключен к интернет-сети. Чтобы воспользоваться программой, потребуется иметь права «супер пользователя», поэтому нужно залогиниться от root (su-) или использовать sudo.

# tcpdump -i eth0

Смотрим трафик eth0Для остановки команды можно воспользоваться быстрым набором, достаточно нажать 2 клавиши Ctrl+C. В вашем выводе будут показаны все перехваченные с помощью утилиты пакеты. Стоит отметить, что допускается контроль подробности вывода информации. Для этого используется аргумент «-v».

# tcpdump -v -i eth0

Чтобы посмотреть, что происходит можно взглянуть на все интерфейсы "any".

# tcpdump -i any

any

У вас имеется возможность изучить данные о времени существования ttl-пакетов, версию применяемого протокола ТСР, а также длину поля, где присутствует заголовок. Если воспользоваться опцией «-vv», можно вывести данные о проверке контрольной суммы определенного пакета и его содержимое.

Стоит рассмотреть несколько примеров использования фильтров:

  • Фильтруем входящий трафик, который идет на наш персональный компьютер. Предположим, что локальный IP-адрес 192.168.20.7.  # tcpdump -i eth0 ip dst 192.168.20.7
  • Найти трафик по айпи адресу.# tcpdump host 87.250.250.80
  • Отбор пакетов, которые отправляются на определенный узел. Для этого нужно ввести - # tcpdump -i eth0 dst host yandex.ru
  • Фильтрация трафика по порту. tcpdump port 3389
  • Отбор ответных пакетов, которые распространяются на определенный хост. # tcpdump -i eth0 src host yandex.ru. Если потребуется дополнительное полное изучение содержимого, необходимо воспользоваться функционалом «-v» или «-vv».

При использовании tcpdump весьма полезен оператор and. С его помощью появляется возможность объединения нескольких фильтров в один. Нужно ввести, к примеру:

# tcpdump dst host ya.ru and src host vseprolinux.ru

В определенных случаях требуется сохранение предварительно захваченного трафика. Для этих целей используется аргумент «-w». Потребуется ввести в терминале:

# tcpdump -i eth0 -w savetrafik.pcap

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

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