Краткое описание пакета flow-tools
Netflow очень популярен в сетевом мире, с одной стороны из за того что это один из двух основных методов получения детальной статистики с роутеров cisco (второй метод это ip accounting но он дает гораздо меньшую детализацию), с другой стороны, под так любимые все в том же сетевом мире OS xxxBSD и Linux которые часто используют для роутинга есть программы способные выдавать с них информацию о проходящих пакетах по netflow. Примерами таких програм являются ipcad, fprobe, fprobe-ng, fprobe-ulog, в freebsd так же помоему есть netgraph модуль для этих целей, а посему почему бы не использовать это для снятия статистики и учета? в том числе и денег:)
Принцип работы netflow прост – есть netflow exporter и netflow collector. exporter это то что тем или иным способом снимает информацию о прохождении пакетов через роутер, далее exporter отсылает эту информацию по udp на колектор, никаких подтверждений о посылке/приеме не предусмотрено поэтому если посылка не удалась данные теряются, исходя из этого необходимо предусмотреть надужную связь между экспортером и коллектором, колектор же это программа как правило на nix машине которая слушает определенный порт в ожидании посылок от экспортера, при приходе оной колектор обрабатывает и записывает эти данные. колекторов и экспортеров много разных, настройку экспортеров я рассмтаривать не буду, а рассмотрю работу с одним из колекторов – flow-tools.
Учтановка и настройка netflow коллектора
Вся установка будет производится на сервере с CentOS 6.7. Для начала добавляем репозиторий EPEL
rpm -ihv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Дальше стандартная установка
yum install flow-tools
Добавляем в автозагрузку
chkconfig flow-capture on
Настраиваем параметры запуска коллектора flow-capture, для этого правим файл /etc/sysconfig/flow-capture под свои нужды,
# Change the source IP and port to what is used on your network OPTIONS="-n 287 -N 0 -w /var/flow-tools -S 5 0/0/9995"
Здесь:
-n-количество ротаций файлов с записями о соединениях в сутки, по умолчанию 297 что равно каждые 5 минут, тоесть по прошествии каждых 5 минут создается новый файл и поступающие данные пишутся в него, работает на самом деле странновато в том плане что поидее если поставить 1 то по идее должен бы получаться 1 файл в сутки, однако на практике получается 2, с 0 получается как раз 1
-N-так называемый nesting_level, определяет структуру директорий которая будет создаваться при записи файлов с соединениями
Configure the nesting level for storing flow files. The default is 0. -3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file -2 YYYY-MM/YYYY-MM-DD/flow-file -1 YYYY-MM-DD/flow-file 0 flow-file 1 YYYY/flow-file 2 YYYY/YYYY-MM/flow-file 3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file
-w- дирректория куда будет складываться статистик neflow.
-S 5- каждые 5 минут колектор будет скидывать статистику о своей работе в лог, самое интересное там это количество потеряных посылок которые не дошли до коллектора
0/0/9995- по порядку – адрес на котором колектор будет принимать netflow, адрес с которого колектор будет принимать netflow и порт на который колектор будет принимать netflow, если первый заменить на 0 то колектор будет принимать на любой адрес из доступных интерфейсов, если второй заменить на 0 то соответсвенно будет принимать netflow данные с любых адресов, этого делать не рекомендуется по одной простой причине – netflow не имеет никаких средств авторизации а посему если адрес на котором колектор ждет netflow доступен кому то еще то он может послать ложные данные, учитывая то что netflow данные могут использоваться как для расчетов так и выявления сетевых проблем и аномалий то лучше обезопаситься и задать все жестко.
Создадим директорию для логов:
mkdir -p /var/log/flow
И запускаем коллектор
service flow-capture start
На всякий случай убеждаемся что коллектор слушает нужный порт:
netstat -lpnu|grep flow-capture
В случае если всё хорошо — вывод будет выглядеть примерно вот так:
udp 0 0 192.168.0.252:9995 0.0.0.0:* 3062/flow-capture
Если же коллектор не запустился — внимательно проверьте его настройки. Через некоторое время в указанной директории начнут собираться логи. Остаётся только написать скрипты для генерации отчётов на основе эти логов. Создадим директорию /etc/scripts/flows, все дальнейшие действия мы будем производить в ней:
mkdir /etc/scripts/flows
Создадим файл flow.acl, в котором опишем необходимые нам спискидоступа, этот файл потом будет использоваться утилитой flow-filter:-filter:
ip access-list standard localnet permit 192.168.0.0 0.0.0.255 ip access-list standard localnet deny any ip access-list standard internet deny 192.168.0.0 0.0.0.255 ip access-list standard internet permit any
Здесь список localnet описывает адресное пространство локальной сети, а список internet описывает адресное пространство, трафик с которого мы будем считать. Если какие-то адреса нужно внести в «бесплатную зону» — их нужно добавить в список internet с директивой deny (По аналогии с адресным пространством локальной сети).
Следующим шагом создадим файл report.conf, который будет использоваться утилитой flow-report:
stat-report localnet type ip-destination-address output format ascii options +header,+xheader,+totals fields -flows,-packets,-durationstat stat-definition localnet report localnet