Мониторинг сетевого трафика с помощью Netflow
18.11.2005 | khomya

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

Это все, конечно, здорово, но MRTG не позволяет подробно отследить процессы, происходящие в сети. Если ваш канал E1 занят на 90%, то что стало причиной, какая машина или сервис вызвал такую нагрузку? Конечно, можно мониторить все машины в локальной сети, но для анализа трафика придется брать в руки tcpdump.

Netflow предоставляет возможность анализа сетевого трафика на уровне сеансов, делая запись о каждой транзакции TCP/IP. Конечно, такая информация будет не столь подробна, как tcpdump, но в комплексе представляет довольно подробную статистику.

Под «данными сеанса» я буду понимать совокупность пары адресов хостов, портов и объема данных. Один сеанс обозначим понятием «поток». Netflow может легко сказать вам, является ли поток в 1.5Mb/s легитимными данными от вашего Web-сервера или ваша система стала частью botnet и в данный момент DDoSит ONLamp.com. Один раз попробовав работать с Netflow, вы больше не будете представлять жизнь без этого.

Обратной стороной медали является то, что Netflow значительно более сложен в настройке, чем MRTG или любое другое, основанное на SNMP, решение. Наличие разннобразнейшей неверной и устаревшей документации еще больше запутывает дело.

Архитектура Netflow

Netflow имеет три основых компонента: сенсор, коллектор и система отображения данных. Сенсор – демон, который слушает сеть и фиксирует данные сеанса. Также как Snort или любая другая IDS, коллектор должен иметь возможность подключиться к хабу, «зеркалированному» порту коммутатора или любому другому устройству, для просмотра сетевого трафика. Если вы используете систему пакетной фильтрации на базе BSD или Linux, то это превосходное место для коллектора Netflow, так как весь трафик будет проходить через эту точку. Сенсор будет собирать информацию о сеансах и сбрасывать ее в коллектор.

Коллектор – второй демон, который слушает на UDP порту, указанному вами и осуществляет сбор информации от сенсора. Полученные данные он сбрасывает в файл для дальнейшей обработки. Различные коллекторы сохраняют данные в различных форматах.

Наконец, система обработки читает эти файлы и генерирует отчеты в форме, более удобной для человека. Эта система должна быть совместима с форматом данных, предоставляемых коллектором.

Поскольку программное обеспечение сенсоров, коллекторов и систем отображения весьма разнообразно, то вы можете посчитать Netflow слишком сложным сложным. Для решения этой проблемы, я хотел бы предложить вам сценарий, в 90% случаев подходящих вам без кардинальных изменений. Предположим, что:

  • У нас имеется машина с BSD или Linux, установленная в таком месте сети, чтобы быть использованной в качестве сенсора. Если коснуться вычислительной мощности, то, по моим данным, системы 500MHz CPU/256Mb RAM вполне хватит для обработки потока 20Mb/s без особых проблем. В данном случае я буду использовать FreeBSD.
  • У нас имеется машина, которая будет служить коллектором и системой отображения. Это может быть тот же компьютер, что и в пунке выше, но учите, что нагруззка на систему в этом случае увеличится. Квалифицированные злоумышленники также имеют интерес в данных Netflow, так что вы должны разместить коллектор позади системы сетевой защиты. Имея web-сервер можно генерировать web-based отчеты Netflow. Я использую FreeBSD как коллектор и систему отображения, для работы на вашей системе, измените соответствующим образом пути к пакетам.

Установка сенсора

Программное обеспечение сенсора – самое простое для установки. После того, как мы убедимся в возможности прослушивать весь трафик, можно приступать к установке. Лично я рекомендую softflowd(8). Sortflowd готов к работе «из коробки», все что требуется для установки, так это выполнить команды:

#make all
#install clean

как на BSD, так и на Linux, при этом требуется наличие библиотеки libpcap. (FreeBSD содержит систему ng_netflow, но поскольку у меня имеются сенсоры, работающие под управлением Linux, то я ее не использую). После того, как softflowd был установлен, необходимо выбрать интерфейс, мониторинг которого будет производиться, указать IP адрес и UDP порт коллектора. Например, для интерфейса em0 и коллектора 172.16.13.5:8818 запуск softflowd будет выглядеть следующим образом:

