Работа с 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 — имя файла, в который будет сохранен дамп (по умолчанию без этого аргумента дамп выводится в реальном времени без записи в файл).
Использование
Чтобы не засорять наш дамп лишними пакетами, следует выбрать конкретный интерфейс, с которого мы хотим собрать информацию, а не все. Посмотреть список всех интерфейсов можно при помощи данной команды:
На наших виртуальных серверах основным сетевым интерфейсом является ens3.
Для вывода логов нашего сетевого интерфейса в реальном времени используем команду:
Не забывайте, что для TCPDump требуются права суперпользователя, поэтому данные команды следует выполнять от имени root, либо с использованием sudo.
После использования команды мы увидим множество бегущих строк, для остановки дампа используйте сочетание клавиш Ctrl + C
Собранные пакеты данных имеют примерно такой вид:
22:31:56.330185 IP fsn.qwins.co.65383 > fsn.qwins.co.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.qwins.co.65383 > fsn.qwins.co.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 (на любые адреса).
Для чтения пакетов на Windows Вы можете использовать программу WireShark.
Last updated