SNMP ile Linux sunucunun bandwidth verilerini izlemek

Linux sunucunuzun ne kadar bandwidth kullandığını merak ediyorsanız ve veri alabileceğiniz switch/router sizin kontrolünüzde değilse linux üzerine SNMPd kurarak bu verileri alabilirsiniz. Gerekenler;

1- Iptables ayarları,
2- Gerekli BASH scriptleri,
3- SNMPd kurulması,
4- SNMP testleri

1. IPTABLES ayarları

Bandwitdh verisi en kolay iptables üzerinden alınabileceği için IPtables kurulması ve birkaç kural yapılması gerekiyor. Bunlar; inbound ve outbound trafik için yeni IPtables chain oluşturulması ve isim verilmesi.

# iptables -N inbound_traffic
# iptables -N outbound_traffic
# iptables -I INPUT 1 -j inbound_traffic
# iptables -I OUTPUT 1 -j outbound_traffic

2. Gerekli BASH scriptleri
Daha sonra SNMPd servisi için sistemin IP adreslerini alacak scriptin hazırlanması. Script -g parametresiyle veri alacaktır. -i parametresi ise sadece index içindir.
(/usr/local/bin/traffic_ip.sh)

#!/bin/bash
case “$1” in
-g)
ifconfig | grep “inet addr” | grep “Bcast:” | awk ‘{print $2}’ | awk -F: ‘{print $2}’
;;

-i)
ipcount=`ifconfig | grep “inet addr” | grep “Bcast:” | awk ‘{print $2}’ | awk -F: ‘{print $2}’ | wc -l`
for i in `seq 1 $ipcount`; do
echo $i;
done
exit $ipcount # OID .1.3.6.1.4.1.2021.49.42.100.1
;;

*)
exit 254
;;
esac

Daha önce oluşturulan iptables chainlerine trafiği oluşturmak için aşağıdaki script kullanılacaktır.
(/usr/local/bin/traffic_gen.sh )

#!/bin/bash

case “$1” in
-f)
iptables -F inbound_traffic;
iptables -F outbound_traffic;
;;
esac

for ip in `/usr/local/bin/traffic_ip.sh -g`; do
iptables -vnL outbound_traffic | grep $ip || iptables -A outbound_traffic -i ! lo -s $ip;
iptables -vnL inbound_traffic | grep $ip || iptables -A inbound_traffic -o ! lo -d $ip;
done

Daha önce oluşturulan iptables tablolarından trafik verisi okumak için aşağıdaki script kullanılacaktır.

(/usr/local/bin/traffic_get.sh)

#!/bin/bash
[ $1 ] || exit 42;

iptables -vxnL $1_traffic | grep -v Chain | grep -v bytes | awk {‘print $2’}

3. SNMPd kurulması
SNMPd servisini kurup ayarlarını tamamlayın. Debian tabanlı sistemlerde apt-get install snmpd komutu ile kolayca kurulacaktır. Kurulumdan sonra /etc/snmp/snmpd.conf dosyasında aşağıdaki satırları ekleyin. (Aşağıdaki satırlar dosyada bulunması gereken minimum ayarlardır, orjinal dosyayı başka bir isme taşıyıp yeni dosyaya sadece bu satırları yazmanız da yeterli olacaktır.)

com2sec readonly default public
group MyROGroup v1 readonly
group MyROGroup v2c readonly
view all included .1 80
access MyROGroup “” any noauth exact all none none

exec .1.3.6.1.4.1.2021.49 iplist /usr/local/bin/traffic_ip.sh -g
exec .1.3.6.1.4.1.2021.49.42 ipindex /usr/local/bin/traffic_ip.sh -i
exec .1.3.6.1.4.1.2021.50 inbound_traffic /usr/bin/sudo /usr/local/bin/traffic_get.sh inbound
exec .1.3.6.1.4.1.2021.51 outbound_traffic /usr/bin/sudo /usr/local/bin/traffic_get.sh outbound

Yapılandırma dosyasını oluşturduktan sonra SNMPd servisini yeniden başlatmanız gerekir. Bu amaçla “/etc/init.d/snmpd restart” komutunu kullanın.

Debian sistemlerde SNMPd “snmp” kullanıcısı ile çalıştığı için bu kullanıcıya sudo ile çalıştırma yetkisi vermek gerekiyor. Bunun için aşağıdaki satırın /etc/sudoers dosyasına eklenmesi yeterli olacaktır.

snmp ALL = NOPASSWD: /usr/local/bin/traffic_get.sh

4. SNMP testleri
Ayarlar tamamlandığına göre sıra son testlerde;

Gelen trafik bilgisi için ;

snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.50

Giden trafik bilgisi için ;

snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.51

komutlarını verin. Herhangi bir problem yoksa byte olarak o ethernetten geçen trafikleri görebilirsiniz.

Not : SNMPd servisine dışarıdan erişmek için TCP/UDP 161, UDP 162 portlarını açmayı unutmayın.

Leave a Reply


*

This site uses Akismet to reduce spam. Learn how your comment data is processed.