# softflowd -i em0 -n 172.16.13.5:8818

Сенсор немедленно начнет слушать сеть и посылать информацию на коллектор. Удостоверьтесь, что эта программа стартует на этапе начальной загрузки!

Softflowd включает в себя программу контроля softflowctl(8), с помощью которой можно проверить работоспособность softflow:

# softflowctl statistics
softflowd[40475]: Accumulated statistics:
Number of active flows: 2298
Packets processed: 268086
Fragments: 0
Ignored packets: 867 (867 non-IP, 0 too short)
Flows expired: 3103 (0 forced)
Flows exported: 6206 in 214 packets (0 failures)

В этом выводе нас будет интересовать число активных потоков (2298) и строка «exported», сообщающая о количестве экспортированных потоков в коллектор.

Если вы зададитесь целью, то сможете найти разнообразнейшее число сенсоров. Маршрутизаторы Cisco могут экспортировать данные Netflow – за счет драгоценного процессорного времени. Если у вас очень сложная конфигурация или маломощный сервер, то может возникнуть опасность перегрузки. Cisco будет только рада продать вам более мощный маршрутизатор, но Unix-like решение более рентабельно. Есть много других устройств, которые способны работать с Netflow, если есть интерес, то стоит обратиться к документации на соответствующие устройства.

Если у вас установлен Ethereal или tcpdump, то рекомендую проверить, действительно ли данные отправляются и достигают коллектора. В случае каких-либо проблем можно использовать флаг -D демона softflowd.

Softflowd посылает информацию о потоке после того, как тот будет завершен, например, прекратится FTP-сессия или загрузится web-страница. Это означает, что в любую единицу времени у softflowd имеется некий кэш открытых потоков, в связи с чем остановку демона необходимо выполнять командой softflowctl shutdown. В противном случае вы потеряете данные активных потоков, которые еще не были завершены и отправлены на коллектор.

Установка коллектора

Как следует из названия, коллектор занимается тем, что собирает данные, предоставляемые сенсором и сохраняет их на диск для дальнейшего хранения и обработки. Если это возможно, то установите коллектор на Web-сервере, это сделает процесс отображения статистики значительно более приятным. Я рекомендую flow-capture, очень популярный коллектор Netflow, входящий в состав пакета flow-tools. В FreeBSD порт flow-tools располагается в каталоге /usr/ports/net-mgmt/flow-tools. Установите его обычным «make all install.» Не делайте «make clean», так как, возможно, вам придется устанавливать некоторые компоненты вручную. По этой самой причине не рекомендуется использовать прекомпилированный пакет.

Создайте каталог в котором flow-capture будет хранить свои данные. Я обычно использую /var/log/netflow, но это дело вкуса. На скоростной сети данные Netflow могут составить несколько гигабайт в неделю. Я также рекомендую создать подкаталог saved, используемый системой отображения.

Теперь нам необходимо выполнить стартовый скрипт flow-capture. Выглядит он следующим образом:

# /usr/local/bin/flow-capture -p /var/run/flow-capture.pid -n 287
-N 0 -w /var/log/netflows/ -S 5 0/0/8818

Большинство параметров можно оставить без изменеия. Флаг -w указывает каталог данных, заключительный аргумент обозначает локальный IP, удаленый IP и прослушиваемый UDP порт. В этом случае, значение 0/0/8818 указывает коллектору слушать на всех локальных IP адресах, принимать данные с любых удаленных хостов, порт 8818. В случае, если вы опасаетесь принимать чужие данне, то жестко задайте адрес сенсора. Параметры -n 287, -N, и -S 5 необходимы для работы Flow-capture, поэтому лучше оставьте их в покое.

После старта flow-capture данные начинают копиться в рабочем каталоге. Имя файла определяется как версия Netflow, дата и время начала сбора данных. Например, имя файла tmp-v05.2005-04-28.201001-0400 означает временный файл, содержащий данные 5 версии Netflow, собранные 28 апреля 2005 с 20:10:01, временная зона -4 часа от Гринвича. Каждые пять минут flow-capture перемещает временный файл в постоянное местоположение и начинает новый временный файл. В отличии от временного, файл, помещенный на постоянное хранение, начинается на ft, но имеет тот же префикс.

Для того, чтобы убедиться, что данные собираются, посмотрите, увеличивается ли размер временного файла.

