Günlük dosyalarını sık IP'ler için ayrıştırma


12

Bu yüzden, DDOS saldırısı sırasında yaramaz ips'leri günlüklerimden çıkarmak için bunu hackledim . Herkes daha iyi yapmak için herhangi bir iyileştirme veya başka önerileri var mı?

İşte genel fikir:

  1. ipleri yalnızca günlük dosyasından çekin
  2. onları sırala
  3. uniq ve say
  4. onları tekrar sırala

Ve boru dizisi:
cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt


Bunun web yöneticilerinde daha iyi sorulup sorulmayacağından emin değilim ... ama hepsi unix araçlarını ve komut satırını kullandığından ... Burada daha uygun olacağını düşündüm.
gabe.

Burada iyi görünüyor. Unix tabanlıdır ve web sayfalarına özgü değildir (Bu muhtemelen Apache veya güvenlik duvarı günlük IP'lerindeki birçok farklı şey için geçerli olabilir)
Stefan Lasiewski

Yanıtlar:


7

Bunu hep kullandım:

tail -1000 /var/log/apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1

İle tailben gerçekten gitmek istiyorum ne kadar geriye limitini ayarlamak mümkün değilim - iyi sen (sebebi ne olursa olsun) günlük döndürmek kullanmak istemiyorsanız, ikinci ı yararlanarak ediyorum awk- En günlükleri uzay I sınırlandırılmış olduğundan' uygun $değişken ekleyerek kendimi ek bilgiler (muhtemelen hangi URL'lere isabet ettiklerini, durumları, tarayıcıları vb .) Son olarak içindeki bir kusur uniqsadece dokunma çiftlerinde çalışır - IE:

A
A
A
A
B
A
A

Üretecek:

4 A
1 B
2 A

İstenen çıktı değil. Bu yüzden ilk sütunu sıralarız (bu durumda ips, ancak diğer sütunları sıralayabiliriz) sonra uniqonları, nihayet en yüksek suçluları görebilmek için artan sayımı sıralayın.


Evet, sorunu uniq ile de fark ettim, bu yüzden tüm IPS'yi sıraya koymak için ilk türüm, böylece kopyalar yan yana olacak. Kuyruk ucu güzel, çünkü 4GB civarında tüm günlüğü ayrıştırmak biraz zaman alabilir. İyi şeyler, teşekkürler.
gabe.

-k1(1) sortzaten ilk kelimeyi anahtar olarak kullanmaya başlayan sadece bir anahtar (2) vardır .
Lekensteyn

7

Başarısız2ban tekerleğini yeniden icat ediyormuşsunuz gibi geliyor .

Fail2ban bir göz atın. Muhtemelen zaten istediğinizi yapar ve eğer değilse, özelleştirmek kolaydır.


1
Bu farkında olmadığım oldukça ilginç bir proje, teşekkürler. Aynı zamanda, günlük sunucusuna ihtiyaç duymayan bir şey yüklemek istemiyorum ve zaten yaptığımı yapmak için yeterince kolay. Sadece iyileştirmelerle ilgili öneriler arıyorum. Teşekkürler!
gabe.

Bu gerçekten harika görünüyor ve GPL de.
Eli Frey

7

Marco Ceppi konusunda haklı awkbunun için daha iyi bir araç olma ama awk da daha iyi bir araçtır sortve uniqbu mantık ile hareket ettirilebilir beri awk. Sadece 1000 satır kuyrukluyorsanız çok fazla bir fark yaratmaz, ancak büyük bir çoklu gig günlük dosyasına bakmak istiyorsanız, bunu taşımak için daha hızlı büyüklük siparişleri olabilir awk.

cat /var/log/apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -nihtiyacınız olanı yapar ancak büyük dosyalar için çok daha hızlıdır. IP adresini anahtar olarak kullanarak ve IP'lerin değer olarak kaç kez gerçekleştiğini awk olarak bir dizi IP oluşturur.

Hızlanma, awk'ın verilerin üzerinden geçmesi ve son çıktıyı sıralamak dışında işin çoğunu yapması nedeniyle gelir. Diğer yöntemi kullanarak, aktarım günlüğünde 1.000.000 satırınız varsa, awk 1.000.000 IP tüküren 1.000.000 satırı okur, ardından sıralama 1.000.000 IP'nin tamamını geçer ve sıralanan 1.000.000 IP'yi uniq'e gönderir ve bu da onu çok daha küçük bir değere indirir sıralamayı vermeden önce veri miktarı. Awk, 1.000.000 IP'de boru tesisatı yapmak / çoklu geçiş yapmak yerine, neredeyse her şeyi bir geçişte yapar.

Dizüstü bilgisayarımda 5.513.132 satır apache günlüğü (1.1 gig) kullanarak, bir hız karşılaştırması:

  • 2m 45s cat ./apache_access | awk '{print $1}' | sort -nk1 | uniq -c | sort -nk1
  • 0m 40s cat ./apache_access | awk '{freq[$1]++} END {for (x in freq) {print freq[x], x}}' | sort -n

Çok havalı. Bunu hileler çantama ekliyorum.
gabe.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.