Продолжим подсчитывать трафик на нашем компьютере под управлением 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 по обработке статистики. Звучит неплохо, но хотелось бы каких-то менее полуфабрикатных средств.
Именно с этого места мы и продолжим в следующий раз. Собирайте статистику.