
Анонсирован майский номер № 6 (127) журнала Системный Администратор за 2013 год.
В номере:
Выходит отдельным приложением. В № 5(28) 2013.

Подробности на сайте журнала
Журнал можно получить в электронном виде подробнее
UserGate Web Filter обеспечивает интернет-фильтрацию для любых предприятий, образовательных учреждений, интернет-провайдеров и точек публичного Wi-Fi доступа. Для этих целей используется несколько технологий: блокировка категорий сайтов, контентная фильтрация, белые и черные списки, безопасный поиск, блокировка баннеров и всплывающих окон. В ролике разберем установку на Ubuntu Linux 12.04 (на примере Linux Mint) и познакомимся с интерфейсом управления.
В настоящее время все большей популярностью для организации частного облака пользуется модель IaaS, рассмотрим возможности предоставляемые OpenSource проектом OpenNebula
В «дооблачные» времена системному администратору, когда в его подчинении находилось несколько физических серверов, приходилось иметь дело с не очень гибкой инфраструктурой. Ведь есть если ресурсов не хватало, докупался новый, более мощный сервер, который использовался взамен или как в дополнение к старому в виде кластера или балансировки нагрузки. Если компьютеров было не много, то особых хлопот с эксплуатацией такая схема не доставляла. Но по мере увеличения систем управлять всем этим становилось очень неудобно. Проблему решила виртуализация, позволяющая строить на одном мощном физическом сервере несколько виртуальных, гибко выделяя каждому необходимые ресурсы. Появление IaaS это следующий логичный этап развития ИТ, ведь вся инфраструктура управляется с единого центра, администартор на лету может создавать новые системы с необходимыми характеристиками и изменять настройки текущих, переносить сервера и многое другое, о чем раньше приходилось только мечтать. Чтобы поднять свой IaaS аналогичный Amazon EC2 нет необходимости в закупке дорогих лицензий или обращаться к провайдеру услуг, здесь вполне можно решить все обратившись к одному из OpenSource проектов. Тем более что выбирать есть из чего– OpenNebula, Eucalyptus, OpenStack, CloudStack, openQRM, Nimbus и некоторые другие. Каждый из них заслуживает отдельного внимания, но в статье остановимся подробнее на OpenNebula.
Решение OpenNebula (opennebula.org) предназначено для создания и управления виртуальными центрами обработки данных и облачных инфраструктур, позволяя развернуть IaaS функционально схожую с Amazon EC2, на уже имеющихся серверах компании без каких-либо значительных инвестиций и привязки к конкретному вендору. В отличие от большинства OpenSource проектов, которые предоставляют лишь удобный интерфейс управления определенными типами гипервизоров, разработчики OpenNebula своей целью ставят возможность максимально использовать весь потенциал заложенный в облачной концепции. В итоге OpenNebula предоставляет собой открытую и расширяемую архитектуру автоматизации работы ЦОД за счет использования и интеграции решений виртуализации, хранения, мониторинга и управления.
Проект стартовал в 2005 году как научно-исследовательский, некоторые технологии были разработаны для удовлетворения потребностей ряда компаний. Сегодня развитие OpenNebula финансируется несколькими спонсорами в этом списке можно найти как государственные, так и коммерческие организации и компании: CERN, FermiLab, China Mobile, европейское космическое агентство и другие. С первого публичного релиза вышедшего в 2008 году OpenNebula распространяется с открытым исходным кодом по Apache License и поддерживается сообществом. В 2010 году образована C12G Labs предлагающая коммерческие услуги по внедрению и обеспечивающая дополнительное финансирование проекта. Тест проведенный CERN в 2009 году (cloudcomputing.sys-con.com/node/1667988) показал, что OpenNebula отлично справляется с управлением 16000 виртуальных машин в вычислительном кластере обеспечивающем 400 000 рабочих мест.
В кластере можно одновременно использовать разные гипервизоры как на физическом сервере, так и узлах кластера. В настоящее время обеспечивается поддержка Xen, KVM и VMware. Поддерживаются все сопутствующие технологии, в том числе и Live migration.
В качестве гостевых ОС могут выступать любые из поддерживаемых гипервизором, включая Windows и Linux. Управляющие сервера OpenNebula работают под управлением Linux или MacOSX (фронтенд).
Открытая модульная архитектура и стандарты позволяет интегрировать OpenNebula с любой платформой виртуализации, хранилищем данных или менеджером управления. Реализован интерфейс к Amazon EC2, поддерживается API — EC2 Query, OGF OCCI, vCloud и свой XML - RPC. Возможна интеграция с некоторыми другими проектами, например системами управления Puppet, Chef и CFEngine.
В результате возможности OpenNebula позволяют строить публичные, приватные и гибридные облака, легко масштабируя среду. Например, можно использовать для некритичных сервисов публичные сервера, подключая их при нехватке ресурсов на локальных системах. Соответственно также динамично добавляются и убираются собственные физические и виртуальные сервера, добиваясь нужного уровня производительности сервиса. Например, чтобы принудительно перенести VM на другой сервер достаточно установить флаг rescheduling или выполнить команду “onehost flush” и таким образом быстро очистить хост для технических работ. Механизмы отказоустойчивости позволяют в автоматическом режиме восстановить работоспособность окружений в случае сбоя физического или виртуального сервера.
Менеджер Virtual Network Manager позволяет создавать любое количество виртуальных сетей абстрагируясь от физической и управлять ими, в том числе и изолировать различные виртуальные среды. Для этих целей используется несколько технологий: dummy (без ограничений), firewall/iptables, ebtables, Open vSwitch, 802.1Q VLAN и VMware. Обеспечивается маршрутизация, Port forwarding, сервера DHCP, NTP и DNS.
Подсистема хранения образов дисков поддерживает несколько хранилищ SAN и NAS, с возможностью выбора политики уровня обслуживания (SLA) и характеристик для различных типов VM и пользователей. Для управления используется диспетчер Transfer Manager. Доступ к образам с любого узла кластера организован по протоколам SSH, NFS, SFTP, HTTP, GlusterFS, Lustre, iSCSI/LVM или их комбинаций. Этот список при необходимости можно расширить. Механизм горячего подключения дисковых разделов дает возможность добавлять к виртуальному окружению новые разделы или образы VM. Реализовано управление образами дисков, репозиторий шаблонов, позволяющий быстро создать новую VM, управление всем жизненным циклом VM (создание, запуск/останов, клонирование и т.п.) и учетными записями (пользователь, группа, роли ACL).
Возможно выделение ресурсов для совместного использования пользователями или группами. Облачную среду OpenNebula могут совместно использовать несколько организаций с делегированием полномочий и настройкой квот на любые ресурсы. Поэтому в случае излишков мощности можно без проблем сдавать ресурсы в аренду.
Поддерживается несколько типов учетных записей со своими привилегиями: администратор, обычный пользователь, публичный пользователь и пользователь определенного сервиса.
Реализована аутентификация на основе пароля, ключевых пар ssh rsa keypairs, сертификатов X509 или LDAP (возможна одновременная работа с несколькими LDAP серверами), а также специальные механизмы аутентификации для доступа интерфейсу управления и EC2/OCCI. Для обмена данными между серверами, OpenNebula использует протокол SSH с перенаправлением потоков ввода-вывода и авторизацией при помощи секретных ключей.
Все это позволяет создать гибкую адаптируемую и управляемую инфраструктуру, в которой все получают доступ только к отведенным ресурсам и функциями управления.
Для удобного управления виртуальными ресурсами и учетными записями используются несколько уровней абстракции. Так разные физические сервера объединяются в кластеры, позволяющие распределять и балансировать нагрузку. Несколько установок OpenNebula объединяют в зоны (oZones). Доступ к зонам организован через абстрактный дата-центр, который содержит собственный набор ресурсов (VM, виртуальные сети, образы и шаблоны VM) и учетные записи. Как кластеры, так и зоны могут охватывать один или несколько датацентров. Кроме того, используется концепция групп, каждая из которых может иметь индивидуальные установки и набор доступных ресурсов не пересекающихся с остальными.
Для размещения VM в дата-центре используется планировщик использующий одну из 4 политик (Data Center Placement Policies), регулирующие принцип выбора серверов и ресурсов (настраивается в /etc/oned/sched.conf). Например, при выборе политики packing, будет использовано минимальное число серверов для размещения VM, обеспечивая минимальную фрагментацию (переменная RUNNING_VMS). Политика striping указывает на равномерное распределение VM по имеющимся серверам, что гарантирует максимальное количество ресурсов (-RUNNING_VMS). При load-aware VM размещается на сервере с минимальной нагрузкой (FREE_CPU). И, наконец, политика custom для размещения использует вычисляемый вес — RANK (по умолчанию формула RUNNING_VMS * 50 + FREE_CPU).
Для администрирования элементами физической и виртуальной средами используются утилиты командной строки (onevm, onehost, oneuser, oneimage и т.д.) и веб-консоль OpenNebula Sunstone. Обычные пользователи могут использовать OCCI (Open Cloud Computing Interface) интерфейс – через консольные команды (occi-*) или более понятный веб-портал OpenNebula Self-Service, работающий поверх OCCI. Также для управления зонами предлагается портал OpenNebula Zones.
Консоли включают средства для развертывания виртуальных окружений, доступа к VM по VNC, управления образами и сетями, мониторинга (интегрирован Ganglia), контроля доступа, обеспечения безопасности, управления хранилищем и многое другое. Интегрированный в консоль сервис OpenNebula Marketplace позволяет искать и устанавливать преднастроенные виртуальные окружения подготовленные в рамках OpenNebula.
Также реализована система статистического учета для визуализации данных и отчетности по использованию ресурсов, позволяющие интегрировать с платежной системой и гарантировать справедливое распределение ресурсов между потребителями, ведется подробный журнал всех событий. Некоторые возможности доступны в виде модулей.
Интерфейс в настоящее время локализован не полностью.
OpenNebula состоит из нескольких компонентов:
Каждый компонент OpenNebula содержит определенные требования, все они достаточно хорошо расписаны в документации, которую также следует отметить особо.
Осталось добавить, что ядро написано на С++, утилиты управления написаны на Ruby и Shell.
Актуальной на момент написания этих строк является версия 4.0.1. Релиз имеет ряд улучшений и ориентирован на производственные среды, поэтому разработчики рекомендуют в любом случае обновиться. К слову все релизы называются в честь звездных туманностей (англ. nebula). Проект предлагает готовые пакеты для установки на 64 битные версии Ubuntu, Debian, openSUSE и RHEL/CentOS (для openSUSE и CentOS есть свой репозиторий), и исходные тексты при помощи которых можно установить OpenNebula в других дистрибутивах. Сам процесс установки любым способом не сложен, хотя именно в документации и Wiki расписан, как мне кажется, не очень подробно и возможно даже чуть запутано, а поэтому требует определенной внимательности. Для примера разберем установку и настройку OpenNebula на одну машину, как раз достаточно чтобы понять принципы и научиться работать. Настройка виртуального окружения хорошо расписана на многочисленных ресурсах в Интернет, поэтому этот момент пропущу.
Пакеты можно найти и в официальных репозиториях дистрибутивов, но не всегда самые актуальные.
$ sudo apt-cache show opennebula |
Также доступны образы для VMware и KVM, предлагается и доступ к демооблаку, где можно познакомиться с OpenNebula без установки. Что примечательно, размер установочных файлов небольшой, например deb пакет для Ubuntu занимает всего 2.5 Мб.
Для управления сетью следует создать мост на каждом хосте. Ставим пакет bridge-utils:
$ sudo apt-get install bridge-utils |
И создаем мост.
$ sudo nano /etc/network/interfaces …. auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.1.100 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-search example.com bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off $ sudo service networking restart |
Проверяем
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00e04d07c203 no eth0 |
Если сетевых карт несколько, то действия для каждой карты аналогичны.
Также обратите внимание на то, что хранилище образов находится в /var/lib/one/images, нужно позаботиться, чтобы места было достаточно.
Ставим пакеты для удовлетворения зависимостей (для каждой версии OpenNebula он свой, поэтому здесь могут быть уточнения):
$ sudo apt-get install libsqlite3-dev libxmlrpc-c3-dev g++ ruby libopenssl-ruby libssl-dev ruby-dev libxml2-dev libmysqlclient-dev libmysql++-dev libsqlite3-ruby libexpat1-dev rake rubygems libxml-parser-ruby1.8 libxslt1-dev genisoimage scons ruby-json ruby-sinatra thin1.8 lvm2 ruby-mysql ruby-password ruby-sequel curl make gcc g++ libsqlite3-dev libcurl4-openssl-dev |
Один компонент установим через gem.
$ sudo gem install nokogiri |
На узлах для доступа необходим SSH сервер.
$ sudo apt-get install openssh-server |
Для экспорта образов и настроек используется NFS.
$ sudo apt-get install nfs-kernel-server $ sudo nano /etc/exports /var/lib/one 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,anonuid=10000,anongid=1 0000) |
И перезапускаем сервер.
$ sudo service nfs-kernel-server start |
Все готово для установки OpenNebula. Скачиваем deb-пакет и ставим.
$ sudo dpkg -i Ubuntu-12.04-opennebula_x.x.x_amd64.deb |
Разработчики предлагают скрипт помогающий дополнительно установить некоторые модули для определенных ролей, его также лучше запустить для подстраховки (может, что-то изменилось).
$ sudo /usr/share/one/install_gems |
Затем необходимо будет выбрать дистрибутив и роль. Но очевидно install_gems рассчитан на тех, кто устанавливает при помощи исходных текстов. Ведь не установить deb-пакет OpenNebula — не получим скрипта, не установим зависимости, о которых говорилось выше — не станет сам пакет.
Кроме этого нам понадобится база MySQL, команды здесь стандартные:
$ sudo apt-get install mysql-server $ mysql -u root -p mysql> CREATE USER 'oneadmin'@'localhost' IDENTIFIED BY 'oneadmin'; mysql> CREATE DATABASE opennebula; mysql> GRANT ALL PRIVILEGES ON opennebula.* TO 'oneadmin' IDENTIFIED BY 'oneadmin'; mysql> quit; |
В процессе установки будет создана учетная запись пользователя и группа oneadmin с домашним каталогом /var/lib/one/ и сгенерирован RSA ключ (без пароля, он не нужен). Нам остается только задать пароль.
$ sudo passwd oneadmin |
В случае установки серверной части при помощи исходных текстов и на управляемых хостах все эти операции необходимо будет произвести вручную.
Важно: на всех узлах, пользователь и группа должны иметь один и тот же id.
$ id oneadmin uid=104(oneadmin) gid=111(oneadmin) groups=111(oneadmin) $ sudo groupadd -g 111 oneadmin $ sudo useradd -u 104 -m oneadmin -d /var/lib/one/ -s /bin/bash –g oneadmin |
Теперь регистрируемся как oneadmin и вводим ssh-keygen, оставляя все параметры по умолчанию.
В документации, также предлагается настроить переменные в ~/.bash_profile. В версии 3.6 при установке при помощи deb пакета, необходимости в этом не было, переменные устанавливались автоматически, поэтому приведу для примера.
Специфика OpenNebula состоит в том, что многие команды следует отдавать от имени пользователя oneadmin, при использовании sudo могут быть проблемы. Чтобы не было путаницы в дальнейшем все команды отданные от имени oneadmin будут помечены приглашением “oneadmin$”.
Регистрируемся как oneadmin.
$ su oneadmin oneadmin $ nano ~/.bash_profile export ONE_LOCATION=/var/lib/one export ONE_AUTH=$ONE_LOCATION/.one/one_auth export ONE_XMLRPC=http://localhost:2633/RPC2 export PATH=$ONE_LOCATION/bin:/usr/local/bin:/var/lib/gems/1.8/bin/:/var/lib/gems/1.8/:$PATH oneadmin$ source ~/.bash_profile |
Далее необходимо обеспечить возможность аутентификации по SSH без пароля, для этого копируем ключи и создаем ~/.ssh/config.
oneadmin$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys oneadmin$ cat ~/.ssh/config Host * StrictHostKeyChecking no |
Копируем каталог /var/lib/one/.ssh на каждый узел, после чего обязательно подключаемся к узлу, чтобы проверить, что соединение происходит без запроса пароля и узел добавлен в known host
oneadmin$ ssh example.org |
Имена всех узлов должны разрешаться через службу DNS, желательно их прописать в /etc/hosts.
После установки также образуется подкаталог ~/.one, в котором находятся файлы для авторизации. Если такого каталога нет, создаем вручную
oneadmin$ mkdir ~/.one |
Важный момент не описанный в документации, но с которым сталкиваются все кто ставит OpenNebula при помощи пакетов — нужно сбросить в базе пароль пользователя сгенерированный во время установки. Если этого не сделать, то в дальнейшем будем получать сообщение о невозможности аутентификации пользователя «User couldn’t be authenticated, aborting call». Для этой цели используем утилиту oneuser с параметром passwd, в качестве значений ей нужно передать ID пользователя и новый пароль. У oneadmin ID всегда равно 0.
$ oneuser passwd 0 p@ssw0rd |
Теперь прописываем пароль в открытом виде в файл ~/.one/one_auth иначе опять же «User couldn’t be authenticated, aborting call».
oneadmin$ echo "oneadmin:p@ssw0rd" > ~/.one/one_auth oneadmin$ chmod 600 ~/.one/one_auth oneadmin$ exit |
Открываем конфигурационный файл демона one, настроек в нем много (сетевые, хранение образов, мониторинг, журналирование, конфигурация драйверов и т.п.), но в большинстве их можно пока не трогать. Нас интересует только подключение к базе данных. Редактируем, используя готовый шаблон.
$ sudo nano /etc/one/oned.conf #DB = [ backend = "sqlite" ] DB = [ backend = "mysql", server = "localhost", port = 3306, user = "oneadmin", passwd = "oneadmin", db_name = "opennebula" ] |
Для запуска OpenNebula регистрируемся как oneadmin.
$ su oneadmin oneadmin$ one stop oneadmin$ one start |
Запускаем любую команду, вывод не должен содержать ошибок. Например.
oneadmin$ onevm list |
В случае проблем следует обратиться к журналу, который находится в
/var/log/one, в oned.log и sched.log. В частности введя “cat /var/log/one/oned.log” получим листинг конфигурационного файла и сообщения о запуске тех или иных параметров.
Добавить новый узел можно при помощи команды:
onehost create <hostname> --im <im_mad> --vm <vmm_mad> kvm --net dummy </vmm_mad></im_mad></hostname> |
где im_mad — information драйвер используемый для мониторинга узла,
vmm_mad — virtualization драйвер для управления узлом. Все возможные установки расписаны в oned.conf.
Добавляем.
oneadmin$ onehost create example.org --im im_kvm --vm vmm_kvm --net dummy oneadmin$ onehost list |
Должны получить список параметров, статус узла помечается как ON.
Более подробную информацию по конкретному узлу покажет команда «onehost show
Учетные записи пользователей получаем такой командой.
oneadmin$ oneuser list ID NAME GROUP AUTH VMS MEMORY CPU 0 oneadmin oneadmin core - - - |
Но вероятнее кому-то все эти операции при использования веб-интерфейса покажутся проще и наглядней.
Настройки OpenNebula Sunstone указаны в /etc/one/sunstone-server.conf, который вообщем понятен и хорошо расписан в документации. Можно вообще ничего не трогать, просто запустить сервис.
oneadmin$ sunstone-server start |
Ошибки если таковые будут можно найти в /var/log/one/sunstone.log и sunstone.error.
В настройках по умолчанию Sunstone слушает 9869 порт, подключаемся к нему браузером и вводим логин/пароль oneadmin. Интерфейс сложным назвать нельзя, разобраться с ним проблем не будет, даже не смотря на отсутствие локализации. После регистрации пользователь попадает в Dashboard в котором показывается общая статистика по системе. Нажав кнопку «+» рядом можно настроить интерфейс (установить русский и включить SSL). Далее просто перемещаемся по меню. В System настраиваются учетные записи групп, пользователей и ACL. В Virtual Resources – виртуальные машины, образы и шаблоны образов. Управление виртуальной сетью, системами хранения, кластерами и хостами производится в Infrastructure. И наконец перейдя в MarketPlace можем скачать несколько готовых образов. По умолчанию производится анонимный доступ, но есть учетная запись в MarketPlace, соответствующие данные следует прописать в sunstone-server.conf.

