>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, так что лучше иметь для статистики отдельную машину, если пользуете базу данных.
З.Ы. Тема простая, но объемная много простых нюансов которые следует учитывать.