Подсчет значений счетчиков 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 с разбивкой по месяцам, а в случае перезагрузки системы погрешность показаний лежит в пределах одной минуты.