Чтобы пользователи могли управлять VM, необходимо запустить сервис OCCI. Все настройки производятся в /etc/one/occi-server.conf, по умолчанию доступ возможен только с localhost, поэтому правим.
$ sudo nano /etc/one/occi-server.conf #:host: 127.0.0.1 :host: 0.0.0.0 :port: 4567 |
Остальное можно пока не трогать. Запускаем.
oneadmin$ occi-server start |
Для управления предлагается набор утилит “occi-*”, например список устройств хранения можно получить так.
oneadmin$ occi-storage list |
Открыв браузер на странице http://example.org:4567/ui получим доступ к веб-интерфейсу OpenNebula Self-Service, его возможности во многом совпадают с Sunstone.

Аналогично активируется сервис OpenNebula Zones, параметры которого прописаны в /etc/one/ozones-server.conf.



Конечно в рамках статьи просто невозможно показать все стороны такого мощного и гибкого инструмента как OpenNebula, но здесь опять отправляю к документации проекта, которая во многом помогает.
Анонсирован майский номер № 5 (126) журнала Системный Администратор за 2013 год.
Новый выпуск электронного приложения «Open Source» к журналу «Системный администратор» — «Open Source №130 (21.05.2013).
В этом выпуске:
Выпуск на сайте:
Подписчики уже сейчас могут скачать выпуск «Open Source» на сайте издания. Бесплатный доступ к нему для всех будет автоматически открыт через месяц.
Любой системный администратор рано или поздно сталкивается с необходимостью сбора статистики по расходованию трафика, используя которую, он всегда сможет ответить на вопросы начальства: кто, на какие адреса, когда и сколько. Для решения этой задачи сегодня создано множество решений и технологий, наиболее популярным из них является NetFlow.
Сетевой протокол NetFlow изначально разрабатывался Cisco (goo.gl/vM2l7) для технологии коммутации пакетов в устройствах этой корпорации, но сегодня используется, в основном, для учета трафика. Его спецификации открыты, поэтому со временем NetFlow стал стандартом и применяется не только в Cisco, но и решениях других фирм (вроде Juniper и Enterasys) и ОС.
На сегодня известно несколько версий. Протокол NetFlow v1, созданный в 1990 году, использовался в маршрутизаторах для коммутации пакетов, когда первый пакет потока создавал запись в таблице маршрутизации (по сути кэш), которая затем применялась ко всему потоку. Примерно такая же технология сегодня задействуется и в Netfilter. Последней на сегодня является девятая версия протокола, вышедшая в октябре 2004 года и описанная в RFC 3954. На основе v9 с несколькими расширениями был создан протокол IPFIX (IP Flow Information Export, RFC 3917), который в кулуарах называют NetFlow v10. При этом v2-4 являются внутренней реализацией Cisco, не получившей большого распространения. Поэтому после первой версии сразу появилась наиболее популярная v5, возможностей которой достаточно для большинства задач в IPv4 сетях. Сетевой трафик анализируется на уровне сеансов, запись (flow record) создается для каждой транзакции TCP/IP. В v5 сохраняются данные о версии протокола, интерфейсах, времени начала и окончания соединения, IP и портах источника и назначения, количестве байт и пакетов, TOS и TCP флаги. Девятая версия понимает заголовки IPv6, метки потоков MPLS, адрес шлюза BGP и дополнительные поля. Например, в Cisco ASA NetFlow используется для динамического отслеживания потоков. Чтобы выявить различные события, как раз и задействуются специальные поля v9 (Netflow Security Event Loging, NSEL), которые затем сопоставляются с шаблонами.
Для сбора и последующего анализа информации о трафике по протоколу NetFlow требуется наличие следующих компонентов:
Можно установить комплексное решение, когда разработчик предлагает все три компоненты, или собрать свой вариант — сенсор + коллектор + анализатор. В последнем случае следует учитывать совместимость форматов коллектор – анализатор, хотя некоторые проекты предлагают свои конвертеры из одного формата в другой.
В перегруженных сетях возможна потеря UDP пакетов, а UDP не информирует о необходимости повтора, это может исказить статистику, особенно учитывая, что сенсор не хранит сброшенные данные. Эта проблема особенно актуальна для v8 и v9, где в один пакет может быть объединена информация о нескольких потоках. В этом случае некоторые реализации позволяют использовать SCTP. Хотя этот протокол тоже неидеален, так как требует взаимодействия между коллектором NetFlow и каждым сенсором NetFlow. В случае если коллектор обслуживает большое количество сенсоров, могут быть задержки и, опять же, потери. Также использование UDP предпочтительнее, когда сенсор завязан на несколько коллекторов, ведь UDP очень просто реплицировать. Для этих целей можно использовать программу вроде samplicator (code.google.com/p/samplicator), отправляющую копии UDP на несколько адресов. Кроме этого, ретранслировать полученные данные могут и некоторые коллекторы. Кстати, по номерам пакетов коллектор может определить, что информация пропущена, и учитывать это в своих расчетах.
Протокол TCP, в силу своей специфики, не подходит для передачи такого объема данных, так как будут возникать задержки из-за установления связи и сбора всех пакетов (потребуется также выделить некоторый буфер, что также повлечет затраты).
В некоторых маршрутизаторах, работающих на высоконагруженных магистралях, используется упрощенная реализация Sampled NetFlow, когда считаются не все пакеты, а некоторые, через определенный промежуток (в разных реализациях свой алгоритм). Нетрудно догадаться, что Sampled NetFlow показывает не точную, а приблизительную статистику, хотя для некоторых задач этого вполне достаточно.
Поддержка сенсоров NetFlow сегодня реализована во многих аппаратных маршрутизаторах, прошивках DD-WRT и ОС. Например, в анонсированном недавно VMware vSphere 5 появилась поддержка Netflow v5, предоставляющая возможность просматривать трафик между виртуальными машинами на одном или разных хостах. Отслеживая поток трафика приложений внутри виртуальной машины, админ может контролировать производительность сети и целевое использование трафика. Для Cisco активация NetFlow для передачи на коллектор 192.10.0.2:9001 очень проста:
router(config)# interface fastethernet 0/0 router(config)# ip route-cache flow router(config)# ip flow-export version 5 origin-as router(config)# ip flow-export 192.10.0.2 9001 router(config)# ip flow-cache timeout active 5 |
Вот далеко не все варианты NetFlow-сенсоров, при помощи которых можно собирать статистику в разных ОС:
Если в сети уже есть работающий маршрутизатор, выдающий NetFlow, эту часть статьи можно пропустить. Мы же предположим, что у нас настроен роутер на Ubuntu/Debian, и мы хотим собирать статистику.

