Подсчет значений счетчиков ipfw по месяцам

При типовом использовании ipfwcount во FreeBSD задействованы следующие файлы:

/ipfwcount/ipfwcount.c
/ipfwcount/ipfwcount*
/ipfwcount/ipfwcount.bootup*
/ipfwcount/backup.rules
/ipfwcount/YYYY-MM.ipfwcount
/etc/periodic/daily/160.ipfwcount*
/etc/crontab

Компиляция программы осуществляется командой:

$ cc -o ipfwcount ipfwcount.c

Содержание скрипта /etc/periodic/daily/160.ipfwcount:

#!/bin/sh
 
ipfw show > /ipfwcount/current.rules.tmp
ipfw -q zero
rm /ipfwcount/backup.rules
 
echo
echo ipfw month counters:
/ipfwcount/ipfwcount /ipfwcount/current.rules.tmp /ipfwcount
rm /ipfwcount/current.rules.tmp

Этот скрипт учитывает изменения счетчиков, произошедшие после его предыдущего выполнения. Он выполняется раз в сутки вместе с периодическими процессами по обслуживанию системы. При этом значения счетчиков с начала месяца сохраняются в файлах YYYY-MM.ipfwcount, где YYYY-MM текущие год и месяц, соответственно. Содержимое этого файла включается в ежедневный почтовый отчет.

Т.к. снятие показаний происходит через некоторый временной интервал (сутки или неделя), нужно учесть, что система может быть перезагружена за это время, а значения счетчиков при этом сбросятся. Для этого в файл /etc/crontab добавляется строка:

*/1     *       *       *       *       root    ipfw show > /ipfwcount/backup.rules

Соответственно, при загрузке системы необходимо учесть значения, сохраненные в файле backup.rules. Это выполнятся с помощью скрипта ipfwcount.bootup, который может быть вызван, например, из файла /etc/rc.firewall. Скрипт ipfwcount.bootup имеет следующее содержание:

#!/bin/sh
/ipfwcount/ipfwcount /ipfwcount/backup.rules /ipfwcount >/dev/null
rm /ipfwcount/backup.rules

Таким образом, происходит постоянный учет значений счетчиков ipfw с разбивкой по месяцам, а в случае перезагрузки системы погрешность показаний лежит в пределах одной минуты.

Вернуться