Как-то раз понадобилась мне простейшая (без наворотов) система учёта трафика – какие хосты больше всего потребляют. Остановил свой беглый взгляд на продукте 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. Первое – формат записи в лог, второе – время накопления данных в секундах.
Я поставил формат “%tt%st%dt%bn“, где:
%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 к нормальному времени. Также поменял формат ячейки на “ДД.ММ.ГГГГ чч:мм;@“. Можно ещё добавить секунды, но такая детализация мне не нужна.
Теперь с этими данными можно делать что угодно: хоть итоги по абонентам:
Хоть по времени (по часам или минутам).
Хоть даже и диаграммы: