The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Средство для контроля интернет трафика на Perl+MySQL+IPTables (traffic iptables linux statistic)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: traffic, iptables, linux, statistic,  (найти похожие документы)
From: Docmaster <docmaster@land.ru.> Newsgroups: email Date: Mon, 2 Feb 2006 14:31:37 +0000 (UTC) Subject: Средство для контроля интернет трафика на Perl+MySQL+IPTables IPTables это фильтр пакетов для ядер 2.4, 2,6. Пример использование iptables для контроля трафика: iptables -N trafin iptables -I input -e eth0 -s ! 123.123.123.0/24 -p all -j trafin iptables -A trafin -d 123.123.123.123 Или если используется цепочка FORWARD для трансляции пакета на другую машину. iptables -N trafin iptables -A FRORWARD -j trafin iptables -A trafin -d исходящий адрес В Perl можно использовать внешний вызов команды iptables, получать результат и обрабатывать через регулярные выражения, а можно использовать модуль IPTables-IPv4, написанный Derrik Paters (dpates@dsdk12net), который выложен на CPAN. Модуль позволяет работать с netfilter на уровне ядра системы и предоставляет удобный ООП интерфейс. Метод работы заключается в том, чтобы через определенный интервал времени опрашивать ядро, для получения информации о правилах в цепочке. Для хранения данных можно использовать файлы или использовать СУБД MySQL. Программа #!/usr/bin/perl use IPTables::IPv4; use DBI; $table=IPTables::IPv4::init('filter'); # подключение модуля к таблице filter. $dbh=DBI->connect('DBI:mysql:billing',undef,undef'); #подключение к базе billing $chainname='trafin'; #имя цепочки @rules=$table->list_rules($chainname); $i=0; # получаем массив ссылок на состояние всех правил в цепочке Для хранения # данных создана таблица с полями: ID,IP,TRAF,SUM, где поле TRAF # используется для отсчета оставшегося трафика, а SUM для суммирования # скаченного трафика. Обработка массива @rules foreach $lin (@rules){ $per=$$lin{"destination"}; # получения исходящего адреса $jump=$$lin{"jump"} $sql="SELECT ID,IP,TRAF,SUM FROM traffik WHERE IP='$per'"; # проверка на наличие ip в таблице $sth=$dbh->prepare($sql); #подготовка запроса $sth->execute; #выполнение запроса ($id,$ip,$traf,$sum)=$sth->fetchrow_array;# получения данных if($id ne "") # проверка на отсутсвия ip в таблице { # ip в таблице найден $traf-=$$lin{"bcnt"};#вычитаем трафик $traf=0 if $traf<=0 ; $sum+=$$lin{"bcnt"}; #сумируем весь трафик $sql="UPDATE traffik SET TRAF=$traf, SUM=$sum WHERE ID=$id";# забиваем таблицу if(($traf<=0)&&($$lin{"jump"} ne "DROP"))# Блокировка таблици при окончании трафика { $$lin{"jump"}="DROP"; # -j DROP $$lin{"pcnt"}=0; #обнуление счетчика пакетов $$lin{"bcnt"}=0; #обнуление счетчика байтов $table->replace_entry($chainname, $lin, $i)or die"Невозможно DROP'нуть правило :$!\n"; #изменение правила }elsif(($traf>0)&&($$lin{"jump"}eq "DROP")){ $table->replace_entry($chainname, {destination=>$$lin{"destination"},jump=>'ACCEPT'}, $i); # открываем доступ, если он был закрыт }; $dbh->do($sql);#Выполнения запроса } else { #нет ip в таблице #удаляем из netfilter правило с этим ip $table->delete_num_entry('billing',$i)or die "Невозможно удалить правило из цепочки chainname :$!\n"; $i--; }; $i++; }; $table->zero_entries($chainname); # Обнуление счетчиков байтов $success = $table->commit(); # Завершаем работу с netfilter $dbh->disconnect(); # Завершаем работу с MySQL. На основе этого трафика создается программа по контроля трафика, которая расположена, там же выложена документация по модулю IPTables-IPv4 [[http://docmaster.land.ru&#093;]

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, exn (??), 21:55, 29/08/2007 [ответить]  
  • +/
    Блин блин блин.. какбы от чтоб не от рута, какие есть альтернативы IPTables::IPv4: ?
     
  • 2, exn (??), 21:55, 29/08/2007 [ответить]  
  • +/
    Автору спасибо!
     
  • 3, andrew (??), 15:55, 19/10/2007 [ответить]  
  • +/
    IPTables::IPv4 не показывает source и destination адреса :( Кто нибудь сталкивался?
    вот содержимое хэша rules ( в user-defined цепочке )
    <pre>
           Hash
    pcnt=<число>
    jump=ACCEPT
    bcnt=<число>
           End.
    </pre>
    И все! А где source адресс? В правилах он есть!
     
  • 4, rax (??), 16:40, 28/12/2007 [ответить]  
  • +/
    $$lin{"pcnt"}=0;     #обнуление счетчика пакетов
    $$lin{"bcnt"}=0;     #обнуление счетчика байтов
    $table->replace_entry($chainname, $lin, $i)or die"Невозможно DROP'нуть правило :$!\n";

    Не происходит обнуление счетчиков в iptables.
    Кто нибудь знает в чем может быть дело?

     
  • 5, bartman (??), 11:37, 23/10/2008 [ответить]  
  • +/
    IPTables::IPv4 работает с ядрами старшее 22?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру