Tcpdump чрезвычайно удобный сетевой анализатор, очень помогающий в работе как сетевым администраторам, так и безопасникам. Естественно что для получения максимальной информации при работе с tcpdump, просто необходимо иметь представления о стеке протоколов TCP/IP. Для удобства можно использовать более удобные и интеллектуальные программы, например Wareshark, но часто возникают ситуации когда на тестируемую машину не представляется возможным установить дополнительные сервисы, и тогда tcpdump просто незаменим, не будит же админ, ради анализа пакетов, ставить на unix’овый сервак X-Windows тем более что в большинстве unix’овых систем, утилита tcpdump идет по умолчанию.
Понимание протокола TCP/IP дает широкое пространство для использование анализатора и устранения неисправностей и неполадок в работе сети, за счет разбора пакетов. Поскольку оптимальное использование данной утилиты требует хорошего понимания сетевых протоколов и их работы, то получается забавная ситуация, в которой инженеру в любом случае необходимо знать и понимать механизмы передачи данных в сети. т.ч. tcpdump полезна во все отношениях: как устранения неисправностей, так и самообразования.
Ниже приводятся несколько опций, которые помогут наиболее полно и подробно использовать эту утилиту, тем более что все эти опочки и ключики довольно легко забываются, и данные примеры весьма полезны, для освежевания памяти.
Первый используемый ключик -n который запрещает попытки преобразования адресов в доменные имена, тем самым выдавая нам чистые IP адреса с портами.
Второй это -X который задает для каждого пакета вывод как hex (шестнадцатеричная система) так и ASCII содержимого пакета.
И последняя опция это -S которая заменяет вывод относительной TCP нумерации, на абсолютную. Смысл в том, что при относительной нумерации некоторые проблемы могут скрыться от вашего внимания.
Нужно понимать, что основное преимущество tcpdump перед другими утилитами заключается в том, что в ней возможен подробный и ручной разбор пакетов. Также нужно помнить что по умолчанию tcpdump использует только первые 68 байт пакета, т.ч. если необходимо видеть больше, то следует использовать ключ -s number , где number количество байт которые следует захватить. В случае задания number 0 , произойдет полный захват пакета, поэтому лучше использовать значение 1514, что даст полный захват стандартного, для сетей Ethernet, пакета.
-c : задается проверка размера файла захвата перед каждой очередной записью захваченного пакета, если размер больше, то файл сохраняется и запись идет в новый файл
-e : выводится ethernet заголовок (канальный уровень) в каждой строке дампа
-i any : прослушивание всех интерфейсов, на случай если вам необходим весь трафик.
-n : запрещает преобразование адресов в доменные или символьные имена
-nn : запрещает преобразование адресов и портов в доменные или символьные имена
-q : Красткий вывод информации, за счет уменьшения вывода информации о протоколе.
-X : выводит как hex так и ASCII содержимое пакета
-v, -vv, -vvv : задает вывод дополнительной информации о захваченных пакетах, что дает возможность более широкого анализа.
-w чтобы записать данные в файл (Затем, используя инструмент типа tcpdstat или tcptrace, мы проанализируем результаты)
Несколько примеров для использования:
# Стандартный вывод пакетов
tcpdump -nS
# Расширенный стандартный вывод
tcpdump -nnvvS
# Глубокий разбор пакета
tcpdump -nnvvXS
# Наиболее подробная информация о трафике
tcpdump -nnvvXSs 1514
# Стандартный вывод пакетов c записью в файл тест
tcpdump -nS -w test
Выражения позволяют производить более целевое сканирование и задавать типы трафика. Умение использовать выражения делает tcpdump весьма продуктивным инструментом, в рукам сисадмина. Существует три основных типа выражений: type, dir, and proto.
Опции выражжения type бывают host, net и port.
Для выражения направления задаваемого dir существующие опции src, dst, src or dst, и src and dst.
Несколько стандартных выражений:
host // анализ трафика на основе IP адреса ( также работает с символьными именами, если не задано -n)
tcpdump host 1.2.3.4
src, dst // анализ трафика только для определенного назначения или передатчика
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
net // захват трафика принадлежащего определенной сети
tcpdump net 1.2.3.0/24
proto // работает с tcp, udp, и icmp. Нужно помнить что proto не упоминается
tcpdump icmp
port // анализ трафика с определенного порта (входящего или исходящего)
tcpdump port 3389
src, dst port // фильтр базируется на входящем или исходящем порту
tcpdump src port 1025
tcpdump dst port 3389
Но наиболее сильным инструментом являются операнды, позволяющие задавать условия для выражений и опций, для более подробного вычленения информации об анализируемом трафике.
AND
and or &&
OR
or or ||
EXCEPT
not or !
TCP трафик с ресурса 10.15.123.33 с портом назвачения 3379:
# tcpdump -nnvvS tcp and src 10.15.123.33 and dst port 3379
Трафик переходящий из сети 192.168 с назначением на сети 10 или 172.16:
# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
Non-ICMP трафик с точкой назначения 192.168.0.2 и из сети 172.16:
# tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net 172.16.0.0/16 and not icmp
Трафик с хостов Eros or Ares , но не идущий на стандартный SSH порт (для данного выражения требуется разрешение имен):
# tcpdump -vv src eros or ares and not dst port 22
Как видно из приведенных примеров, мы можем строить любые выражения, для любых целей. Также, используя сложный синтаксис, из анализа мы можем исключать любой тип трафика.
Также следует помнить о том, что мы можем строить запросы, включающие группы и пулы опций, заданных в одном запросе.
Но для того чтобы утилита tcpdump обращала на них внимание их нужно помещать в скобки, беря выражение в одиночные кавычки:
Трафик идущий с хоста 10.0.2.4 на порты назначения 3379 или 22:
# tcpdump 'src 10.0.2.4 and (dst port 3379 or 22)'
Также возможно производить фильтрацию на основе TCP флагов, например для вычленения SYN или RST пакетов:
Анализировать все URG пакеты:
# tcpdump 'tcp[13] & 32 != 0'
Анализировать все ACK пакеты:
# tcpdump 'tcp[13] & 16 != 0'
Анализировать все PSH пакеты:
# tcpdump 'tcp[13] & 8 != 0'
Анализировать все RST пакеты:
# tcpdump 'tcp[13] & 4 != 0'
Анализировать все SYN пакеты:
# tcpdump 'tcp[13] & 2 != 0'
Анализировать все FIN пакеты:
# tcpdump 'tcp[13] & 1 != 0'
Анализировать все SYN-ACK пакеты:
# tcpdump 'tcp[13] = 18'
Нужно помнить что фильтр обрабатывает данный запрос следующим образом, проверяет 13 байт заголовка TCP пакета и заданный байт флага, на соответствие условию, например:
tcpdump ‘tcp[13] & 2 != 0′ – просмотр и сравнение 13 и 2 байтов заголовка, на условие что данные не равны 0, т.е. заданы 1.
Анализ специализированного трафика:
Анализировать весь IPv6 трафик:
# tcpdump ip6
Анализировать весь трафик с имеющимися флагами SYN и RST:
# tcpdump ‘tcp[13] = 6′
Анализировать весь трафик с имеющимся “evil bit”:
# tcpdump ‘ip[6] & 128 != 0′
Естественно что приведенные примеры не могут охватить всю полноту использования столь мощного инструмента как tcpdump, поэтому как обычно, лучшим другом сисадмина был и остается:
# man man
Коментувати