Анализ трафика · 6 min read · Dec 14, 2025
Анализ трафика с использованием Debian Lenny
Анализ трафика с использованием Debian Lenny
Используя мое устройство для мониторинга сети, мы заметили, что одна из линий в MRTG всегда находится под высокой нагрузкой. На этой линии агрегируется много различного трафика, поэтому мы решили проанализировать, из каких количеств протоколов и, следовательно, приложений состоит совокупный трафик.


Как вы можете легко увидеть, трафика много в каждый день, кроме выходных и праздников.
Одним из OSS приложений, которое может это сделать, является ntop. Отрывок с www.ntop.org:
"ntop — это зонд сетевого трафика, который показывает использование сети, аналогично тому, как это делает популярная команда top в Unix. ntop основан на libpcap и написан в переносимом виде, чтобы фактически работать на каждой платформе Unix и на Win32. Пользователи ntop могут использовать веб-браузер (например, netscape), чтобы просматривать информацию о трафике ntop (который действует как веб-сервер) и получать дамп состояния сети. В последнем случае ntop можно рассматривать как простой агент, подобный RMON, с встроенным веб-интерфейсом."Предварительные сведения и отказ от ответственности
Пожалуйста, имейте в виду, что юридические права в некоторых странах могут запрещать выполнение действий, подобных тем, что упоминаются в этой статье, и вы не должны нарушать юридические права. Также имейте в виду, что следующий рецепт описывает способ, которым мы реализовали наше решение, я не даю никаких гарантий, что оно сработает для вас.
1. Линия
Линия имеет скорость 10 Мбит/с и является маршрутизирующим шлюзом между 2 сайтами, расположенными в нескольких километрах друг от друга. Краткий расчет того, сколько данных проходит по этой линии, показал, что это должно быть в диапазоне ~25 Гигабайт/день. С одной стороны линии находится примерно 2000 систем, с другой стороны около 200, и около дюжины коммуникационных связей между обеими сторонами, представляющих интерес для нас. Позже мы заметили, что около 40-50 миллионов пакетов проходит по этой линии каждый день с 7 утра до 5 вечера.
Поскольку ntop анализирует весь трафик и показывает коммуникационные связи, например, в виде топ-говорящих и подобного, мы предположили, что ntop будет использовать много оперативной памяти для построения таблиц о всех коммуникационных связях, и мы подумали, что зонд должен иметь как можно больше оперативной памяти.
2. Зонд
Мы решили использовать старый неиспользуемый компьютер, сделать минимальную установку Debian Lenny и использовать его в качестве зонда ntop. Мы сделали только минимальную установку, потому что не хотели тратить драгоценную оперативную память на X11 или другие бесполезные приложения, бесполезные для этого случая. Мы решили использовать Debian, потому что он легко адаптируется к нашим потребностям и известен своей стабильностью. Но вы можете построить зонд, как описано здесь, с любой другой дистрибуцией Linux, с которой вы знакомы, также *BSD могут быть хорошей основой.
Мы решили разместить этот зонд рядом с маршрутизатором, который обрабатывает эту линию, и настроить зеркальный порт, чтобы получить доступ ко всему трафику, проходящему по этой линии.
Мы оснастили зонд второй сетевой картой, потому что нам нужна одна сетевая карта для захвата трафика и мы хотели иметь возможность удаленно администрировать зонд по SSH. Первая сетевая карта (eth0) была настроена без IP-адреса, потому что она используется только для захвата трафика с зеркального порта маршрутизатора и не для какой-либо активной связи. Кроме того, eth0 должна быть переведена в режим прослушивания (чтобы видеть весь трафик), что выполняется с помощью libpcap. Вторая сетевая карта (eth1), которая используется только для удаленного администрирования, была настроена с фиксированным IP-адресом.
К счастью, старый компьютер, который использовался в качестве зонда, был оснащен 2 ГБ оперативной памяти (что было достаточно), процессором AMD Athlon(tm) 64 Processor 3800+ и локальным диском на 80 ГБ. Диск был разделен следующим образом:
# fdisk -lДиск /dev/sda: 80.0 GB, 80026361856 байт
255 голов, 63 секторов/дорожка, 9729 цилиндров
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Идентификатор диска: 0x37aa37aa
Устройство Загрузка Начало Конец Блоки Id Система
/dev/sda1 1 131 1052226 83 Linux
/dev/sda2 132 162 249007+ 82 Linux swap / Solaris
/dev/sda3 163 9729 76846927+ 5 Расширенный
/dev/sda5 163 9729 76846896 83 Linux/dev/sda1 — это раздел на 1 ГБ для Lenny, /dev/sda2 — небольшой раздел подкачки, а /dev/sda5 будет использоваться для файлов захвата. Файловые системы — ext3, но xfs также может быть хорошим кандидатом для таких больших файлов.
3. Оффлайн-отчетность
ntop способен анализировать трафик в реальном времени или также может читать pcap-файлы для последующего анализа и отчетности.
Мы решили сначала использовать оффлайн-метод, чтобы захватывать трафик на линии с помощью tcpdump с 7 утра до 5 вечера с помощью короткого шелл-скрипта, управляемого cron, и провести анализ на втором этапе.
Шелл-скрипт выглядит как Sys-V initscript:
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
do_start() {
ifconfig eth0 up;
tcpdump -i eth0 -w /media/capture/`date +%F_%R`_tcpdump.pcap &
}
do_stop() {
pkill -SIGTERM tcpdump;
ifconfig eth0 down;
}
case "$1" in
start)
do_start 2>&1
;;
stop)
do_stop
;;
*)
echo "Использование: $0 start|stop" >&2
exit 3
;;
esac
Захват трафика с 7 утра до 5 вечера производит файлы размером ~30 ГБ:
-rw-r--r-- 1 root root 32725662515 Янв 14 17:00 2020-01-14_07:00_tcpdump.pcapЧтение файла захвата выполняется с помощью
ntop -m 10.80.192.0/18,10.81.20.0/24 -f /media/capture/2010-01-13_10\:30_tcpdump.pcap -n -4 -w3000 --w3c -p /etc/ntop/protocol.listДля подробного объяснения параметров командной строки ntop, пожалуйста, обратитесь к его справочной странице и настройте их в соответствии с вашими потребностями.
Вы можете затем просмотреть отчет ntop в веб-браузере на порту 3000 системы, где работает ntop.
4. Онлайн-отчетность
Еще одна возможность использования ntop заключается в том, что ntop сам захватывает трафик на eth0 и делает онлайн-отчет в реальном времени, так что вы можете видеть, что происходит через несколько секунд, и (с активированным плагином rrd) получать действительно красивые, удивительные (дружественные к управлению!) графики, где вы можете увеличивать масштаб с помощью мыши.

