Работа с TCPDump
Данная утилита является полезным инструментом для перехвата и сбора пакетов, поступающих на сервер, а также исходящих от него.
Установка TCPDump
Для Ubuntu/Debian:
Для Red Hat / CentOS:
Аргументы для команды
-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 — имя файла, в который будет сохранен дамп (по умолчанию без этого аргумента дамп выводится в реальном времени без записи в файл).
Использование
Чтобы не засорять наш дамп лишними пакетами, следует выбрать конкретный интерфейс, с которого мы хотим собрать информацию, а не все. Посмотреть список всех интерфейсов можно при помощи данной команды:
![](https://wiki.spacecore.pro/~gitbook/image?url=https%3A%2F%2F1206415929-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LXbCSSBR0J1rX84BjWO%252Fuploads%252FAGekMcjMSgDktv1qyE0q%252Fimage.png%3Falt%3Dmedia%26token%3De6a66a86-48d5-46bd-87f0-02f64bee6c7b&width=768&dpr=4&quality=100&sign=8b2bb53a&sv=1)
На наших виртуальных серверах (VDS) основным сетевым интерфейсом является 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
Теперь наши пакеты имеют более массивную структуру типа:
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 и т.д
Также эти аргументы можно комбинировать друг с другом.
Например, мы можем посмотреть все пакеты, которые исходят от нашего сервера к конечному адресу:
Или наоборот, все пакеты, которые исходят к нашему серверу из подсети-источника (можно также использовать конкретный IP-адрес, как в примере выше):
Для поиска пакетов необходимого размера можно использовать аргументы на примере
Допустим у Вас есть несколько серверов Garry's Mod на разных портах, и Вы хотите проверить, ведется ли на них DDoS-атака на текущий момент. Для этого нам подойдет команда:
Обратите внимание на указываемый диапазон портов.
Благодаря аргументу -w дамп будет собран в файл garrysmod.dump
Расширенные операторы
Помимо всего прочего, в TCPDump доступны операторы для создания различных комбинаций аргументов.
AND или && (оператор «И»)
OR или || (оператор «ИЛИ»)
EXCEPT или ! (оператор «КРОМЕ»)
Допустим, мы хотим вывести весь трафик запросов MySQL, который отправляет 192.168.1.1 по порту 3306 (на любые адреса).
Завершение
Спасибо за прочтение! Мы подробно ознакомились с совершенно полезным инструментом TCPDump, который является неотъемлемой частью работы сетевых инженеров, а также обязательно пригодится рядовым пользователям.
Для чтения пакетов на Windows Вы можете использовать программу WireShark.
Last updated