l7filter статистики с MRTG – Gentoo
от Илия Няголов на ное..26, 2007, категории Линукс
Един ден след като повечето неща бяха готови на единия ми ppp терминал реших да наблюдавам трафиците на различните видове протоколи, за целта реших да използвам l7filter, как се инсталира съм обяснил подробно тук.
1. За да може MRTG да направи дадена графика му трябва информация за вхдящия и изходящия поток на дадено нещо. В случая тези неща са моите протоколи които искам да следя по трафик. Тази информация ще е взема от IPTABLES посредством малко правила създадени от мен.
За целта си създавам скрипт rc.l7filter който зарежда след „/etc/init.d/iptables“.
#!/bin/sh
#rc.l7filterIPTABLES=“/sbin/iptables“
$IPTABLES -F
$IPTABLES -X
#$IPTABLES -Z$IPTABLES -N l7filter-in
$IPTABLES -N l7filter-out#Ще следя следните протоколи: bittorrent, http, edonky, irc, skypetoskype, ssh, rlogin, vnc.
#За повече информация посетете: http://l7-filter.sourceforge.net/protocols$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto bittorrent -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto http -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto edonkey -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto irc -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto skypetoskype -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto ssh -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto rlogin -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto vnc -j ACCEPT$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto bittorrent -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto http -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto edonkey -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto irc -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto skypetoskype -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto ssh -j ACCEPT
$IPTABLES -t filter -A l7filter-out -s 22.211.18.0/24 -d 0/0 -m layer7 –l7proto rlogin -j ACCEPT
$IPTABLES -t filter -A l7filter-in -d 22.211.18.0/24 -s 0/0 -m layer7 –l7proto vnc -j ACCEPT$IPTABLES -A FORWARD -j l7filter-in
$IPTABLES -A FORWARD -j l7filter-out
2. До тук добре, но MRTG трябва от някъде да вземе тези резултати, за целта създавам файла „/usr/local/bin/l7filter“.
#!/bin/bash
#/usr/local/bin/l7filter
IPTABLES=“/sbin/iptables“
GREP=“/bin/grep“
AWK=“/bin/awk“DATE=`uptime | $AWK ‘{ print $3, $4, $5 }’`
if [ $1w = ‘w’ ]; then
echo „nema ni6to“
exitelse
#otdeliane na torrent trafika
if [ $1 = torrent ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP bittorrent | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP bittorrent | $AWK ‘{ print $2 }’`
NAME=’torrent’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = http ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP http | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP http | $AWK ‘{ print $2 }’`
NAME=’http’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = edonkey ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP edonkey | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP edonkey | $AWK ‘{ print $2 }’`
NAME=’edonkey’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = irc ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP irc | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP irc | $AWK ‘{ print $2 }’`
NAME=’irc’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = skypetoskype ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP skypetoskype | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP skypetoskype | $AWK ‘{ print $2 }’`
NAME=’skypetoskype’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = ssh ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP ssh | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP ssh | $AWK ‘{ print $2 }’`
NAME=’ssh’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = rlogin ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP rlogin | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP rlogin | $AWK ‘{ print $2 }’`
NAME=’rlogin’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEelse if [ $1 = vnc ]; then
OUTPUT=`$IPTABLES -nvxL l7filter-out | $GREP vnc | $AWK ‘{ print $2 }’`
INPUT=`$IPTABLES -nvxL l7filter-in | $GREP vnc | $AWK ‘{ print $2 }’`
NAME=’vnc’echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAMEfi fi fi fi fi fi fi fi
fi
3. Приемаме че вече сте инсталирали MRTG и сега нека видим част от неговия конфигурационен файл:
cat mrtg_l7filter.conf
WorkDir:/var/www/localhost/l7filter
Refresh:300
RunAsDaemon: no
Interval: 5
#NoMib2: yes
Language:bulgarianOptions[index]: bits
Target[index]: `/usr/local/bin/l7filter torrent`
MaxBytes[index]: 10000000000
XSize[index]: 600
YSize[index]: 160
Title[index]: l7filter
#PageTop[index]: <h1>l7filter</h1>
PageTop[index]: <table cellspacing=“0″ cellpadding=“10″ border=“0″ width=“100%“ align=“center“><tr><td valign=“top“ class=“small“><table cellspacing=“0″ cellpadding=“5″ border=“0″ width=“100%“><tr><td class=“tableh“>Protocols</td></tr><tr><td bgcolor=“blue“ ><a href=“/l7filter/index.html“>torrent</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index2.html“>http</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index3.html“>edonkey</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index4.html“>irc</a></td></tr></tr><tr><td class=“tablesh“><a href=“/l7filter/index5.html“>skypetoskype</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index6.html“>ssh</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index7.html“>rlogin</a></td></tr><tr><td class=“tablesh“><a href=“/l7filter/index8.html“>vnc</a></td></tr></table></td><td>
PageFoot[index]: </td></tr></table>
AddHead[index]: <meta http-equiv=’Expires’ content=’-1′><style><!– body { text-align: center; background-color: #CCCCCC; font-size: 10pt; font-family: arial, verdana; } th, td { font-size: 10pt; font-family: arial, verdana; } h3 { font-size: 12pt; font-family: arial, verdana; font-weight: bold; } .small { font-size: 8pt; font-family: arial, verdana; } .tableh { font-size: 10pt; font-family: arial, verdana; color: white; background-color: black; font-weight: bold; } .tablesh { font-size: 10pt; font-family: arial, verdana; color: black; background-color: #999999; font-weight: normal; } a:visited, a:active, a:link { text-decoration: none; font-weight: normal; font-family: arial, verdana; color: black; } a:hover { font-weight: normal; font-family: arial, verdana; background-color: #999999; color: white; } –></style>
От тук можете да изтеглите целия фаил mrtg_l7filter.conf.
4. Приемам ме че сте инсталирали и Apache. Добавяте файла „l7filter.conf“ в „/etc/apache2/vhosts.d“ и рестартирате web сървъра.
#/etc/apache2/vhosts.d/l7filter.conf
Alias /l7filter /var/www/localhost/l7filter<Location /l7filter>
Order deny,allow
Deny from all
Allow from 22.211.18.13 22.211.18.12 #адресите от които искате да наблюдавате статистиките# Allow from ::1
# Allow from .example.com
</Location>
Създаваме директорията „l7filter“ в „/var/www/localhost/“
mkdir /var/www/localhost/l7filter
5. От точка три се вижда че MRTG ще обновява графиката на всеки 300 секунди (5мин), затова добавяме файла „mrtg_l7filter“ в „/etc/cron.d“. По този начин на всеки пет минути ще даваме данните на MRTG за трафиците и тя ще обновява графиката.
*/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg_l7filter.conf > /dev/null
След десет минути като сте приключили с всичко проверете: http://127.0.0.1/l7filter/index.html 🙂
Малко screenshots: