Fórum Root.cz
Hlavní témata => Sítě => Téma založeno: Tomask 06. 12. 2013, 13:14:44
-
Dobrý den, mám tu takový pro mě oříšek.
Potřebuji nějak měřit traffic v (asi v kilobajtech) na jednotlivé IP adresy a zapisovat je do databáze.
Asi nejlepší by to bylo pomocí iptables , jelikož na routeru mi nic jiného než linux a php neběží a ukládalo by se to do vzdálené databáze.
Potřeboval bych nějak v PHP udělat dotaz přes iptables na jednotlivé IP na in a out a kolik dat proteklo (download a upload), jelo by to pak v cronu např. co 5 minut.
Prosím o jakoukoliv radu nebo script, jak toto udělat.
Děkuji.
-
Není lepší pro zjišťování z iptables a vkládání do db použít bash a php by to četlo z DB?
-
Pořádně takhle: http://mbrownnyc.wordpress.com/2011/12/06/implement-netflow-on-centos/
Jednoduše takhle: http://www.catonmat.net/blog/traffic-accounting-with-iptables/
-
http://ipaccounting.standus.com/
-
Děkuji, ale z tohoto to do kupy nedám, jelikož iptables neovládám, nechápu systém co je chain atp. navíc nechci ukládat data do nějakého texťáku, ale jinam do databáze.
Spíše by mi pomohlo nějaký příklad třeba rozhraní eth0, konkrétní třeba 2 adresy (in out) a zápis do mysql, pokud to nebude přes php, ale jen scriptem spouštěným co 5 minut. Výstupem by měl být zápis do tabulky mysql databáze typ,ip, datum, velikost(bytes) např.:
download 192.168.200.120 2013-12-06 12:05:00 2568666
upload 192.168.200.120 2013-12-06 12:05:00 7768666
download 192.168.200.150 2013-12-06 12:05:00 12565286
upload 192.168.200.150 2013-12-06 12:05:00 73768666
Kdyby nějaká ochotná duše toto dala jako příklad, moc by mi to pomohlo.
šlo by to takto nějak?
Děkuji za ochotu.
-
Děkuji, ale z tohoto to do kupy nedám, jelikož iptables neovládám, nechápu systém co je chain atp.
V tom případě to nedáš, zas tak jednoduchý to není.
Kdyby nějaká ochotná duše toto dala jako příklad, moc by mi to pomohlo.
šlo by to takto nějak?
Děkuji za ochotu.
Pokud se v iptables vůbec neorientuješ a neumíš si ani napsat skript, který vyparsuje něco z výstupu příkazu a uloží to do databáze, tak ti příklad nepomůže. To by ti to ten někdo musel kompletně napsat a zprovoznit.
-
Pokud se ti nechce, nebo neumíš dělat bash scripty, můžeš to zkusit s ULOGem, kterým necháš projet všechen provoz a k němu je modul na zápis do mysql, takže pak si můžeš už jenom hrát s daty v DB.
http://blog.sflow.com/2010/12/ulog.html (http://blog.sflow.com/2010/12/ulog.html)
-
Napadá mě opět to samé, co mě napadne vždy při čtení podobného dotazu. Proč ten server prostě nemá na starost někdo, kdo ví co dělá? Ono to sice stojí peníze, ale zase se tomu potom neříká "bastlení" a přidaná hodnota je, že to "nezkurví". Myslet si, že se o server náležitě postará někdo kdo o něm nic neví je opravdu velmi hloupé...
-
Nechapu proc tu pan vubec pise,
tohle forum neni udelatko "vlastnich" programku !
-
Analyse this! :) (víc pod nos to už dát nejde)
#!/bin/bash
#
# IP Accounting v 1.1
# Tento program slouzi ke statistice sitoveho provozu pro jednotliva IP
# Created by standus - standus at standus.com
active_iface="eth0 eth1"
dir_data_txt="/var/www/html/ipaccounting"
dir_data_rdd="/var/www/html/ipaccounting/rrd"
rdd_active="on"
txt_active="on"
testing_active="on"
# Testovani pravidel a chainu v IPTABLES
if [ $testing_active == "on" ]; then
if [ "`iptables -t mangle -L POSTROUTING | grep "DATA_IN"`" == "" ]; then
echo "Pridavam chain DATA_IN"
iptables -t mangle -N DATA_IN
iptables -t mangle -A POSTROUTING -j DATA_IN
fi
if [ "`iptables -t mangle -L PREROUTING | grep "DATA_OUT"`" == "" ]; then
echo "Pridavam chain DATA_OUT"
iptables -t mangle -N DATA_OUT
iptables -t mangle -A PREROUTING -j DATA_OUT
fi
for iface in $active_iface; do
for ip in `cat /proc/net/arp | grep "$iface" | awk '{print $1}'`; do
echo "Testuji ip: $ip"
if [ "`iptables -t mangle -L DATA_IN -v -x -n | grep " $ip " | awk '{print $2}'`" == "" ]; then
echo "Pridavam pravidlo DATA_IN pro ip: $ip"
iptables -t mangle -A DATA_IN -d $ip -j RETURN
fi
if [ "`iptables -t mangle -L DATA_OUT -v -x -n | grep " $ip " | awk '{print $2}'`" == "" ]; then
echo "Pridavam pravidlo DATA_OUT pro ip: $ip"
iptables -t mangle -A DATA_OUT -s $ip -j RETURN
fi
done
done
fi
# Nacteni dat z IPTABLES
counter_file=`cat $dir_data_txt/data.txt`
data=`iptables -t mangle -L DATA_OUT -v -x -n -Z | sed -e 's/ /-/g' | grep "RETURN"`
for i in $data; do
ip=`echo $i | sed -e 's/-/ /g' | awk '{print $7}'`
out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
out_old=`echo -ne "$counter_file" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
out_new=`echo $out_old + $out | bc `
new_file_out="$new_file_out$ip-$out_new\n"
out_aver=$(($out / 120))
new_rdd_out="$new_rdd_out$ip-$out_aver\n"
echo -ne "$ip\tOUT\tstare: $out_old \tnove: $out \tsoucet: $out_new\trate: $out_aver\n"
done
data=`iptables -t mangle -L DATA_IN -v -x -n -Z | sed -e 's/ /-/g' | grep "RETURN"`
for i in $data; do
ip=`echo $i | sed -e 's/-/ /g' | awk '{print $8}'`
in=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
in_old=`echo -ne "$counter_file" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $3}'`
in_new=`echo $in_old + $in | bc `
new_file_in="$new_file_in$ip-$in_new\n"
in_aver=$(($in / 120))
new_rdd_in="$new_rdd_in$ip-$in_aver\n"
echo -ne "$ip\tIN\tstare: $in_old \tnove: $in \tsoucet: $in_new\trate: $in_aver\n"
done
# Zapsani hodnot do txt souboru (pocitadlo prenesenych dat)
if [ $txt_active == "on" ]; then
for i in `echo -ne $new_file_out`; do
ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
in=`echo -ne "$new_file_in" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
counter_data="$counter_data$ip-$out-$in\n"
done
echo -ne $counter_data > $dir_data_txt/data.txt
fi
# Zapsani hodnot do rrd databaze (grafy prenosu)
if [ $rdd_active == "on" ]; then
for i in `echo -ne $new_rdd_out`; do
ip=`echo $i | sed -e 's/-/ /g' | awk '{print $1}'`
out=`echo $i | sed -e 's/-/ /g' | awk '{print $2}'`
in=`echo -ne "$new_rdd_in" | grep "$ip-" | sed -e 's/-/ /g' | awk '{print $2}'`
if [ ! -e "$dir_data_rdd/host-$ip.rrd" ]; then
rrdtool create "$dir_data_rdd/host-$ip.rrd" --step 120 DS:in:GAUGE:600:0:U DS:out:GAUGE:600:0:U RRA:AVERAGE:0.5:1:3600;
fi
rrdtool update "$dir_data_rdd/host-$ip.rrd" -t in:out N:$in:$out
done
fi