Считаем сетевой трафик с помощью 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"
      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. При этом, по понятным причинам, за точность такого распознавания ручаться нельзя.



    Буду рад любым отзывам и сообщениям о багах.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 11

      0
      Прикольный темплейт
      Прислали бы ;)
        0
        Он жёстко заточен под мою софтину и несовместим с чистым lightsquid.
          0
          Как будет время я сделаю вариант для lightsquid, если вам оно нужно.
            0
            но может таки новая версия созреет ;)
              0
              Посмотрите личку.
          0
          Вместо softflowd можно использовать ipt-netflow. Производительность, по сравнению с использованием libpcap — на несколько порядков выше.
          github.com/aabc/ipt-netflow/
            0
            Выше написано, что можно использовать любой сенсор, привязано только коллектору. Softflowd в debian просто есть из коробки и он экстремально прост в настройке, поэтому его и рекомендую. На моем железе для маршрутизатора (core i5 hasswell) меня устраивает протзводительность libcap-based сенсоров; на более слабом имеет смысл прикручивать ipt-netflow.
              0
              Добавлю инфу о выборе сенсора в документацию.
              0
              This is so 90's…
                0
                90е — не 90е, а коммерческое решение на 100 пользователей у одной российской компании стоит 40к.
                  0
                  Довольно недорого.

              Only users with full accounts can post comments. Log in, please.