Материал просмотрен 26 раз(а)

Как-то раз понадобилась мне простейшая (без наворотов) система учёта трафика – какие хосты больше всего потребляют. Остановил свой беглый взгляд на продукте ulog-acctd, который работает совместно с netfilter, то есть довольно “низко”.

Чтож, будем настраивать!

Этап 1. Установка ulog-acctd

Ищем по RPM-пакетам на этом сайте: http://rpm.pbone.net/index.php3?stat=3&search=ulog-acctd&srodzaj=3 и переходим по ссылке напротив нашей версии ОС (у меня CentOS 6.9 i386, но подошла на 6.5)

Открылось окно, где мы копируем ссылку на сам rpm-пакет:

У меня это: ftp://ftp.pbone.net/mirror/rnd.rajven.net/centos/6.5/os/i386/ulog-acctd-0.4.3-7cnt6.i686.rpm

Устанавливаем так:

# wget ftp://ftp.pbone.net/mirror/rnd.rajven.net/centos/6.5/os/i386/ulog-acctd-0.4.3-7cnt6.i686.rpm
# rpm -Uhv ulog-acctd-0.4.3-7cnt6.i686.rpm

Кстати, не забываем предварительно обновить и другие пакеты:

# yum -y update

Этап 2. Настройка ulog-acctd

Настраивается эта тема элементарно – конфиг тут: /etc/ulog-acctd.conf

Там нас интересует всего несколько параметров: accounting format и fdelay. Первое – формат записи в лог, второе – время накопления данных в секундах.

Я поставил формат “%t\t%s\t%d\t%b\n“, где:

%t – timestamp
\t – символ Tab
%s – IP источника
%d – IP назначения
%b – количество байт
\n – перенос строки

Всё очень просто! Если не нужна статистика по источникам, а только по назначениям, формат можно ещё немного подсократить. А если нужна статистика по портам, протоколам и интерфейсам – так в этом логе есть дополнительные ключи, которыми можно сконструировать произвольный формат записи в лог. Мне такого хватит (потом скормить его в Excel).

Так, теперь надо бы как-то фиксировать нашим netfilter проходящие пакеты и посылать информацию в ulog-acctd. Так как у меня Интернет-шлюз, и пакеты проходят сквозь него (цепочка FORWARD), в неё и пропишем соответствующее действие:

/sbin/iptables -A FORWARD -d 10.0.0.0/24 -j ULOG --ulog-cprange 48 --ulog-qthreshold 10

-d 10.0.0.0/24 – моя подсеть (фиксируем пакеты, приходящие в эту сеть сквозь шлюз)
–ulog-cprange 48 – насколько я понял, это размер пакета в байтах, которое пойдёт на анализ. Нужная мне информация (об IP адресах источника и приёмника) содержится в первых 48 байтах, остальное анализировать нет необходимости.
–ulog-qthreshold 10 – столько пакетов собирать в ядре, прежде чем отправить информацию.

Этап 3. Анализ результатов

Теперь перезапустим демон

# /etc/init.d/ulog-acctd restart

И пойдём смотреть в логи /var/log/ulog-acctd/account.log

Уже вполне наглядно. Но гораздо веселее в Excel:

Я добавил новый столбец “Время” и вписал туда формулу перехода от Unixtime к нормальному времени. Также поменял формат ячейки на “ДД.ММ.ГГГГ чч:мм;@“. Можно ещё добавить секунды, но такая детализация мне не нужна.

Теперь с этими данными можно делать что угодно: хоть итоги по абонентам:

Хоть по времени (по часам или минутам).

Хоть даже и диаграммы: