[linux-guvenlik] arpwatch-arpsnmp

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Taner Karagöl (karagol@aselsan.com.tr)
Date: Wed 13 Feb 2002 - 11:34:53 EET


x-gfisavedcharset: iso-8859-9
Content-Type: text/plain;
        charset="iso-8859-9"
Content-Transfer-Encoding: quoted-printable

Sonunda =E7al=FD=FEt=FDrd=FDm. Ald=FD=F0=FDm notlar ekte, belki =
i=FEinize yarar.

------------------------------------------------------

-- Attached file included as plaintext by Listar --
-- File: redhat.txt

Author: Taner Karagol
taner@karagol.net
http://karagol.net

Konu:arpwatch-arpsnmp kurulumu ve çalıştırılması.
Sebep:Büyük networklere sahip şirketlerde ağa yetkisiz girişler/değişiklikler tehlikeli olabilmektedir.

Platform:Redhat 7.1
-------------------
Standart kernel kullanmıyorum. Kernel'ı yeniden compile ettim. Sadece kullandığım donanıma özgü şeyler ekledim/çıkardım. arpwatch için özel bir ayar yok.

libpcap
------------------------------------------------------------
Network kartının promiscuous modda çalışabilmesi için gerekli.
Snort ve arpwatch gibi uygulamalar ihtiyaç duyuyor.

/libpcap-0.6.2
./configure
make
make install

=============================================================

arpwatch
-------------------------------------------------------------
ağdaki ip/mac adresi bilgilerini karşılaştırıyor ve bir mismatch olduğunda mail ile bildiriyor. ip/mac bilgilerini ağı sniff modunda dinleyerek ve snmp kullanarak alabiliyor.

/arpwatch-2.1a4
./configure
make
make install

/usr/local/sbin altına install ediyor. Linux kurulumu sırasında arpwatch paketini seçtiyseniz sisteminizden eski dosyaları silmeyi unutmayın. Yada binary dosyaları eskilerinin yerine kopyalayın. Redhat'da eski dosyalar /usr/sbin altında.

Yeni kompile edilenleri eskilerinin üzerine overwrite yapıldığında init.d/arpwatch script kullanarak servisi stop işleminde FAILED veriyor. Bunun nedeni aslinda arpwatch zaten çalışmıyor çünkü arp.dat dosyasını bulamıyor. Bu nedenle /etc/sysconfig/arpwatch dosyasında OPTIONS='/var/arpwatch/arp.dat' şeklinde arp.dat dosyasının belirtilmesi gerekiyor. Şimdi /etc/init.d/ içindeki arpwatch script düzgün çalışır. Artık /usr/local/sbin/ altındakiler silinebilir.

Slachware linux için yukarıdaki sorunlar olmuyor çünkü /etc/init.d/ aldında arpwatch ile ilgili bişey yok.

arpfetch, snmp ile mac/ip bilgilerini alan ve bunu arpsnmp'nin kullanabileceği formata dönüştüren bir shell script dosyasidir. Bu script cisco için yazılmış, sizin kullandığınız snmp cihazının output'u farklı olabilir, bu nedenle script'e değişiklikler yapmanız gerekebilir. Öncelikle belirtmek gerekirki arpsnmp programına input olacak data dosyasının formatı şöyle olmalı (en azından benim kullandığım versiyonda böyle:2.1a4):

<mac adress><tab boşluğu><ip adresi>
........
........

Örneğin:

0:8:15:de:45:8e 192.168.1.43
50:80:12:34:ab:45 192.168.1.40
........
........

arpfetch script'i snmp cihazına bağlanıp mac/ip bilgilerini alıp yukarıdaki formata dönüştürmeli. Bir diğer konu ise snmp community object name. arpfetch scriptinin içine baktığınızda what="ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress" göreceksiniz. Buradaki büyük/küçük harf dikkat edin. Eski sürümlerin scriptlerinde hepsi küçük yazılmış olabilir, ve sizin snmp cihazınız büyük/küçük ayırımı yapıyor olabilir.

./arpfetch <snmp ip> <read only community name> > macip.txt komutunu çalıştırın.

macip.txt dosyasının içine bakın ve yukarıdaki formatta olup olmadığını kontrol edin. arpfetch script'i cisco için yazıldığından macip.txt dosyasının formatı büyük ihtimalle farklı olacak (Bende mac adresinde sıfır olanları yazmamış ve her ip numarasının sonuna : işareti eklemişti). Şimdi işimiz snmp'den gelen bilgileri düzgün bir şekilde formatlamak. Bunun için arpfetch scriptin içindeki sed komutunun parametrelerini değiştiricez.

