Pull to refresh

Считаем сетевой трафик с помощью netflow и lightsquid

Open source *
Однажды в нашем небольшом офисе понадобилось настроить систему учёта трафика под 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"
    Softflowd прост в настройке, но может терять пакеты. Если вам не хватает его производительности, попробуйте ipt-netflow.
  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/mods-enabled. После этого необходимо включить доступ с парольной защитой. Установите пакет apache2-utils, если у вас нет утилиты htpasswd, создайте директорию etc в корне сайта и задайте пароль администратора: htpasswd -c /www/etc/passwd administrator

    Настройка lightsquid
    Необходимо удалить задания cron для lightparser.pl, если таковые присутствуют в системе.
    Настройка конфигурационного файла производится инсталляционными скриптами автоматически. Вы можете настроить lightsquid по своему вкусу, за исключением следующих параметров, изменять которые нельзя:
    $graphmaxuser=1
    $graphmaxall=1
    $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. Убедиться, что включен форвардинг ip v4 (дописать net.ipv4.ip_forward=1 в /etc/sysctl.conf и применить изменения sysctl --system).
  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. При этом, по понятным причинам, за точность такого распознавания ручаться нельзя.



Буду рад любым отзывам и сообщениям о багах.
Tags: lightsquidsquidlinuxсистемное администрированиеlightwrapper
Hubs: Open source
Total votes 15: ↑14 and ↓1 +13
Comments 11
Comments Comments 11

Popular right now

Top of the last 24 hours