Информация в этих файлах находится в бинарном формате, требующем для просмотра специальных инструментальных средств. Многие из тех инструментальных средств используют модуль Cflow.pm.

Установка Cflow.pm

Достаточно большое количество инструментов составления отчетов Netflow используют perl модуль Cflow.pm для чтения файлов Netflow. Этот модуль включает в себя библиотеки и утилиты командной строки, необходимые для просмотра и редактирования файлов данных. Самым сложным во всей этой истории является то, что каждый коллектор имеет собственный формат хранения файлов и хотя Cflow.pm изначально создавался для чтения файлов cflowd(8), при соответствующей настройке он способен обрабатывать и другие форматы.

Именно здесь большинство людей разочаровывается в Netflow. Тщательно следуйте нашим указаниям и не забудьте проверить результаты работы.

На последних версиях FreeBSD /usr/ports/net-mgmt/p5-Cflow автоматически обнаруживает библиотеки flow-tools. Cflow вызывает их как -lnsl и в случае ошибки выдается предупреждение.

Note (probably harmless): No library found for -lnsl

Если вы увидели это предупреждение, то самая пора начать волноваться – это означает, что Cflow работать не будет! Если предупреждения не появилось, необходимо выполнить проверку работоспособности. Cflow включает в себя утилиту flowdumper(1), которая читает файлы данных из командной строки. Воспользуемся ей.

#flowdumper -s ft-v05.2005-04-28.201501-0400 | more
2005/04/28 19:14:01 172.16.30.247.80 -> 216.98.200.250.63647 6(SYN|ACK) 3 144
2005/04/28 19:14:01 216.98.200.250.63647 -> 172.16.30.247.80 6(SYN) 1 48
2005/04/28 19:14:01 172.16.30.247.80 -> 216.98.200.250.63648 6(SYN|ACK) 3 144
2005/04/28 19:14:01 216.98.200.250.63648 -> 172.16.30.247.80 6(SYN) 1 48

Каждая строка – поток. Она включает в себя адрес источника и назначения, тип транзакции. Как вы могли обратить внимание, в выводе представлено две TCP/IP сессии – первая строка указывает на трафик, исходящий с 172.16.30.247, порт 80, на хост 216.98.200.25. Следующая строка показывает трафик, идущий в обратном направлении.

В случае некорректной установки, flowdumper выведет ошибку или ничего не выведет. Если такая ситуация произошла, продолжать работу у нас не получится. В этом случае, мы пойдем другим путем, предварительно деинсталлировав пакет p5-Cflow.

Помните, что не стоило чистить каталог flow-tools? Давайте перейдем в подкаталог work исходных текстов пакета. В подкаталоге contrib у нас усть другой тарбол Cflow. Распакуем его:

# cd /usr/ports/net-mgmt/flow-tools/work/flow-tools-0.67/contrib
# tar -xzvf Cflow-1.051.tar.gz

Cflow часто собирает правильную библиотеку, когда устанавливается flow-tools. Выполним сборку модуля:

# perl Makefile.PL
# make
# make install

Пробуйте flowdumper снова, все должно работать.

В противном случае, применим решение «в лоб». Flow-tools устанавливает libft.a в каталог /usr/local/lib. Отредактируем Makefile.PL модуля Cflow.pm в части, касающейся библиотек flow-tools:

sub find_flow_tools {
my($ver, $dir);
my($libdir, $incdir);
if (-f ‘../../lib/libft.a’) {
$dir = ‘../../lib’;
$incdir = «-I$dir -I$dir/..»;
$libdir = «-L$dir»;
}

Заменим

if (-f ‘../../lib/libft.a’) {

на

if (-f ‘/usr/local/lib/libft.a’) {

Если и этот способ потерпит неудачу, то явно что-то не так с установкой Perl. Теперь выполним make и make install, в результате чего мы должны получить работоспособный flow-tools.

Теперь можно писать тонны скриптов, которые будут отображать данные, рисовать графики и слать уведомления. Но, как это ни странно, этот путь уже пройден и в следующей главе как раз и будет рассмотрены средства визуализации трафика.

Автор: Michael W. Lucas

Перевод: Сгибнев Михаил

Просмотров новости: 1 854  <, , >


-->