Вважаємо мережевий трафік з допомогою netflow і lightsquid

Одного разу в нашому невеликому офісі знадобилося налаштувати систему обліку трафіку під linux. Побіжно переглянувши готові рішення, я вирішив використовувати щось простіше. Погугливши, мені сподобався підхід використовувати самописний скрипт, який конвертував статистику netflow в squid-сумісний лог, який потім можна аналізувати чим завгодно. Готовий скрипт, що гуляє по гуглу, я використовувати не став, оскільки він використовує ipcad, якій відсутня в debian і ubuntu. Написав свій варіант, який використовує будь netflow сенсор і flow-tools в якості колектора. Скрипт поступово ускладнювався і, в підсумку, виріс в невелику систему обліку трафіку. Архів цього задоволення важить близько 50к, при цьому:
  • встановлюється з допомогою deb для дистрибутивів, заснованих на debian або з допомогою власного інсталятора для решти
  • вміє рахувати інтернет-трафіку на маршрутизаторі у всьому ip v4 протоколів і портів
  • вміє обмежувати доступ не прописаним користувачам
  • замість голої статистики ip-адрес netflow вміє деталізувати звіти з допомогою dig і squid
  • вміє вибірково блокувати трафік
  • має веб-інтерфейс для управління користувачами і групами користувачів
  • налаштовується трохи складніше lightsquid, який використовує в роботі
  • не використовує проміжний лог access.log, власний парсер конвертує статистику netflow прямо в звіт lightsquid




Виглядає це так: управління користувачами і доступ до статистики здійснюється через веб-інтерфейс (демо). Кожен користувач може бути авторизований через ip, mac або ip+mac. Неавторизовані користувачі бачать помилку «access denied». Кожному користувачеві може бути присвоєно прапор «squid» для перенаправлення трафіку на прозорий squid. Кожному користувачеві може бути присвоєно прапор «ipblock» для блокування будь-якого трафіку через ipset. Керування списками блокування та інші тонкі налаштування здійснюються через консоль. Встановлювати і налаштовувати все не обов'язково, можна настроїти тільки необхідні компоненти.
В якості назви було вибрано ім'я lightwrapper (походить від lightsquid wrapper) і створений проект на sourceforge. Як спробувати:
  1. встановити рекомендовані залежності: apache2 softflowd ipset lightsquid perl iptables flow-tools dnsutils conntrack iptables-persistent
  2. завантажити архів, встановити deb або запустити інсталятор.
Власне, залежностей досить багато, і багато з них потребують налаштування — це мінус. Але навряд чи при такому підході можливо інше. Коротко, налаштування зводиться до наступного:
  1. налаштувати netflow сенсор і колектор (одна строчка в конфіги того і іншого)Налаштування flow-toolsВпишіть в конфігураційний файл (debian — /etc/flow-tools/flow-capture.conf)
    -N 0-w /tmp-R /usr/sbin/lw-export-n 95 0/127.0.0.1/2055
    Налаштування softflowdВпишіть в конфігураційний файл (debian — /etc/default/softflowd):
    INTERFACE=«ім'я локального мережевого інтерфейсу, наприклад, eth0»
    OPTIONS="-n 127.0.0.1:2055"
  2. налаштувати lightsquidНалаштування apache2Архів містить приклади: lightwrapper.conf — конфігурація virtualhost для apache2 і access_denied.html — заглушка для показу не користувачам. Приклади лежать в /usr/share/doc/lightwrapper/examples. Ви повинні вимкнути налаштування virtualhost для lightsquid (оскільки вони дають доступ без пароля) і включити налаштування для lightwrapper. В debian ви можете замінити файл /etc/apache2/sites-enabled/000-default.conf наведеним. Також необхідно включити модуль cgi. В debian потрібно зробити лінк з /etc/apache2/mods-available/cgi.load в /etc/apache2/модов. Після цього необхідно включити доступ, захищений паролем. Встановіть пакет apache2-utils, якщо у вас немає утиліти htpasswd, створіть директорію etc в корені сайту та вкажіть пароль адміністратора: htpasswd-c /www/etc/passwd administrator

    Налаштування lightsquidНеобхідно видалити завдання cron для lightparser.pl якщо такі присутні в системі.
    Параметри конфігураційного файлу здійснюється інсталяційними скриптами автоматично. Ви можете налаштувати lightsquid по своєму смаку, за винятком таких параметрів, змінювати які не можна:
    $graphmaxuser=1
    $graphmaxall=1
    $showoversizelink=0
    $showgroupid=0
    $showputpost=1
    $templatename='lightwrapper'
    $logpath='/var/log/lightwrapper'
    $lang='lw-eng'
    або іншу мову (lw-ru)
  3. відредагувати конфіг-файл. У найпростішому варіанті необхідно тільки вписати імена 2х мережевих інтерфейсів/etc/lightwrapper/cfg:
    in_if і out_if
  4. запустити скрипт налаштування iptables (робить все автоматом, це потрібно один раз)lw-geniprules
  5. встановити і налаштувати додаткові залежності, якщо такі єНе описана установка прозорого squid; не описана налаштування ipset для блокування трафіку. Докладні інструкції можна знайти в man або на wiki.
  6. Перезапустити всі служби для застосування налаштувань або перезавантажитися.
Статистика поповнюється за замовчуванням раз в 15 хвилин. Сенсор може віддавати потоки з деякою затримкою.
Докладно все це крок за кроком описано ламаною англійською wiki і в man lightwrapper. Є приклади конфігураційних файлів всього, чого тільки можна, у більшості випадків можна їх просто скопіювати в вашу систему.

Трохи про деталізації звітів. Netflow дає наступну інформацію: ip-адреси, порти джерела і призначення, протокол.



Якщо для пари (протокол: порт призначення) існує ім'я сервісу в /etc/services, то lightwrapper в статистиці відображає його. Якщо встановлена утиліта dig, то ip-адреси автоматично вирішуються імена (якщо така відповідність є в dns).



Якщо встановлено прозорий squid і деякі користувачі перенаправляються на нього, то lightwrapper переглядає лог squid і ставить у відповідність знайдених ip-адресами імена. Можна налаштувати lightwrapper так, щоб він дозволяв ip-адреси в імена для користувачів, які не перенаправляються на squid. При цьому, за зрозумілих причин, за точність такого розпізнавання ручатися не можна.



На момент написання статті lightwrapper має статус beta, т. к. тестерів у мене немає, можливі невеликі помилки в роботі. Буду радий будь-яким відгукам і повідомленнями про баги.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.