Voipnotes
Услуги
  • 3CX Phone System
    • Купить IP АТС - 3CX Phone System
Ещё
    Задать вопрос
    +7 (499) 113-65-73
    Заказать звонок
    sale@voipnotes.ru
    г. Москва 2-й Михайловский проезд 9
    +7 (499) 113-65-73
    Заказать звонок
    Voipnotes
    Услуги
    • 3CX Phone System
      • Купить IP АТС - 3CX Phone System
      Voipnotes
      Услуги
      • 3CX Phone System
        • Купить IP АТС - 3CX Phone System
        Voipnotes
        Voipnotes
        • Услуги
          • Назад
          • Услуги
          • 3CX Phone System
            • Назад
            • 3CX Phone System
            • Купить IP АТС - 3CX Phone System
        • +7 (499) 113-65-73
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        • Главная
        • Блог
        • Ловим NetFlow при помощи Nfdump и Nfsen

        Ловим NetFlow при помощи Nfdump и Nfsen

        18 Июня 2015

        NetFlow — сетевой протокол, предназначенный для учёта сетевого трафика, разработанный компанией Cisco Systems. Является фактическим промышленным стандартом и поддерживается не только оборудованием Cisco, но и многими другими устройствами (в частности, Juniper, MikroTik и Enterasys). Также существуют свободные реализации для UNIX-подобных систем.

        Существует несколько версий протокола, наиболее распространёнными из которых на 2011 год являются версии 5 и 9. На основе версии 9 также был разработан открытый стандарт под названием IPFIX (Internet Protocol Flow Information eXport, экспорт информации о потоках IP).

        Для сбора информации о трафике по протоколу NetFlow требуются следующие компоненты:

        Сенсор. Собирает статистику по проходящему через него трафику. Обычно это L3-коммутатор или маршрутизатор, хотя можно использовать и отдельно стоящие сенсоры, получающие данные путем зеркалирования порта коммутатора.

        Коллектор. Собирает получаемые от сенсора данные и помещает их в хранилище.

        Анализатор. Анализирует собранные коллектором данные и формирует пригодные для чтения человеком отчёты (часто в виде графиков).

        От теории перейдем к практике.

        Исходные данные: сервер Ubuntu 14.10, коммутатор Cisco. На Cisco настроена передача NetFlow в сторону Ubuntu по 9-й версии протокола.

        Для сбора NetFlow была выбрана связка NFDump(Netflow Dump) и NFSen(Netflow Sensor). NFDump будет играть роль коллектора, а NFSen будет играть роль анализатора. В отличие от многих своих конкурентов, данная связка поддерживает 9-ю версию протокола и периодически обновляется. Подробное описание программы можно прочитать на официальном сайте: NFDump, NFSen.

        Необходимые зависимости:

        1) PHP и Perl:

        NfSen написан на PHP и Perl и должен работать на *NIX системах.

        Рекомендованные версии Perl 5.6.0 и PHP выше 4.1.

        2) Perl Modules:

        Для NfSen необходима установка следующих Perl модулей:

        Mail::Header, Mail::Internet

        3) RRD tools

        Для всех графиков NfSen необходим пакет RRD.

        Перейдем к установке:

        1) Делаем апдейт системы.

        sudo apt-get update

        2) Ставим зависимости.

        sudo apt-get install apache2 perl libapache2-mod-php5 libmailtools-perl gcc flex bison librrd-dev rrdtool librrds-perl php5-common libio-socket-ssl-perl libtool build-essential mrtg php5

        В Ubuntu RRD ставится из пакетов.

        Если установка ведется не в Ubuntu, то лучше поставить RRD из исходных кодов. Делается это следующими командами:

        cd /usr/src
        sudo wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.5.3.tar.gz
        sudo tar xzfv rrdtool-1.5.3.tar.gz
        cd rrdtool-1.5.3.tar.gz/
        sudo ./configure -prefix=/usr/local/rrdtool -disable-tcl
        sudo make
        sudo make install

        3) Далее устанавливаем утилитку NFDump.

        Первый вариант, установить из пакетов:

        sudo apt-get install nfdump

        Но такой вариант установки не устроил NFSen, поэтому будем устанавливать из исходных кодов:

        cd /usr/src
        sudo wget http://sourceforge.net/projects/nfdump/files/stable/nfdump-1.6.13/nfdump-1.6.13.tar.gz
        sudo tar zxvf nfdump-1.6.13.tar.gz
        cd nfdump-1.6.13/
        sudo ./configure --enable-nfprofile --enable-nftrack --enable-sflow
        sudo make
        sudo make install

        4) Установим необходимые модули для Perl.

        sudo perl -MCPAN -e 'install Socket6'
        sudo perl -MCPAN -e 'install Mail::Header'
        sudo perl -MCPAN -e 'install Mail::Internet'

        5) Далее переходим к настройке установке NFSen.

        Создадим каталог /data и /var/www/nfsen

        sudo mkdir /data/nfsen
        sudo mkdir /var/www/nfsen

        Изменим права доступа для созданных каталогов

        sudo chmod -R 777 /data/nfsen
        sudo chmod -R 777 /var/www/nfsen

        Скачаем и установим NFSen.

        cd /usr/src
        sudo wget http://sourceforge.net/projects/nfsen/files/stable/nfsen-1.3.7/nfsen-1.3.7.tar.gz
        sudo tar zxvf nfsen-1.3.7.tar.gz
        sudo cp /usr/src/nfsen-1.3.7/etc/nfsen-dist.conf /etc/nfsen.conf

        Теперь необходимо настроить основной конфигурационный файл nfsen.conf, командой выше мы перенесли его в каталог /etc.

        sudo nano /etc/nfsen.conf

        Отредактируем файл:

        • $BASEDIR = "/data/nfsen"; - корневой каталог для хранения файлов NFSen
        • $HTMLDIR = "/var/www/nfsen/"; - корневой каталог для файлов, связанных с web интерфейсом
        • $PREFIX = '/usr/local/bin'; - указываем где лежат бинарники NFDump
        • $USER = "www-data"; - пользователь для запуска nfcapd - демона-коллектора
        • $WWWUSER = "www-data"; - пользователь для работы с web
        • $WWWGROUP = "www-data"; - группа пользователей для работы с web
        • $MAIL_FROM = 'mycompanyname@ya.ru'; - от какого имени буду отправляться сообщения
        • $SMTP_SERVER = 'localhost'; - ваш smtp сервер

        В этом же файле мы настраиваем устройства, на котором слушать входящий трафик. Тут два варианта:

        1-й вариант, разнести устройства по портам:

        %sources = (
        'Cisco' => { 'port' => '9995', 'col' => '#0000ff', 'type' => 'netflow' },
        'Mikrotik' => { 'port' => '9996', 'col' => '#ff0000', 'type' => 'netflow' },
        );

        2-й вариант, разнести устройства по IP адресам:

        %sources = (
        'Cisco' => { 'port' => '9996', 'col' => '#ff0000', 'IP' => '192.168.15.1' },
        'Mikrotik' => { 'port' => '9996', 'col' => '#0000ff', 'IP' => '192.168.16.1' },
        );

        Итоговый файл получается в следующем виде:

        ##############################
        #
        # NfSen master config file
        #
        # $Id: nfsen-dist.conf 22 2007-11-20 12:27:38Z phaag $
        #
        # Configuration of NfSen:
        # Set all the values to fit your NfSen setup and run the 'install.pl'
        # script from the nfsen distribution directory.
        #
        # The syntax must conform to Perl syntax.
        #
        ##############################
        #
        # NfSen default layout:
        # Any scripts, modules or profiles are installed by default under $BASEDIR.
        # However, you may change any of these settings to fit your requested layout.

        #
        # Required for default layout
        $BASEDIR = "/data/nfsen";

        #
        # Where to install the NfSen binaries
        $BINDIR="${BASEDIR}/bin";

        #
        # Where to install the NfSen Perl modules
        $LIBEXECDIR="${BASEDIR}/libexec";

        #
        # Where to install the config files
        $CONFDIR="${BASEDIR}/etc";

        #
        # NfSen html pages directory:
        # All php scripts will be installed here.
        # URL: Entry point for nfsen: http:///nfsen/nfsen.php
        $HTMLDIR = "/var/www/nfsen/";

        #
        # Where to install the docs
        $DOCDIR="${HTMLDIR}/doc";

        #
        # Var space for NfSen
        $VARDIR="${BASEDIR}/var";

        # directory for all pid files
        # $PIDDIR="$VARDIR/run";
        #
        # Filter directory
        # FILTERDIR="${VARDIR}/filters";
        #

        # FORMATDIR for custom printing formats
        # FORMATDIR="${VARDIR}/fmt";
        #

        # The Profiles stat directory, where all profile information
        # RRD DBs and png pictures of the profile are stored
        $PROFILESTATDIR="${BASEDIR}/profiles-stat";

        #
        # The Profiles directory, where all netflow data is stored
        $PROFILEDATADIR="${BASEDIR}/profiles-data";

        #
        # Where go all the backend plugins
        $BACKEND_PLUGINDIR="${BASEDIR}/plugins";

        #
        # Where go all the frontend plugins
        $FRONTEND_PLUGINDIR="${HTMLDIR}/plugins";

        #
        # nfdump tools path
        $PREFIX = '/usr/local/bin';

        #
        # nfsend communication socket
        # $COMMSOCKET = "$PIDDIR/nfsen.comm";

        # BASEDIR unrelated vars:
        #
        # Run nfcapd as this user
        # This may be a different or the same uid than your web server.
        # Note: This user must be in group $WWWGROUP, otherwise nfcapd
        # is not able to write data files!
        $USER = "www-data";

        # user and group of the web server process
        # All netflow processing will be done with this user
        $WWWUSER = "www-data";
        $WWWGROUP = "www-data";


        # Receive buffer size for nfcapd - see man page nfcapd(1)
        $BUFFLEN = 200000;

        # list of extensions for each collector. See argument -T
        # for nfcapd(1) for more detailes.
        # defaults to empty -> compatible to nfdump-1.5.8
        # $EXTENSIONS = '';
        # Example:
        # $EXTENSIONS = 'all';
        # $EXTENSIONS = '+3,+4';
        #
        # Directory sub hierarchy layout:
        # Possible layouts:
        #
        # 0 default no hierachy levels - flat layout - compatible with pre NfSen versions
        # 1 %Y/%m/%d year/month/day
        # 2 %Y/%m/%d/%H year/month/day/hour
        # 3 %Y/%W/%u year/week_of_year/day_of_week
        # 4 %Y/%W/%u/%H year/week_of_year/day_of_week/hour
        # 5 %Y/%j year/day-of-year
        # 6 %Y/%j/%H year/day-of-year/hour
        # 7 %Y-%m-%d year-month-day
        # 8 %Y-%m-%d/%H year-month-day/hour
        $SUBDIRLAYOUT = 1;

        # Compress flows while collecting 0 or 1
        $ZIPcollected = 1;

        # Compress flows in profiles 0 or 1
        $ZIPprofiles = 1;

        # Interrupt expire -- not yet enabled as not yet fully tested
        #$InterruptExpire = 0;

        # number of nfprofile processes to spawn during the profiling phase
        # depends on how busy your system is and how many CPUs you have
        # on very busy systems increase it to a higher value
        $PROFILERS = 2;

        # if the PROFILEDATADIR is filled up to this percentage, a warning message will be printed.
        # set to 0 to disable the test
        $DISKLIMIT = 98;

        # number of nfprofile processes to spawn during the profiling phase
        $PROFILERS = 6;

        # Some Perl Versions/Builds have memory leaks for unknown reason.
        # Therefore nfsend will increase its memory footprint over time.
        # In order to reset nfsend, it automatically reloads after 1 day
        # if PERL_HAS_MEMLEAK is set to 1
        # $PERL_HAS_MEMLEAK=0;

        # Netflow sources
        # Define an ident string, port and colour per netflow source
        #
        # Required parameters:
        # ident identifies this netflow source. e.g. the router name,
        # Upstream provider name etc.
        # port nfcapd listens on this port for netflow data for this source
        # set port to '0' if you do not want a collector to be started
        # col colour in nfsen graphs for this source
        #
        # Optional parameters
        # type Collector type needed for this source. Can be 'netflow' or 'sflow'. Default is netflow
        # optarg Optional args to the collector at startup
        #
        # Syntax:
        # 'ident' => { 'port' => '', 'col' => '', 'type' => '' }
        # Ident strings must be 1 to 19 characters long only, containing characters [a-zA-Z0-9_].

        %sources = (
        'Cisco' => { 'port' => '9996', 'col' => '#ff0000', 'IP' => '192.168.15.1' },
        'Mikrotik' => { 'port' => '9996', 'col' => '#0000ff', 'IP' => '192.168.16.1' },
        );

        #
        # Low water mark: When expiring files, delete files until
        # size = $low_water % of max_size
        # typically 90
        $low_water = 90;

        # syslog facility for periodic jobs
        # nfsen uses level 'debug', 'info', 'warning' and 'err'
        # Note: nfsen is very chatty for level 'debug' and 'info'
        # For normal operation, you may set the logging level in syslog.conf
        # to warning or error unless you want to debug NfSen
        $syslog_facility = 'local3';

        #
        # SYSLOG mess
        # Log socket type: Most *NIX such as LINUX and *BSD are fine with 'unix'
        # which is the default. You need to change that to 'stream' or 'inet' for
        # some Solaris version 8/9, AIX and others ..
        # You may set it to undef to prevent calling Sys::Syslog::setlogsock at all
        # ( works for Solaris 10 and newer Sys::Syslog module
        #
        # If not defined at all, 'unix' is assumed unless for Solaris, which defaults to 'stream'
        # $LogSocket = 'unix';

        #
        # Plugins
        # Plugins extend NfSen for the purpose of:
        # Periodic data processing, alerting-condition and alerting-action
        # For data processing a plugin may run for any profile or for a specific profile only.
        # Syntax: [ 'profile list', 'module' ]
        # profile list: ',' separated list of profiles ( 'profilegroup/profilename' ),
        # or '*' for any profile, '!' for no profile
        # module: Perl Module name, equal to plugin name
        # The profile list '!' make sense for plugins, which only provide alerting functions
        #
        # The module follows the standard Perl module conventions, with at least one
        # function: Init(). See demoplugin.pm for a simple template.
        #
        # A file with the same name in the FRONTEND_PLUGINDIR and .php extension is automatically
        # recongized as frontend plugin.
        #
        # Plugins are installed under
        # $BACKEND_PLUGINDIR and $FRONTEND_PLUGINDIR

        @plugins = (

        # profile # module
        # [ '*', 'demoplugin' ],
        );

        %PluginConf = (
        # For plugin demoplugin
        demoplugin => {
        # scalar
        param2 => 42,
        # hash
        param1 => { 'key' => 'value' },
        },
        # for plugin otherplugin
        otherplugin => [
        # array
        'mary had a little lamb'
        ],
        );

        #
        # Alert module: email alerting:
        # Use this from address
        $MAIL_FROM = 'mycompanyname@ya.ru';

        # Use this SMTP server
        $SMTP_SERVER = 'localhost';

        # Use this email body:
        # You may have multiple lines of text.
        # Var substitution:
        # @alert@ replaced by alert name
        # @timeslot@ replaced by timeslot alert triggered
        $MAIL_BODY = q{
        Alert '@alert@' triggered at timeslot @timeslot@
        };

        ######################################################
        #
        # For the NfSen simulator include the section below.
        #
        ######################################################
        #
        # Nfsen Simulator
        # The simulator requires, that you have already installed
        # and configured NfSen. The simulation is based on already
        # pre-colleted data, which you may get from another live
        # NfSen system.
        #
        # Steps to setup the NfSen simulator:
        # 1. Configure the sources of the live profile with the
        # same names of the NfSen system, you take netflow data
        # for the simulation. Set the port for each netflow source
        # to 0 to prevent a collector to be started.
        # Install NfSen with this config in a seperate directory
        # 2. Copy the pre-collected data into the appropriate
        # netflow directory of the live profile.
        # 3. Configure the simulator using the parameters below
        # Enable Simulation mode => $SIMmode = 1
        # Configure the time window of the pre-collected data.
        # tstart => Start of time window. yyyymmddhhmm
        # tbegin => Optional parameter. Start of simulation
        # profile exists already between tstart - tbegin
        # tend => End of time window. yyyymmddhhmm
        # cycletime => simulation time in seconds of a 5min slot
        # Setting cycletime = 0 processes the cycles as fast as
        # possible. Please note, if you test plugings, your
        # cycletime needs to be at least the time required to
        # process all plugins.
        # 4. Start nfsen: ../nfsen start
        # Simulation starts
        #
        # The simulator runs from tstart to tend and stops when tend
        # is reached. You may stop the simulation at any given time
        # using ./nfsen stop. To continue the simulation start NfSen
        # again: ./nfsen start. You may reset the simulator at any
        # given time using ./nfsen abort-reset. This stops the sumulation
        # and rolls back to tstart. All profiles/alerts are deleted,
        # so you may start from scratch again.
        #
        # Configure simulator parameters

        #
        # $SIMmode = 1;
        # %sim = (
        # 'tstart' => '200707100000', # Simulation data available from July 10th 2007 00:00
        # 'tbegin' => '200707110000', # Simulation begins at July 11th 2007 00:00
        # 'tend' => '200707112355', # Simulation ends at July 11th 2007 23:55
        # 'cycletime' => '30', # 30s per 5min slot
        # );

        1;

        Далее переходим к непосредственной установке NFSen.

        cd /usr/src/nfsen-1.3.7/
        sudo ./install.pl /etc/nfsen.conf

        Сделаем ссылку для корректной работы Apache

        sudo ln -s /var/www/nfsen/nfsen.php /var/www/nfsen/index.php

        Далее запускаем процесс командой:

        /data/nfsen/bin/nfsen start

        6) Теперь наведем немного лоска. Добавим NFSen в автозагрузку.

        sudo ln -s /data/nfsen/bin/nfsen /etc/init.d/nfsen
        sudo update-rc.d nfsen defaults 20
        sudo /data/nfsen/bin/nfsen restart

        У меня на Apache крутится несколько средств для мониторинга трафика, поэтому я сделал некоторую доработку. Создадим файл /etc/apache2/conf-available/nfsen.conf

        sudo nano /etc/apache2/conf-available/nfsen.conf

        и внесем в него следующую информацию:


        Alias /nfsen /var/www/nfsen



        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all

        По-умолчанию доступ открыт всем, необходимо запаролить доступ к WEB интерфейсу NFSen. для этого делаем следующие шаги:

        - устанавливаем утилитку apache2-utils, она необходима для генерации паролей.

        sudo apt-get install apache2-utils

        Далее вводим команду

        sudo htdigest -c /var/www/nfsen/.htpasswd nfsen_public nfsenadmin

        и вводим два раза необходимы пароль.

        Поясним, что мы сделали.

        • Ключ "-с" - означает, что необходимо создать новый файл с ключами и пользователями (если вы будите добавлять еще одного пользователя, то данный ключ писать не надо).
        • Строка "/var/www/nfsen/.htpasswd" говорит о том, где будет находится файл с ключами и пользователями.
        • "nfsen_public" - realm название, используется для авторизации.
        • "nfsenadmin" - создаваемый пользователь.

        После того как мы создали файл с ключами, необходимо подправить /etc/apache2/conf-available/nfsen.conf. В итоговом виде файл должен выглядеть так:


        Alias /nfsen /var/www/nfsen



        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
        AuthType Digest
        AuthName nfsen_public
        AuthUserFile /var/www/nfsen/.htpasswddg
        Require valid-user

        Для корректной работы авторизации, необходимо, чтобы был загружен модуль mod_auth_digest. Для этого введите следующую команду:

        sudo ln -s /etc/apache2/mods-available/auth_digest.load /etc/apache2/mods-enabled/

        Перезагружаем Apache.

        sudo service apache2 restart

        Подсказки:

        1) В Ubuntu 12.04 LTS с Perl 5.14 и nfsen 1.3.6p1 нет import Socket6. В файлах «libexec/AbuseWhois.pm» и «libexec/Lookup.pm» заменить:

        use Socket6;

        на

        Socket6->import(qw(pack_sockaddr_in6 unpack_sockaddr_in6 inet_pton getaddrinfo));

        Данную подсказку взяли на сайте Ubuntu, но у меня на версии 14.10 таких проблем не возникло.

        2) Как исправить следующие ошибки:

        ERROR: nfsend connect() error: Permission denied!

        ERROR: nfsend connect() error: No such file or directory!

        ERROR: nfsend - connection failed!!

        ERROR: Can not initialize globals!


        errornfsen.jpg

        В файле  необходимо найти следующие строки:

                                return undef; 
        }
        chmod 0660, $socket_path;
        chown $NfConf::UID, $NfConf::GID, $socket_path;
        } else {
        # TCP Internet socke

        Меняем местами строчки:

                       chmod 0660, $socket_path; 
        chown $NfConf::UID, $NfConf::GID, $socket_path;

        Сохраняем и выходим из файла.

        Далее отредактируем файл php.ini, найдите его командой:

        sudo find / -name "php.ini"

        Находим строку short_open_tag и устанавливаем значение в On.

        short_open_tag = On

        3) Как добавить новый хост в NFSen.

        Редактируем файл /etc/nfsen.conf, добавляем хосты, как это было описано выше.

        sudo nano etc/nfsen.conf

        Останавливаем процесс NFSen.

        sudo /etc/init.d/nfsen stop

        Запускаем конфигурационный скрипт.

        sudo ./install.pl /etc/nfsen.conf

        Перечитаем созданные конфиги.

        sudo /etc/init.d/nfsen reconfig

        Запускаем NFSen.

        sudo /etc/init.d/nfsen start

        Примечание: NFSen может не захотеть читать новые конфиги. Для этого придется удалить информацию по старым хостам в каталоге /data/nfsen/profiles-data/live/, при этом вы потеряете всю полученную информацию.

        sudo rm -Rf /data/nfsen/profiles-data/live/Ciscosudo rm -Rf /data/nfsen/profiles-data/live/Mikrotik

        Далее выполняем:

        sudo /etc/init.d/nfsen reconfigsudo /etc/init.d/nfsen start

        На этот раз все должно пройти нормально.

        Нужна консультация?

        Наши специалисты ответят на любой интересующий вопрос

        Задать вопрос
        Поделиться
        Назад к списку
        © 2021 Все права защищены.
        +7 (499) 113-65-73
        Заказать звонок
        sale@voipnotes.ru
        г. Москва 2-й Михайловский проезд 9
        Политика конфиденциальности
        Версия для печати
        © 2021 Все права защищены.
        Заказать звонок
        Написать сообщение