В качестве штатного фаервола я решил использовать pf, ну и как оно водится захотелось мне подсчитывать сколько трафика я скачиваю и раздаю. Оказалось pf это умеет .Может кто то скажет что не очень подробно, но зачем ставить еще какую то прогу тем самым лишний раз нагружая машинку.
1) С начало включим счетчик на внешнем интерфейсе ,который смотрит в интернет прописав в конфиге pf строчку
set loginterface %имя интерфейса%.
Проверить работоспособность можно командой pfctl -si.
2) Нам осталось лишь распарсить эти данные для отрисовки графика. В качестве отрисовки графиков я решил взять pChart (http://pchart.sourceforge.net/). В скаченом архиве есть несколько примеров, за шаблон для графика я взял Example2.php Для корректной работы понадобится включить поддержку extension=php_gd2.so. У меня по умолчанию этой либы не было в php, пришлось ставить отдельно.
cd /usr/ports/lang/php5-extensions/ make install clean
Перезапускаем apache и проверим работают ли примеры которые нам предлагает pChart.
Если все хорошо тогда идем дальше, если нет разбираемся в чем же проблемы )
less /var/log/httpd-error.log.
3)Теперь осталось написать парсер для файла с данными pfctl -si > data.log .
2000){
И добавляем этот фаил в скрипт отрисовки графика. require_once(«/usr/local/www/data/graf/parse.php»);
$base=fopen("base.log","r");
$tmp=fread($base,728);
fclose($base);
$base=fopen("base.log","w+");
fwrite($base, $tmp);
fclose($base);
}
$data_calc=fopen("base.log","r");
$my_time;
$my_byte_in;
$my_byte_out;
$max_traf;
$i=0;
$max_traf=0;
while ($i<24){
$line=fgets($data_calc,4096);
preg_match("/([0-9]{2})+:+[0-9]{2}+:[0-9]{2}+\s+([0-9]{3,})+\s+([0-9]{3,})/", $line,$sort);
$my_time[$i]=$sort[1];
$my_byte_in[$i]=$sort[2]/1048576;
$my_byte_out[$i]=$sort[3]/1048576;
if($max_traf<$sort[2]){$max_traf=$sort[2];}
if($max_traf<$sort[3]){$max_traf=$sort[3];} $i++; } $DataSet->AddPoint($my_byte_in,"Serie1");
$DataSet->AddPoint($my_byte_out,"Serie2");
$DataSet->AddPoint($my_time,"Serie3");
?>
Далее напишем скрипт на баше и создадим правило в crontabe чтоб дынные постоянно обновлялись.
#!/usr/local/bin/bash cd /home/data/graf/ /sbin/pfctl -si > /home/data/graf/data.log /sbin/pfctl -Fi #Очистить счетчик /usr/local/bin/php /home/data/graf/Example2.ph
Ну и правило в кронтабе выполнять скрипт раз в час ну или как вам нравиться.
crontab -e откроется редактор vi, жмем кнопку i и пишем правило 0 */1 * * * /home/data/graf/traf.sh
Что бы выйти из редактора жмем Esc, Shift+ZZ(я так выхожу). Или Esc :wq