суббота, 30 января 2016 г.

NetFlow в MS SQL. Часть 1-ая, продолжение.

...мда, нечасто  я сюда пишу - времени нет, денег нет, но поделиться охота...

ну так продолжим:

   В качестве такой системы я выбрал один из самых крохотных дистрибутивов на базе DEBIAN под названием "VoyageLinux". Как я понял из описания - система предназначена для домашних видеоплееров, потребляет минимум ресурсов, однако все недостающее можно установить изнутри с помощью "apt-get".

Кстати совершенно необязательно делать это на виртуалке. Можно поставить и на обычный комп - просто виртуалку можно таскать по гипервизорам, а вот "железную" машину придется каждый раз переставлять, подбирать совместимое железо и прочие замороки.

   Развернул систему в "Virtual Machine Manager" он же "libvirtd" (каюсь - поленился руками писать qemu-system_x86 и пр.). Кстати забыл поставить автозапуск виртуалки - о чем в будущем пару раз пожалел и исправил.
   Выставил фиксированный IP в /etc/network/interfaces: {eth0 auto inet static...}. Включил "sshd" {apt-get install openssh-server} для возможности удаленного управления. Перезагрузил, проверил - все фурычит.
   Теперь собственно сам коллектор. Как показал поиск по гуглам и яндексам, 9-ю версию NetFlow умеет читать только "nfdump" - значит его и ставим. Однако в готовом виде я его не нашел - значит (ТОЛЬКО НЕ ЭТО!!!) компилировать из исходников. К счастью, мои страхи оказались напрасными, и компилятор с причиндалами установился без проблем (apt-get install make gcc cpp ... подробнее чуть позже), а код скомпилировался без ошибок и "адов зависимостей". Правда был нюанс: "./configure" надо делать с ключом "with-nfsel" иначе 9-ю версию NetFlow мы не обработаем.
      Сама программа работает тоже с определенной спецификой: одна часть ("nfcap") принимает потоки от устройств и записывает их в файлы, а другая ("nfdump") декодирует кракозябры из этих файлов в читаемый текст. В итоге получается что-то типа:

IP_src |IP_dst |PRT_src|PRT_dst|PROTO|TIMEstart|TIMEend|Bsend|Brecv. . .
1.1.1.1|2.2.2.2 |54321    |80          |TCP     |  0

    Хотелось бы конечно, чтобы она сразу сливала в читаемом виде в базу данных, однако в гуглах и самом коде программы я таких возможностей не нашел.
    Перед началом игрищ с nfdump необходимо проверить - а доходят ли до коллектора данные о трафике с маршрутизатора и брандмауэра. Посмотрим что нам скажет tcpdump:
    tcpdump -... udp 2055 -ni eth0
    Видимо все доходит. Теперь nfcap:
    nfcapd -t 1800 -b 100000 -T all -z -i R2,/var/spool/netflow/R2,192.168.XXX.YYY
    Что на человеческий переводится так: собирай поступившие данные в файлы раз в полчаса (1800 сек) в каталоге .../netflow/R2, шаблон полей netflow v9 любой (all), а файлы должны быть архивированные (-z). После запуска сразу создался файл nfcapd20150303.current, который через полчаса сменил расширение на .dump

    bashscript
        grep, sed, awk
    sqsh
        single connect (80 млн) 30 минут на файл
    sharez
        cifs mount
        credentials
        fstab
dns
    Как мы увидели в полученых данных, источником и назначением трафика пишутся IP адреса, что не очень читабельно. В тоже время во всех готовых анализаторах трафика пишутся имена хостов. Как бы теперь это и в нашей системе реализовать?
Мысль меня посетила такая: если пользователь со своего компа (pupkin_pc.scruge.msk.ru) открыл вконтакте (porno.vk.com), то внутренний DNS компании уже производил перевод имени компа (pupkin_pc = 10.20.30.40) и сайта (porno.vk.com = 231.2.13.5) в IP адреса, и больше того - хранит этот перевод в каких-то своих кэшах. Значит задача сводится к нахождению этого кэша, приведению его к нужному формату, и отправке в базу анализатора с определенной периодичностью.
    ДНС у нас на винде, так что пришлось обратиться к нашему виндовому админу за помощью. Товарищ сказал что штатными средствами такой кэш получить невозможно, а все что он может дать - это журнал отладки ДНС сервера. Ну и ладно попробуем с тем что есть.
    debug_log
        PowerShell parse
           cache
           zone scruge.msk.ru
 
        PowerShell parse
    Task scheduler

...БЛИН! Опять все на скорую руку! Ладно - завтра весь этот бардак соберу в одну статью и буду наводить порядок

Комментариев нет:

Отправить комментарий