🥫
Работа с TCPDump
Данная утилита является полезным инструментом для перехвата и сбора пакетов, поступающих на сервер, а также исходящих от него.

Установка TCPDump

Для Debian / Ubuntu (под root):
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 — пропуск доменных имен в дампе.
-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.
Copy link
On this page
Установка TCPDump
Аргументы для команды
Использование
Аргументы фильтрации
Расширенные операторы
Завершение