Derinlemesine Yolculuk:Terminal Üzerinde Apache Log İncelemesi
Merhaba arkadaşlar öncelikle bu blog yazım da siz değerli okurlarıma terminal üzerinden Apache Access Log dosyasının içerisindeki logları incelemeye çalışacağım. Keyifli okumalar diliyorum.
İlk olarak log dosyasını yapısını öğrenmek için log dosyasının head ve tail komutu
kullanarak okuyabiliriz.
'head' komutu bize dosya içerisindeki ilk 10 satırı getiremektedir.
'tail' komutu ise bize son 10 satırı getirmekle beraber –n parametresi
ile istediğimiz satır sayısında ekrana çıktı yazdırabiliriz.
Canlı bir sistem logunu okumak istersek –f parametresi
ile tail komutu anlık güncellemeler yaparak yeni oluşan logları görebilmemize imkan sağlayabilir.
'cat' komutu
ile de dosyanın içerisinde bulunan verilerin tamamını okuyabiliriz.
Yukarıda ki görsellerde de gördüğümüz üzere logların yapısını bilgi alabiliriz.
Yukardaki çıktıların sonuçlarını log dosyamızı nasıl bölümlere ayracağımızı tespit etmek için kullanacağız. Loglarımızı biraz daha anlamlı hale getirmek bölümlere ayırıyoruz.
Bunu yapabilmek için linux üzerinde bulunan 'cut' komutunu
kullanıyoruz. 'cut' komutu bir dosya içerisinde ki verileri istediğimiz gibi parçalara ayırma imkanı sağlar.
Komutumuz ile beraber parametre olarak –d parametresi
ile nasıl bölümleme yapmak istediğimizi belirtiyoruz örneğin “/” veya “-” gibi parametreler
verebiliriz.
Bu örnekte “space“ (" ") parametresini kullanıyorum.Bu parametre ile beraber aradığımız log bölümünü bulabilmek için –f parametresini
kullanıyoruz ve komutumuz son hali aşağıda ki gibi oluyor
cat <log_dosyası> | cut –d “ ” –f 1
Örnekte kullandığım komutta log dosyasının içerisinde bulunan IP adreslerini çekiyoruz.
Bu komutu çalıştırdığımızda bir sorun ile karşılaşıyoruz bir IP adresinin birden fazla kez tekrar ediyor.
Bu sorunu düzeltebilmek için sort komutunu
kullanabiliriz.
Sort komutu IP’ler arasında eşleştirme yaparak ekranda daha düzenli halde görmemizi sağlıyor fakat linux işletim sistemi tekilleştirme işlemi gerçekleştiremez.
Linux işletim sistemi seçtiği satırdaki IP adresiyle sadece bir altındaki IP adresini karşılaştırarak sıralama yapar. Alt satırdaki diğer IP adresleriyle karşılaştırma yaparak sıraya koymuyor.
Bu sorunumuzun çözümü olarak karşılaştırma işlemi yapmak için ise uniq komutunu
kullanıyoruz.
Bu iplerden kaç istek geldiğini sayması içinde ekstra olarak –c parametresini
kullanıyoruz.
Böylece bize en çok istek atan IP'leri tespit edebiliriz. Komutumuzun son hali aşağıdaki gibi oluyor;
cat <log_dosyası> | cut –d “ ” –f 1 |sort |uniq –c
Bu işlemlerimizin sonucunda da bir sorun olduğunu gözlemliyoruz.
Sistem insani bir algortimayla değil makina algoritmalarıyla sıralama işemi yapıyor örnek veremek gerekirse 1 ve 100 gibi sayılar aynı sıralamada yer alıyor.
Bu durumu düzeltebilmek için son olarak sort –h parametresini
ekliyoruz.
Bu parametre insani algoritma mantığıyla sıralama yapmamızı sağlıyor
Bu işelmler ile beraber IP adreslerini unutmamak için kaydedebiliriz bunun için çıktıytı yönlendirerek; ">>" operotörü
ile bir txt dosyasına yazdırabiliriz.Komutumuzun son hali aşağıdaki gibi oluyor;
cat <log_dosyası> | cut –d “ ” –f 1 |sort |uniq –c |sort –h
cat <log_dosyası> | cut –d “ ” –f 1 |sort |uniq –c |sort –h >> ip.txt
İşlemlerimizin devamında ise yukarıdaki komutta kullandığımız cut komutunun -f parametre
değerini değiştirerek en fazla istek gelen dizinleri tespit ediyoruz.
cat <log_dosyası>| cut –d “ ” –f 7 |sort | uniq –c |sort –h
İşlemleri yaptığımızda tespit ettiğimiz IP adresleri için grep komutu
ile sadece belirlediğim IP adresinin gönderdiği istekleri kontrol ediyoruz.
cat <log_dosyası> | grep
Böylelikle en çok istek atan ipleri sıralı bir şekilde elde ediyoruz.
Bu IP adreslerinin isteklerini kontrol etmeye başlıyoruz.
Log dosyasının içerisinden sadece bu dosyalara ait bilgileri alabilmek için grep komutunu
kullanıyoruz.
Bu komut bizim istediğimiz kelimeyi terminal üzerinde istediğimiz şekilde aramamızı sağlayacaktır.
Bu arama için komutlarımızı şu şekilde tekrar değiştirip kullanıyoruz;
cat <log_dosyası> | grep
Bu komut ile bu ip adresinin ulaşmaya çalıştığı dizinleri ve isteklerini kolay bir şekilde görebiliyoruz.
Bu komutu farklı şekillerde de kullanıp tüm IP adresleri için bu işlemin tespitini en çok istek atılan dizinleri tepsit edebiliriz.
Ben bu örnekte bir ip adresinin dizin taraması ve bazı saldırı denemeleri yaptığını tespit ediyorum.
Bu ip adresi ile ilgili bilgi toplamaya başlıyorum ve bu ip adresi ile ilgili whois komutu ile sorgu
gerçekleştiriyorum.
Son olarak ip adresinin gerçek bir sisteme ait olduğunu intel bir işletim olduğunu mozilla üzerinden istek gönderildiğini sürüm bilgileri vb. gibi bilgileri elde ediyoruz.
Diğer ip adresleri için de whois sorgusunu bash script
yardımıyla otomotize bir şekilde gerçekleştiriyorum.
İncelememi bitiriyorum . İyi çalışmalar dilerim.