Table of Contents

Установка и настройка nfsen и nfdump

Введение

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

Для сбора информации по netflow нужно настроить три компонента:

  1. Сенсор – это сетевое устройствое на котором настраивается какой именно трафик будет собран и отправлен в коллектор.
  2. Коллектор – это сервер который принимает и хранит полученные данные.
  3. Анализатор – это ПО которое позволяет делать различные запросы к накопленным данным. С помощью анализатора можно посчитать объем, посмотреть какой трафик проходил и т.д.

Nfsen - это коллектор и анализатор с web интерфейсом.
Nfdump - это анализатор который использует Nfsen, так же nfdum-ом можно самому делать запросы к netflow данным из cli.


Задача

Есть основной “железный” сервер (flow1), с большим объемом дисков, на который пограничные маршрутизаторы отправляют netflow данные. Сервер flow1 стоит в локальной сети за файрволом (pix) в котором сделан статический нат между внутренним и внешним ip адресом.
На случай гибели flow1 надо подготовить резервный сервер flow2.
Сервер flow2 это ВМ на которой установлена и настроена связка nfsen+nfdump. Netflow данные будут складываться на отдельный LVM раздел который в случае необходимости можно будет расширить. Начальный размер LVM раздела примерно равняется месячному объему netflow данных. Будет достаточно времени, что бы разобраться с flow1.
Переключение между flow1 и flow2 будет производиться на pix путем правки правил статического ната. Править настройки на newtflow сенсорах не нужно.

Схема решения:


Подготовка раздела под netflow данные

Сделаем:

Создание логического тома LVM

Смотрим на имеющиеся в системе диски, нас интересует /dev/sdb.

[root@flow2 ~]# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
...
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Помечаем диск sdb как физический том (PV, physical volume).

