Однажды в нашем небольшом офисе понадобилось настроить систему учёта трафика под 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. Как попробовать:
- установить рекомендуемые зависимости: apache2 softflowd ipset lightsquid perl iptables flow-tools dnsutils conntrack iptables-persistent
- скачать архив, установить deb или запустить инсталлятор.
Собственно, зависимостей довольно много, и многие из них требуют настройку — это минус. Но врядли при таком подходе возможно иное. Кратко, настройка сводится к следующему:
-
настроить 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" -
настроить 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
$showoversizelink=0
$showgroupid=0
$showputpost=1
$templatename='lightwrapper'
$logpath='/var/log/lightwrapper'
$lang='lw-eng'
или другой язык (lw-ru) -
отредактировать конфиг-файл. В самом простом варианте необходимо только вписать имена 2х сетевых интерфейсов/etc/lightwrapper/cfg:
in_if и out_if -
запустить скрипт настройки iptables (делает всё автоматом, это нужно один раз)Запустить lw-geniprules. Убедиться, что включен форвардинг ip v4 (дописать net.ipv4.ip_forward=1 в /etc/sysctl.conf и применить изменения sysctl --system).
-
установить и настроить дополнительные зависимости, если таковые имеютсяНе описана установка прозрачного squid; не описана настройка ipset для блокировки траффика. Подробные инструкции можно найти в man или на wiki.
- Перезапустить все службы для применения настроек или перезагрузиться.
Статистика пополняется по-умолчанию раз в 15 минут. Сенсор может отдавать потоки с некоторой задержкой.
Подробно всё это шаг за шагом описано на ломаном английском в wiki и в man lightwrapper. Имеются примеры конфигурационных файлов всего, чего только можно, в большинстве случаев можно их просто скопировать в вашу систему.
Немного о детализации отчётов. Netflow даёт следующую информацию: ip адреса, порты источника и назначения, протокол.
Если для пары (протокол: порт назначения) существует имя сервиса в /etc/services, то lightwrapper в статистике отображает его. Если установлена утилита dig, то ip-адреса автоматически разрешаются в имена (если такое соответствие есть в dns).
Если установлен прозрачный squid и некоторые пользователи перенаправляются на него, то lightwrapper просматривает лог squid и ставит в соответствие найденным ip-адресам имена. Можно настроить lightwrapper так, чтобы он разрешал ip-адреса в имена для пользователей, которые не перенаправляются на squid. При этом, по понятным причинам, за точность такого распознавания ручаться нельзя.
На момент написания статьи lightwrapper имеет beta статус, т.к. тестеров у меня нет, возможны небольшие ошибки в работе. Буду рад любым отзывам и сообщениям о багах.
Автор: infd