pf подсчет трафика

В качестве штатного фаервола я решил использовать 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){
$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");
?>
И добавляем этот фаил в скрипт отрисовки графика. require_once(“/usr/local/www/data/graf/parse.php”);

Далее напишем скрипт на баше и создадим правило в 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *