Поддержка Консалтинг Обучение Jamf Pro Блог

Подсчет трафика на Mac OS X. Подход 2

Наташа Персиянова 22.09.2010

Продолжим подсчитывать трафик на нашем компьютере под управлением Mac OS X (или Mac OS X Server).
На сей раз начнем использовать NetFlow.


Netflow это протокол, созданный Cisco, невзирая на проприетарное происхождение, стандартный, повсеместно распространенный, используемый не только производителями большого железа, но и практически всеми, кто что-то куда-то роутит.
Что важно для нас сегодня – программными маршрутизаторами на базе UNIX систем (Linux, BSD, Mac OS X). И, наоборот, то, что мы будем использовать NetFlow не потребует особых изменений, если мы по каким-то причинам отойдем от роутера на базе Мака (Linux) и решим использовать, например, Juniper.

Netflow основан на представлении трафика в виде потоков.
Потоки включает такую информацию, как IP адреса (source, destination), номера портов, количество пакетов, количество байт и ряд других данных.
Что же является потоком? Представим, что ваш браузер хочет посмотреть видеоролик.
TCP соединение с сайтом устанавливается, TCP соединение c сайтом закрывается. Вот и весь поток. Причем у нас было два потока – один от вас к серверу, второй от сервера к вам (на самом деле, конечно, была кучка потоков к разным серверам youtube и от этих серверов).
А если бы вы качали FreeBSD.iso по FTP, то поток был бы долог и велик.
В случае с ping поток состоял бы из всей серии пакетов, отправленной, пока вы пинговали www.ru.
А если бы вы запустили nmap, то создали бы десятки потоков, – по два потока на каждый порт с которым удалось связаться.
Поток часто называют сессией. Это неправильно, сессия состоит из двух потоков – от вас к серверу и от сервера к вам.

Поскольку NetFlow передает по сети только данные о потоках, объем этих данных относительно невелик и не сильно нагружает роутер и сеть. Анализаторы пакетов, конечно, покажут большее количество деталей. Но они пожирают больше ресурсов и зачастую эта информация избыточна и нужна лишь при траблшутинге конкретной проблемы.

Ну да ладно, теорию можно прочитать гораздо подробнее, например, в этой книге.

Перейдем к практике.
NetFlow состоит из трех компонентов – сенсора, коллектора, средства анализа (визуализации, построения отчетов).


Сенсор.
Он же генератор (sensor, probe) – собственно отправляет информацию о потоках на коллектор. На деле сенсор может отправлять информацию сразу на несколько коллекторов (не всякий, но Cisco может).

В качестве сенсора сегодня будем использовать популярный, хорошо себя зарекомендовавший, с поддержкой IPv6 (а вдруг?) softflowd.
softflowd нет в MacPorts, поэтому:

curl -O http://www.mindrot.org/files/softflowd/softflowd-0.9.8.tar.gz; tar xzf softflowd-0.9.8.tar.gz; cd softflowd-0.9.8; ./configure; make; make install

В каталог /usr/local/sbin/ установятся две программки – softflowd (сам коллектор) и softflowctl (управление оным и получение статистики о работе демона).

sudo softflowd -i en1 -n 127.0.0.1:8888
Мы задали интерфейс, IP адрес и порт, на который мы отправляем коллектору данные (не забудьте потом подходящим образом сконфигурировать коллектор).

Через какое-то время мы можем проверить с помощью команды softflowctl стала ли собираться информация (кроме того, обратите внимание на количество dropped packets).

softflowctl statistics
softflowd[23308]: Accumulated statistics:
Number of active flows: 65
Packets processed: 7672
Fragments: 0
Ignored packets: 37 (37 non-IP, 0 too short)
Flows expired: 0 (0 forced)
Flows exported: 0 in 0 packets (0 failures)
Packets received by libpcap: 7723
Packets dropped by libpcap: 0
Packets dropped by interface: 0

Если что, можно использовать с softflowd ключи-d (не демонизировать) и -D (debug).


Коллектор.
Коллектор сидит, слушает, складывает полученную информацию о потоках (на диск, в базу SQL и т.п.).
Коллектор может принимать информацию с кучи сенсоров. Так, на одном сервере, где установлен коллектор, вы собираете информацию сразу со всех коммуникационных устройств вашей сети или со всех филиалов.

В качестве коллектора сегодня будем использовать flowd – шустрый маленький коллектор от создателя нашего сенсора.

Он есть в MacPorts, но из-за ошибки может не установиться.
Поэтому устанавливайте его в такой последовательности:

port install byacc
port install flowd

Отредактируем конфигурационный файл /opt/local/etc/flowd.conf, где укажем на каком порту мы слушаем, из каких сетей готовы принимать NetFlow трафик, куда сохраняем эту информацию.

flowd откажется запускаться, требуя для своей работы специального системного пользователя.

Поступим как-то так:
cd /var/db/dslocal/nodes/Default/users/
cp _www.plist _flowd.plist
vi _flowd.plist (поменяем имя и ID)
killall DirectoryService (перезапустим службу каталогов, чтобы были перечитана локальная база пользователей)

А теперь запустим flowd
flowd -f /opt/local/etc/flowd.conf

Все что будет делать этот крохотный демон – принимать пакеты NetFlow и складывать на диск.
Обработка этой информации – дело других программ.


Обработчик.
В комплекте установится утилита flowd-reader, но вряд ли вам ее вывод покажется захватывающим:

flowd-reader /var/log/flowd
LOGFILE /var/log/flowd
FLOW recv_time 2010-09-18T12:51:01.379617 proto 6 tcpflags 1a tos 00 agent [127.0.0.1] src [10.0.2.2]:52921 dst [64.12.165.98]:5190 packets 11 octets 915
FLOW recv_time 2010-09-18T12:51:01.379617 proto 6 tcpflags 1e tos 00 agent [127.0.0.1] src [64.12.165.98]:5190 dst [10.0.2.2]:52921 packets 8 octets 775

Если вы поставите flowd вручную, а не из портов, то будут доступны примеры на perl и python по обработке статистики. Звучит неплохо, но хотелось бы каких-то менее полуфабрикатных средств.

Именно с этого места мы и продолжим в следующий раз. Собирайте статистику.

Индейцы Яномамо