Selam millet,
Her seferinde ayni grep/awk komutlarini yazmaktan sikilinca, ssh auth loglarindan basarisiz giris denemelerini ozetleyen kucuk bir script yazdim. Buyuk bir sey degil ama ise yariyor; paylasayim, isteyen gelistirir. MIT lisansi dusunun, serbestce kullanin.
Ne Yapar?
- auth.log icinde basarisiz giris (Failed password) satirlarini bulur
- IP bazinda sayar ve en cok deneyen IP'leri siralar
- Esik ustu IP'leri uyari olarak isaretler
Kod
#!/usr/bin/env python3
import re, sys, collections
THRESHOLD = 10 # bu sayinin ustu supheli
def main(path):
ip_re = re.compile(r"Failed password.*from (\d+\.\d+\.\d+\.\d+)")
counts = collections.Counter()
with open(path, encoding="utf-8", errors="ignore") as f:
for line in f:
m = ip_re.search(line)
if m:
counts[m.group(1)] += 1
if not counts:
print("Basarisiz giris bulunamadi.")
return
print(f"{'IP':<18} {'Deneme':>7} Durum")
print("-" * 40)
for ip, n in counts.most_common():
flag = "UYARI" if n >= THRESHOLD else ""
print(f"{ip:<18} {n:>7} {flag}")
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else "/var/log/auth.log"
main(path)Kullanim
python3 logscan.py /var/log/auth.logOrnek cikti:
IP Deneme Durum
----------------------------------------
203.0.113.45 142 UYARI
198.51.100.7 23 UYARI
192.0.2.10 3Gelistirme Fikirleri
- Zaman araligi filtresi (son 24 saat)
- Esik ustu IP'leri otomatik fail2ban/iptables ile engelleme
- JSON cikti ve bir panoya besleme
- Birden fazla log dosyasini birlestirme
Katkiya acik; siz olsaniz once hangi ozelligi eklerdiniz? Fork edip gelistirmek isteyen beri gelsin.
Kaynaklar
Alıntı:Yasal not: Scripti yalnizca kendi sunucunuzun loglarinda calistirin.