$ sudo apt-get install fprobe |
В процессе установки пакета будут заданы вопросы относительно интерфейса для сбора статистики и хоста коллектора (нужно указать IP-адрес и номер порта). После чего стартует демон с указанными настройками. В последующем все параметры можно изменить в файле /etc/default/fprobe:
$ sudo nano /etc/default/fprobe # Если все интерфейсы, тогда пишем "any" INTERFACE="eth0" FLOW_COLLECTOR="192.10.0.2:9001" # Дополнительные аргументы; так '-f' позволяет указать специфические условия выборки трафика; наиболее популярным является отбор только IP-пакетов, т.е. '-fip' OTHER_ARGS="-fip" |

Аргументов у fprobe очень много, в высоконагруженных сетях возможно потребуется корректировка приоритета (установкой r больше 0), буфера ядра для захвата пакетов (B и q), задержки между отправками (t). Теперь при помощи tcpdump можно просмотреть отправляемые на удаленную систему пакеты.
$ sudo tcpdump -n udp port 9001 |

Для удобства можно использовать фильтр для отлова только NetFlow «-T cnfp«. Также просто настраивается и Softflowd. Все, информация пошла, но пока «в никуда», самое время начать ее собирать.
Выбор связки коллектор + анализатор дело ответственное и зависит от необходимости в дальнейшей обработке данных и их визуализации. Самым известным коллектором является пакет flow-tools, разрабатываемый Марком Фуллмером и содержащий массу полезных инструментов, с помощью которых можно обрабатывать собранную информацию. Вместе с flow-tools можно использовать несколько анализаторов — Perl-скрипт flowscan (caida.org/tools/utilities/flowscan), обрабатывающий полученные flow-capture (коллектор NetFlow из пакета flow-tools) данные и сохраняющий итог в базе данных RRD. Для визуализации flowscan может использовать дополнительные модули отчетов: CUFlow, CampusIP, SubNetIO. Это очень интересный вариант, но мне больше нравится nfdump (nfdump.sf.net), поддерживающий NetFlow v1/v5/v7/v9 и IPFIX (пока бета), для просмотра собранной информации которого используют фронтэнд NfSen (Netflow Sensor, nfsen.sf.net). Причем доступна и NSEL версия nfdump, поддерживающая дополнительные записи Cisco ASA.
Сам nfdump представляет собой пакет из нескольких утилит: nfcapd (демон, читающий поток и сохраняющий информацию в файл), nfdump (считывает данные из файла и выводит статистику), nfprofile (считывает данные из файла и применяет к ним фильтры, информацию сохраняет в другой файл для дальнейшего использования), nfreplay (считывает данные из файла и отправляет по сети на удаленную систему/коллектор), nfclean.pl (удаление старых данных), ft2nfdump (конвертер данных flow-tools в формат nfdump).
По умолчанию демон nfcapd каждые 5 минут создает файл с новым именем (включает метку времени, чтобы не повторяться), который затем анализируется nfdump. Нужный пакет есть в репозитарии, поэтому установка nfdump в Ubuntu/Debian очень проста.
$ sudo apt-get install nfdump |
Работу nfcapd и nfdump в большинстве случаев настраивают через NfSen. Именно поэтому все демоны пакета nfdump по умолчанию не стартуют, в чем легко убедиться, заглянув в /etc/default/nfdump:
$ cat /etc/default/nfdump # nfcapd is controlled by nfsen nfcapd_start=no |
Но для начала удостоверимся, что все работает. Запускаем демон для сбора nfcapd статистики, в качестве параметра указываем каталог для хранения файлов и UDP порт:
$ sudo nfcapd -w -D -l /var/cache/nfdump/router1 -p 9001 |
Если адресов несколько, а нужно выбрать один, указываем нужный при помощи ‘-b‘. Параметр «-R host/port» позволяет сразу переправить NetFlow пакеты на другой узел. При помощи параметра ‘-p’ можно считывать данные не из сети, а из pcap файла.
Чтобы прочитать и вывести таблицу со всеми собранными данными при помощи nfdump, достаточно указать каталог:
$ sudo nfdump -R var/cache/nfdump/router1 Date flow start Duration Proto Src IP Addr:Port Dst IP Addr:Port Packets Bytes Flows 2012-07-05 10:09:12.112 0.001 UDP 22.22.22.22:1234 -> 192.10.19.10:22 1 400 1 |
На первый взгляд, информации немного, но это если не знать, что nfdump умеет выводить информацию в четырех разных форматах (line, long, extended и custom), а по умолчанию используется самый «молчаливый» line. Чтобы изменить формат, следует использовать параметр ‘–o’. Утилита nfdump имеет большое количество параметров и фильтров, позволяющих отобрать нужную информацию, все это описано в «man nfdump», поэтому подробно останавливаться здесь не будем.
Переходим к настройке NFSen. В репозитариях нужного пакета нет, поэтому установку нужно производить вручную. Само приложение написано на PHP и Perl, для построения графиков используется RRDtool. Для его работы потребуется стандартный LAMP сервер и Perl модули Mail::Header и Mail::Internet. Устанавливаем приложения для удовлетворения зависимостей:
$ sudo apt-get install apache2 libapache2-mod-php5 \ php5-common libmailtools-perl rrdtool librrds-perl |
Скачиваем и распаковываем последнюю версию.
$ wget -c http://goo.gl/CYk4s $ tar xzvf nfsen-1.3.6p1.tar.gz $ cd nfsen-1.3.6p1 |
Переименовывем и правим шаблон конфигурационного файла. В начале файла идет много переменных, указывающих на каталоги установки, в большинстве случаев нет необходимости их изменять.

