Pocitadlo prenesenych dat

28.02.2004 11:47 | blackhole

Obcas na sieti si potrebujeme zistit mnozstvo prenesenych dat jednotlivych pocitacov v lokalknej sieti.
V tomto clanku sa pokusim popisat zhotovenie jednoducheho scriptu pocitadla prenesenych dat smerov od uzivatela a aj k nemu. Nepotrebujeme k tomu ziadnu specialnu utilitu, len podporu iptables a MAC adresy vsetkych sietoviek, ktorym chceme pocitat data. Mac adresy zistime prikazom arp.

Priklad:
V lokalnej sieti mame 3 pocitace. Ich IP adresy su 192.168.0.11, 192.168.0.12 a 192.168.0.13. Pouzijeme prikaz arp na ziskanie ich IP adries. Pocitace musia byt zapnute a \"robit\" traffic :

root@pik4cu:~# arp -i eth1
Address HWtype HWaddress Flags Mask Iface
192.168.0.11 ether 00:02:44:70:B2:5A C eth1
192.168.0.12 ether 00:60:08:BE:6B:AA C eth1
192.168.0.13 ether 00:02:44:72:64:49 C eth1

Teraz si vytvorime jednoduchy scriptik, ktory nam zabezpeci jednoduchy firewall, maskaradu a pocitanie dat.
vi /etc/rc.d/rc.iptab

#!/bin/sh
IPTABLES=\"/usr/sbin/iptables\"
LOOPBACK=\"lo\"
INTERNAL=\"eth1\" #interface lokaknej sietovice
EXTERNAL=\"eth0\" #interface sietovky ktorou sa pripajame na net
INTERNAL_NET=\"192.168.0.1\" #ip adresa rutra
INTERNAL_NET1=\"192.168.0.11\" #ip adresa suseda Miska
INTERNAL_NET2=\"192.168.0.12\" #ip adresa suseda Janka
INTERNAL_NET3=\"192.168.0.13\" #ip adresa suseda Mareka
EXT_IP=\"10.1.51.100\" #ip adresa sietovky ktorou sa pripajame k \"netu\" :)
LOG_LEVEL=\"notice\" #logovanie

start () {
echo \"Starting firewall and iptables services ...\"
#zrusime predchadzajuce pravidla iptables
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -X #zrusime vsetky vytvorene vlastne fronty
#nastavime politiku frontov
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
#mac adresy nahradime vlasnymi mac adresmi
$IPTABLES -A FORWARD -s $INTERNAL_NET1 -m mac --mac-source 00:02:44:70:B2:5A -j ACCEPT
$IPTABLES -A FORWARD -d $INTERNAL_NET1 -j ACCEPT
#
$IPTABLES -A FORWARD -s $INTERNAL_NET2 -m mac --mac-source 00:60:08:BE:6B:AA -j ACCEPT
$IPTABLES -A FORWARD -d $INTERNAL_NET2 -j ACCEPT
#
$IPTABLES -A FORWARD -s $INTERNAL_NET2 -m mac --mac-source 00:02:44:72:64:49 -j ACCEPT
$IPTABLES -A FORWARD -d $INTERNAL_NET2 -j ACCEPT
#
#maskarada
$IPTABLES -F -t nat
$IPTABLES -t nat -X
#
#maskovanie pre server
$IPTABLES -t nat -A POSTROUTING -o $EXTERNAL -s $INTERNAL_NET -j SNAT --to-source $EXT_IP
#
#
#maskovanie pre lokalku
$IPTABLES -t nat -A POSTROUTING -o $EXTERNAL -s $INTERNAL_NET1 -j SNAT --to-source $EXT_IP
#
$IPTABLES -t nat -A POSTROUTING -o $EXTERNAL -s $INTERNAL_NET2 -j SNAT --to-source $EXT_IP
#
$IPTABLES -t nat -A POSTROUTING -o $EXTERNAL -s $INTERNAL_NET3 -j SNAT --to-source $EXT_IP
}

#zrusenie vsetkych pravidel iptables

stop () {
echo \"Stopping firewall and iptables services ...\"
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP
}

#status prenesenych dat

status () {
$IPTABLES -vL;$IPTABLES -t nat -vL;$IPTABLES -t mangle -L
}

restart () {
stop
start
}

case \"$1\" in

start)
start
;;

stop)
stop
;;

status)
status
;;

restart)
restart
;;

*)
status
echo \"usage: {start|stop|status|restart}\"
exit 1

esac
exit $?

Takze zakladny scriptik by sme mali hotovy. Aby sme tento script mohli spustat, musime mu zadat parameter x, t.j:
chmod u+x rc.iptab

Aby sme zaistili spustanie po kazdom restarte, tak do suboru /etc/rc.d/rc.local pridame tento riadok:
/etc/rc.d/rc.iptab start

Pokracovat budeme vytvorenim dalsieho scriptu, ktory nam zaisti update prenesenych dat a prehladny vypis.
vi /etc/rc.d/rc.send

#!/bin/sh
HTM=\"/var/www/htdocs/acctab\" #vystupny subor s vypisom
SCRIPT=\"/usr/sbin/iptables\" #cesta k iptables

# rm $HTM
$SCRIPT -vL > $HTM

Tymto scriptom zaistime vypis do suboru v strukture webu. Takze, ak si chceme pozriet pocet prenesenych dat, zadame do www browsera adresu http://localhost/acctab a tam sa nam zobrazi jednoduchy vystup prenesenych dat. Aby sme zaistili updatovanie, pouzijeme crontab.
crontab -e
Dopiseme tam tento riadok:
0-55/5 * * * * /etc/rc.d/rc.send

Pre jednoduchsie prezeranie doporucujem do suboru /etc/hosts dopisat IP adresy a hosty nasich kolegov, cim zaistime, ze sa nam nebudu zobrazovat IP adresy vo vypise, ale nazvy \"pocitacov\".
vi /etc/hosts
a dopiseme
192.168.0.11 misko.lokalka.sk
192.168.0.12 janko.lokalka.sk
192.168.0.13 marek.lokalka.sk

A to by bolo vsetko :)
Nevyhoda: ak sa restartuje PC tak sa vsetky udaje stratia :)
Pre uchovavanie udajov aj po restarte doporucujem soft sasacct, na ktory navod napisem o par dni.alwarez