Öncelikle snmp cihazından gelen verinin formatının nasıl olduğunu bilmek ne yapacağımız konusunda bizi yönlendirir. Şu komut işimize yarar.

snmpwalk <snmp ip> <community name> <what:ip.ipNetToMediaTable....> > raw.data

Örneğin bende ortaya çıkan sonuç (raw.data dosyası):

ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.2049.192.168.1.43 = 0:8:15:de:45:8e
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.2049.192.168.1.40 = 50:80:12:34:ab:45
........
........

arpfetch içindeki sed komut satırlarından ilk sıradaki mutlaka olmak zorunda. İlk komutun anlamı; satırın başından itibaren ip numaralarına kadar olan yeri sil. Ayrıntılı bilgi için sed'in manuallerine bakabilirsiniz ama çok karışık. İlk komuttan sonra verimiz şu hale geldi:

192.168.1.43 = 0:8:15:de:45:8e

Satır sonlarındaki \ işareti komutun bitmediğini ve devap ettiğini gösterir. Her satırdaki komutun ne yaptığını görmek faydalı olur, örneğin ikinci komut satırının ne yaptığını görmek için şu komutu yazmak yeterli.

sed -e 's/ = *Hex: /=/' raw.data > raw1.data

Bu komut bendeki verilerde hiçbir değişiklik yapmadı. Bu komutun anlamı: her satırda bulduğun " = *Hex: " yerine "=" işareti koy. Sizin göreceğiniz üzere benim input verilerimde "Hex" ile ilgili hiç bir şey yok. Bu nedenle bu komut satırında değişiklik yapıp şu hale getiriyorum:

sed -e 's/ = /=/' raw.data > raw1.data

Böylece eşittir işaretinin sağındaki ve solundaki boşlukları kaldırmış oluyoruz. Şimdi sıra ip ve mac adreslerinin yerlerini değiştirmekte.

sed -e 's/\(.*\)=\(.*\)/\2 \1/' raw1.data > raw3.data

Sonuçta elde ettiğimiz verilerin formatı tam istediğimiz gibi. Diğer sed komut satırlarını arpfetch'den silebilirsiniz.

Final olarak arpfetch dosyası şu şekilde oldu benim için:

---------arpfetch--------

#!/bin/sh
# @(#) $Header: arpfetch,v 1.3 96/11/07 17:39:10 leres Exp $ (LBL)
#
# arpfetch - collect arp data from a cisco using snmpwalk
#
if test $# -ne 2; then
 echo "usage: $0 host cname"
 exit 1
fi
#
host=$1
cname=$2
temp=/tmp/arpfetch.temp.$$
errs=/tmp/arpfetch.errs.$$
what="ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress"
#
# Get the data
#
snmpwalk -v 2c $host $cname $what > $temp 2>&1
#
# Try to make up for the fact that snmpwalk doesn't write errors to stderr
#
grep -v $what $temp > $errs
if test -s $errs; then
        cat $errs 1>&2
        rm -f $temp $errs
        exit 1
fi
#
# Convert the results

sed -e 's/^ip\.ipNetToMediaTable\.ipNetToMediaEntry\.ipNetToMediaPhysAddress\.[0-9][0-9]*\.//' \
    -e 's/ = /=/' \
    -e 's/\(.*\)=\(.*\)/\2 \1/' $temp | \
    tr A-Z a-z
#
rm -f $temp $errs

------end of arpfetch------

Not: Yukarıdaki script içinde snmpwalk parametresi için "-v 2c" kullandım. Bu snmp versiyonunu gösterir. Sizin bağlanmaya çalıştığınız snmp cihazının desteklediği versiyonu kullanmalısınız. Öğrenmenin en kolay yolu deneme yapmak.

Artık arpfect kullanarak düzgün bir mac/ip bilgisi elde edebiliriz:

./arpfetch <snmp host ip> <community name> > macip.txt

Ve şimdi sıra arpsnmp kullanarak macip.txt bilgilerini işleyebiliriz.

arpsnmp -f /var/arpwatch/arp.dat macip.txt

Bu işlem bittikten sonra root posta kutusunda bi sürü mail göreceksiniz yeni işlenen kayıtlarla ilgili olarak. Artık tek iş tüm işlerin otomatikleştirilmesi. Bunun için arpwatch paketinin içinden çıkan bihourly scriptini saatte bir çalıştırmak. Tabiki script içindeki pathleri düzeltmek gerekiyor öncelikle.

arpsnmp kullanıyorsanız artık arpwatch kullanmanıza gerek kalmaz.

==============================================================

-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.

Listeden çıkmak için: 'linux-guvenlik-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.