$ cp etc/nfsen-dist.conf etc/nfsen.conf $ nano etc/nfsen.conf $BASEDIR = "/usr/nfsen"; # Каталог, в который будет установлены скрипты $HTMLDIR = "/var/www/nfsen/"; # Каталог, в который установлены утилиты пакета nfdump $PREFIX = '/usr/bin'; # Пользователь и группа, от имени которых запускается веб-сервер $USER = "www-data"; $WWWUSER = "www-data"; $WWWGROUP = "www-data"; # Источники, можно указать несколько, для выделения разным цветом используется параметр "col" %sources = ( 'ROUTER1' => { 'port' => '9001', 'col' => '#0000ff', 'type' => 'netflow' }, ); $MAIL_FROM = 'admin@example.com'; $SMTP_SERVER = 'smtp.example.com'; |
Кроме этого, в файле можно установить буфер для nfcapd, расширения для каждого коллектора, настроить каталоги для сбора данных и многое другое. Ставим.
$ sudo ./install.pl etc/nfsen.conf |
Скрипт проверит наличие необходимых Perl-модулей, после чего скопирует компоненты по указанным в nfsen.conf каталогам. Запускаем nfsen, он активирует процессы nfcapd:
$ sudo /usr/nfsen/bin/nfsen start |
Обеспечиваем автозагрузку:
$ sudo ln -s /usr/nfsen/bin/nfsen /etc/init.d/nfsen $ sudo update-rc.d nfsen defaults 20 |
Создаем настройки для Apache:
$ sudo nano /etc/apache2/conf.d/nfsen.conf <directory /var/www/nfsen/> DirectoryIndex nfsen.php |
Теперь набираем в браузере адрес http://имя_сервера/nfsen/nfsen.php и наслаждаемся генерируемыми графиками и собранной статистикой. Интерфейс позволяет при помощи фильтров и запросов отобрать информацию только по определенным протоколам, IP-адресам, портам и т.д. По умолчанию используется для всего профиля «any», для вывода графиков «proto TCP».

Возможности NFsen расширяются при помощи плагинов (sf.net/apps/trac/nfsen-plugins). Для установки плагина его нужно распаковать в подкаталог plugins, а затем подключить в nfsen.conf, взяв за пример имеющиеся там шаблоны.
Например, чтобы отследить только SSH трафик, пишем «src or dst port 22«, при необходимости можно указать IP и прочие параметры. Изначально используется только один профиль — Live, в который записываются данные со всех источников, указанных в nfsen.conf. Чтобы построить графики для различных источников или критериев, следует создать соответствующие профили (Live -> New Profile).

Вот мы и построили систему статистики, которая будет обеспечивать тебя полноценной информацией по расходу трафика.
Новый выпуск электронного приложения «Open Source» к журналу «Системный администратор» — «Open Source №129 (26.04.2013).
В этом выпуске:
Выпуск на сайте:
Подписчики уже сейчас могут скачать выпуск «Open Source» на сайте издания. Бесплатный доступ к нему для всех будет автоматически открыт через месяц.