5. Первые выводы
Как и ожидалось, мы увидели, что примерно 70% всего трафика вызвано одной системой, интернет-прокси. Трафик, связанный с продуктивными приложениями, составил около 3-5%. Чтобы усугубить ситуацию, этот продуктивный трафик связан с интерактивными приложениями, такими как Citrix, Telnet и SAP. Мы решили, что следующим шагом должно быть приоритизирование/формирование трафика с помощью (например) diffserv или TOS mangling.
6. ngrep
Теперь мы решили проанализировать трафик, связанный с прокси, какие веб-сайты будут самыми посещаемыми. Такой более глубокий анализ невозможен с помощью ntop, но с помощью ngrep легко захватить только трафик, который (например) идет к одной системе или приходит/уходит к одному порту, или гораздо больше. Ngrep также способен искать выражения в полезной нагрузке, поэтому следующим шагом было использовать ngrep для захвата только трафика, связанного с интернет-прокси, и дальнейшего его анализа.
Это просто делается с помощью
ngrep -d eth0 host 10.89.1.17 -O /media/capture/snap.pcapНе нужно говорить, что этот простой способ захвата также можно выполнить с помощью tcpdump.
Когда это делается с 7 утра до 5 вечера, это может произвести файл размером ~14 ГБ:
-rw-r--r-- 1 root root 14223354675 Янв 25 16:26 snap.pcapТеперь этот файл должен быть проанализирован. Идея заключается в том, чтобы
прочитать файл с помощью tcpdump, вывести его на stdout,
grep для “get http://“,
вырезать FQDN сайтов,
выбросить дублированные записи, которые находятся в коротких сериях (потому что они могут принадлежать одному клику в браузере, что приводит к строке последовательных get),
и подсчитать и отсортировать эти данные в соответствии с их частотой.
Это можно сделать в нескольких шагах, используя промежуточные файлы, или одной командой, где несколько инструментов командной строки соединены вместе:
tcpdump -r snap.pcap -A | grep -i "get http://" | awk '/http/ { print $2 }' | cut -d/ -f1-3 | grep http | sed '$!N; /^\(.*
\
\\1$/!P; D' | sort | uniq -c | sort -r > urls.txtЭто выполняется некоторое время, и вы получаете файл, отсортированный в порядке убывания, как часто сайты, найденные в файле захвата, посещаются. Я не на 100% уверен, что все наши предположения, сделанные выше, обработаны правильно, но цифры в файле выглядят правдоподобно.
13418 http://www.gxxxxx.dx
10184 http://www.gxxxxx-axxxxxxxx.cxx
8281 http://www.fxxxxxxx.dx
5470 http://www.bxxx.dx
4269 http://www.sxxxxxx.dx
2550 http://www.gxxx.cxx
2047 http://www.bxxxxxxx-zxxxxxx.dx
2044 http://www.fxxxxxxx.cxx
1618 http://www.exxxxxxx.dx
1410 http://www.lx-bx.dx
....Другой способ получить отчет о посещенных веб-сайтах — это интерпретировать журнал интернет-прокси, возможно, с помощью Calamaris (в случае Squid или прокси, который производит журналы, обрабатываемые Calamaris). Без журнала прокси я не знаю, как такой отчет можно было бы составить.
Наконец, мы настоятельно подчеркиваем, что в этом проекте не были оценены никакие пользовательские данные.
7. URL-адреса
Debian
Устройство мониторинга сети
MRTG
Ntop
tcpdump + libpcap
RRD
ngrep
Squid
Calamaris
AWK 1 Liners
SED 1 Liners
Get new posts in your inbox
No spam. Unsubscribe anytime.