The OpenNET Project / Index page

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



"Раздел полезных советов: Статистика сетевых соединений через syslog и iptables"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Статистика сетевых соединений через syslog и iptables" +/
Сообщение от sash (??), 29-Ноя-05, 23:30 
>2Dread
>Камрад. Если у тебя есть реальный рабочий пример настроек и скриптов для
>ведения статистикик по ulog,  под линукс скажем Mandrake, то я
>был бы очень признателен.

Выкладывать пример скрипта не буду, но система следующая:

1. iptables+ipt_ULOG+ulogd+mysql
2. Создаете табличку в mysql, указываете ее в настройках ulogd
3. пишите правило вроде: iptables -A FORWARD -j ULOG
4. запускаете iptables/mysql/ulogd

Получаете в таблице развернутую попакетную статистику. Для оптимизации таблицы написал следующее на пхп:

        mysql_query("DROP TABLE tmp;");
        mysql_query("CREATE TABLE tmp (ip_saddr INT UNSIGNED, ip_daddr INT UNSIGNED, ip_protocol TINYINT(2) UNSIG
NED,
             ip_totlen INT(8) UNSIGNED, tcp_sport SMALLINT UNSIGNED, tcp_dport SMALLINT UNSIGNED,
             udp_sport SMALLINT UNSIGNED, udp_dport SMALLINT UNSIGNED, time INT(10) UNSIGNED, INDEX(time));");

        $i=0;
        $rows=mysql_query("SHOW TABLE STATUS LIKE 'traffic';");
        $rows=mysql_result($rows, 0, 'Rows');

        while($i<=$rows):
        mysql_query("INSERT INTO tmp SELECT * FROM traffic LIMIT 300000;");
        mysql_query("INSERT INTO cache (ip_saddr,ip_daddr,ip_protocol,ip_totlen,tcp_sport,tcp_dport,udp_sport,udp
_dport,time)
             SELECT ip_saddr,ip_daddr,ip_protocol,sum(ip_totlen),tcp_sport,tcp_dport,udp_sport,udp_dport,time
             FROM tmp GROUP BY ip_saddr,ip_daddr,ip_protocol,tcp_sport,tcp_dport,udp_sport,udp_dport,time ORDER B
Y time;");
        mysql_query("DELETE FROM tmp;");

        if($rows-$i<300000)
            {
                $temp=$rows-$i;
                $query="DELETE FROM traffic LIMIT $temp;";
            } else {
                $query="DELETE FROM traffic LIMIT 300000;";
            }

        mysql_query($query);
        $i=$i+300000;
        endwhile;

        mysql_query("DROP TABLE tmp;");
        mysql_query("OPTIMIZE TABLE traffic;");


В таблицу traffic собсно складывается статистика. Идея скрипта - агрегировать статистику по пакетам в статистику по соединениям. Насколько это мне удалось - судить сложно, есть нюансы с mysql 4.1.

Дальше вы можете генерировать какие угодно отчеты:
- по портам
- протоколам
- оправителям получателям
- и т.д.

Учтите, если вы используете прокси на этой же машине надо будет отдельно настраивать ulog для порта прокси, вроде:

iptables -A INPUT -p tcp --dport 3128 -d $IP_PROXY -s $SUBNET_LOCAL -m state --state NEW,ESTABLISHED -j ULOG
iptables -A OUTPUT -p tcp --sport 3128 -s $IP_PROXY -s $SUBNET_LOCAL -m state --state NEW,ESTABLISHED -j ULOG

Последнее, нагрузка на mysql - 512k - 2-3%, и еще 10% wa, так что лучше иметь для статистики отдельную машину, если пользуете базу данных.

З.Ы. Тема простая, но объемная много простых нюансов которые следует учитывать.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Раздел полезных советов: Статистика сетевых соединений через syslog и iptables, auto_tips, 29-Ноя-05, 13:55  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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