[root@flow2 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

Работу с LVM начинаем с инициализации.
Команда vgscan ищет группы томом (VG, volume group) на всех PV, а команда vgchange -ay активирует найденный VG.
В нашем случае VG еще нет, поэтому вывод команды vgscan будет пустой.

[root@flow2 ~]# vgscan 
  Reading all physical volumes.  This may take a while...

Командой vgcreate, из целого диска /dev/sdb, делаем VG с названием flow2.
После еще раз сканируем диски на наличие VG и активируем только что созданную VG flow2.

[root@flow2 ~]# vgcreate flow2 /dev/sdb
  Volume group "flow2" successfully created
[root@flow2 ~]# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "flow2" using metadata type lvm2
[root@flow2 ~]# vgchange -ay flow2
  0 logical volume(s) in volume group "flow2" now active

Смотрим на созданный VG.

[root@flow2 ~]# vgdisplay 
  --- Volume group ---
  VG Name               flow2
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               20,00 GiB
  PE Size               4,00 MiB
  Total PE              5119
  Alloc PE / Size       5119 / 20,00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               qy0gI5-Ft4o-i3TK-ATcJ-WgCu-gNaF-J6F8XQ

Командой lvcreate cоздаем логический том (LV, logical volume) “data” размером в 100% от размера VG flow2.

[root@flow2 ~]# lvcreate -n data -l100%FREE flow2
  Logical volume "data" created.

Смотрим на LV.

   
[root@flow2 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/flow2/data
  LV Name                data
  VG Name                flow2
  LV UUID                ez85OV-1CT1-M0iI-f1Lr-x1IR-5xFW-f0SoOg
  LV Write Access        read/write
  LV Creation host, time flow2.company.name, 2017-07-07 16:24:16 +0300
  LV Status              available
  # open                 1
  LV Size                20,00 GiB
  Current LE             5119
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

Форматирование логического тома LVM

Форматируем LV data под ext4.

Смотрим на диски.

[root@flow2 ~]# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
...
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mapper/flow2-data: 21.5 GB, 21470642176 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Форматируем LV data (/dev/flow2/data) под ext4.

[root@flow2 ~]# mkfs.ext4 /dev/flow2/data 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241856 blocks
262092 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Монтирование логического диска LVM

Монтируем диск /dev/mapper/flow2-data в /data.

[root@flow2 /]# mkdir /data
[root@flow2 /]# mount /dev/flow2/data /data
[root@flow2 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             4,8G  1,4G  3,2G  30% /
tmpfs                 250M     0  250M   0% /dev/shm
/dev/mapper/flow2-data 20G   44M   19G   1% /data

Правим fstab, записываем инфомацию о блочном устройстве /dev/mapper/flow2-data.

[root@flow2 ~]# cat /etc/fstab
...
/dev/mapper/flow2-data 	/data	ext4    defaults 	0 0

Установка nfdump

Nfdump ставится через yum командой yum install nfdump

[root@flow2 ~]# yum install nfdump
...
Resolving Dependencies
--> Running transaction check
---> Package nfdump.i686 0:1.6.11-1.el6 will be installed
--> Finished Dependency Resolution

Установка nfsen

Последняя версия nfsen 1.3.8 на Centos6 не запускается, надо ждать когда пофиксят. Пока будем ставить 1.3.6p.

Доставляем пакетов.

# yum install httpd php perl perl-TimeDate perl-Pod-Escapes perl-Pod-Simple perl-Test-Pod perl-MailTools libdbi lua net-snmp-utils perl-rrdtool gcc make flex rrdtool-devel byacc perl-Socket6

Скачиваем и разархивируем nfsen.

[root@flow2 src]# cd ~/src
[root@flow2 src]# wget https://downloads.sourceforge.net/project/nfsen/stable/nfsen-1.3.6p1/nfsen-1.3.6p1.tar.gz
[root@flow2 src]# tar -zxvf nfsen-1.3.6p1.tar.gz

Правим файл конфигурации nfsen.conf прямо в разархивированных файлах.
Меняем путь до nfdump пользователя и группу веб сервера.

[root@flow2 src]# cd nfsen-1.3.6p1/etc/
[root@flow2 etc]# ll
total 36
-rw-r--r-- 1 943 501 9388 Янв 14 2012 nfsen-dist.conf
[root@flow2 etc]# cp nfsen-dist.conf nfsen.conf
[root@flow2 etc]# vi nfsen.conf
...
## nfdump tools path
#$PREFIX = '/usr/local/bin';
$PREFIX = '/usr/bin';
...
# user and group of the web server process
# All netflow processing will be done with this user
#$WWWUSER = "www";
#$WWWGROUP = "www";
$WWWUSER = "apache";
$WWWGROUP = "apache";

Создаем пользователя netflow и в файде /etc/group добавляем его в группу apache.

[root@flow2 etc]# useradd -M -s /sbin/nologin netflow 

Запускаем установку.

[root@flow2 etc]# cd ~/src/nfsen-1.3.6p1/
[root@flow2 nfsen-1.3.6p1]# ./install.pl etc/nfsen.conf

Процесс установки nfsen

Процесс установки nfsen

[root@flow2 nfsen-1.3.6p1]# ./install.pl etc/nfsen.conf
Check for required Perl modules: All modules found.
Setup NfSen:
Version: 1.3.6p1: $Id: install.pl 53 2012-01-23 16:36:02Z peter $
Perl to use: [/usr/bin/perl]
Setup php and html files.
mkdir /var/www/nfsen/
Copy NfSen dirs etc bin libexec plugins doc ...
Copy config file 'etc/nfsen.conf'
In directory: /data/nfsen/libexec ...
Update script: AbuseWhois.pm
Update script: Log.pm
Update script: Lookup.pm
Update script: NfAlert.pm
Update script: Nfcomm.pm
Update script: NfConf.pm
Update script: NfProfile.pm
Update script: NfSen.pm
Update script: NfSenRC.pm
Update script: NfSenRRD.pm
Update script: NfSenSim.pm
Update script: Nfsources.pm
Update script: Nfsync.pm
Update script: Notification.pmIn directory: /data/nfsen/bin ...
Update script: nfsen
Update script: nfsend
Update script: RebuildHierarchy.pl
Update script: testPlugin
Cleanup old files ...
Setup diretories:
Use UID/GID 500 48
Creating: mkdir /data/nfsen/var
/data/nfsen/var
Creating: mkdir /data/nfsen/var/tmp
/data/nfsen/var/tmp
Creating: mkdir /data/nfsen/var/run
/data/nfsen/var/run
Creating: mkdir /data/nfsen/var/filters
/data/nfsen/var/filters
Creating: mkdir /data/nfsen/var/fmt
/data/nfsen/var/fmt
Creating: mkdir /data/nfsen/profiles-stat
/data/nfsen/profiles-stat
Creating: mkdir /data/nfsen/profiles-stat/live
/data/nfsen/profiles-stat/live
Creating: mkdir /data/nfsen/profiles-data
/data/nfsen/profiles-data
Creating: mkdir /data/nfsen/profiles-data/live
/data/nfsen/profiles-data/live
Profile live: spool directories:
Creating: mkdir /data/nfsen/profiles-data/live/peer2
peer2
Creating: mkdir /data/nfsen/profiles-data/live/upstream1
upstream1
Creating: mkdir /data/nfsen/profiles-data/live/peer1
peer1
Rename gif RRDfiles ... done.
Create profile info for profile 'live'
Rebuilding profile stats for './live'
Unable to create graph: No such file or directory
...
Reconfig: No changes found!
Setup done.
* You may want to subscribe to the nfsen-discuss mailing list:
* http://lists.sourceforge.net/lists/listinfo/nfsen-discuss
* Please send bug reports back to me: phaag@sourceforge.net


В /etc/init.d/ создаем скрипт запуска nfsen.

#!/bin/bash
#
# chkconfig: - 50 50
# description: nfsen
DAEMON=/data/nfsen/bin/nfsen
case "$1" in
start)
$DAEMON start
;;
stop)
$DAEMON stop
;;
status)
$DAEMON status
;;
restart)
$DAEMON stop
sleep 1
$DAEMON start
;;
*)
echo “Usage: $0 {start|stop|status|restart}”
exit 1
;;
esac
exit 0

Делаем его исполняемым.

[root@flow2 init.d]# chmod +x nfsen

Запускаем nfsen

[root@flow2 init.d]# /etc/init.d/nfsen start
Starting nfcapd:(upstream1)[2053] (peer1 peer2)[2056]
Starting nfsend.

Настройки vhost.conf.

[root@flow1 conf.d]# cat vhost.conf
<VirtualHost *:80>
     ServerAdmin noc@company.name
     DocumentRoot /var/www/nfsen
     ServerName nfsen.company.name
     ErrorLog logs/nfsen_err_log
     CustomLog logs/nfsen_acc_log common
</VirtualHost>

На этом настройка завершена, осталось в iptables открыть все нужные порты для веб-интерфеса и netflow данных.


Полезные ссылки