Учёт трафика с помощью softflowd и flow-tools на шлюзе под управлением FreeBSD [2010]
В предыдущей статье было показано как можно быстро и легко развернуть простой шлюз на FreeBSD для доступа в интернет небольшой сети. После того как суматоха от развёртывания новой сети уляжется можно задуматься и об учёте трафика.
Далее будет показано как можно относительно легко организовать учёт трафика используя утилиты из комплекта flow-tools и netflow-сенсор softflowd.
Сразу оговоримся что описываемое решение имеет смысл только если IP-адреса пользователей в локальной сети постоянны. То есть либо в настройках DHCP-сервера все IP-адреса привязаны к MAC-адресам клиентов (как это сделать уже было показано ранее), либо нужно вообще отказаться от DHCP-сервера в локальной сети.
Большая часть описываемого тут решения повторяет предыдущее решение. Для начала установим flow-коллектор:
cd /usr/ports/net-mgmt/flow-tools && make install clean
Логи мы будем копить в директории /usr/home/flows. Создадим её:
mkdir -p /usr/home/flows
Затем добавим в файл /etc/rc.conf строки:
flow_capture_enable="YES"
flow_capture_datadir="/usr/home/flows"
flow_capture_localip="127.0.0.1"
flow_capture_remoteip="127.0.0.1"
flow_capture_port="9999"
flow_capture_flags="-n 275"
Здесь мы описываем запуск утилиты flow-capture (netflow-коллектора) на локальном интерфейсе на порту 9999 для сбора статистики с localhost и складирования логов в /usr/home/flows. Запустим коллектор:
/usr/local/etc/rc.d/flow_capture start
Теперь нам нужен netflow-сенсор, который будет отправлять в наш коллектор статистику с сетевого интерфейса. Мы используем простой в настройке softflowd. Установим его:
cd /usr/ports/net-mgmt/softflowd && make install clean
Для автоматического запуска сенсора нужно создать скрипт
/usr/local/etc/rc.d/softflowd.sh следующего содержания:
Теперь в директорр /usr/home/flows будут собираться логи netflow. Остаётся только начать генерировать на их основе статистику. Для этого создадим директорю /usr/local/scripts и перейдём в неё:
mkdir -p /usr/local/scripts && cd /usr/local/scripts
Для начала создадим файл stat-flow.acl в котором опишем адресные пространства интернета и нашей локальной сети:
ip access-list standard localnet permit 172.31.255.0 0.0.0.255
ip access-list standard localnet deny any
ip access-list standard internet deny 172.31.255.0 0.0.0.255
ip access-list standard internet permit any
Затем создадим файл stat-report.conf, в котором опишем конфигурацию для утилиты flow-reports:
stat-report localnet
type ip-destination-address
output
format ascii
options +header,+xheader,+totals
fields -flows,-packets,-duration
stat-definition localnet
report localnet
Отчёты мы будем складывать в директорию /usr/local/www/flow-reports. Создадим скрипт stat_daily.sh, который будет запускаться раз в сутки и генерировать отчёты за предыдущий день. Вот его содержание:
#!/bin/sh
# Получаем вчерашнюю дату
RPT_Y=`/bin/date -v-1d +%Y`
RPT_M=`/bin/date -v-1d +%m`
RPT_D=`/bin/date -v-1d +%d`
# Путь для хранения отчётов
RPT_DIR="/usr/local/www/flow-reports/daily"
# Дата отчёта
RPT_DATE=${RPT_Y}-${RPT_M}-${RPT_D}
# Файл с отчётом
RPT_NAME=${RPT_DIR}/${RPT_DATE}.html
# Директория с логами
FLOW_DIR="/usr/home/flows"
# Если вдруг директория для отчётов не существует - она будет создана
Для автоматической генерации отчётов каждый день нужно добавить в /etc/crontab строку:
1011**root/usr/local/scripts/stat_monthly.sh
Поскольку отчёты генерируются в виде HTML-страниц вполне разумно для доступа к ним развернуть веб-сервер. Поскольку нам нужно отдавать совсем небольшое количество статических страничек мы используем просто и лёгкий thttpd. Установим его:
cd /usr/ports/www/thttpd && make install clean
Затем нужно сконфигурировать thttpd, для этого необходимо создать файл /usr/local/etc/thttpd.conf следующего содержания:
user=www
dir=/usr/local/www/flow-reports
chroot
cgipat=*.cgi
logfile=/var/log/thttpd.log
pidfile=/var/run/thttpd.pid
Следующим шагом включим автоматический запуск веб-сервера при загрузке системы добавив в файл /etc/rc.conf строку:
thttpd_enable="YES"
И наконец запустим веб-сервер:
/usr/local/etc/rc.d/thttpd start
Просматривать отчёты по трафику можно открывая из локальной сети в браузере адрес http://172.31.255.1 (это адрес нашего шлюза).