LLM'leri kullanarak gürültülü güvenlik günlüklerini yorumlamaya ve bunları uygulanabilir iptables kurallarına dönüştürmeye çalışıyorum. Amacım manuel incelemeyi değiştirmek değil, bir saldırı veya tarama sırasında ilk değerlendirme sürecini hızlandırmak. Kurulumumda, son syslog girdilerini yerel Ollama örneğim üzerindeki 7B parametreli modelden geçiriyorum; tekrarlanan başarısız SSH girişimleri veya şüpheli port taramalarına dayalı olarak IP engelleme önerisi istiyorum. Çıktı olarak 20 dakikalık zaman aşımıyla geçici bir iptables kuralı alıyorum; bu kuralı inceledikten sonra uyguluyorum veya reddediyorum.
Günlüklerden Kural Önerilerini Otomatikleştirmenin Nedeni
Manuel günlük analizi zaman alır, özellikle de brute-force denemesi sırasında dakikada binlerce satırla karşılaştığınızda. Daha önce /var/log/auth.log dosyasında 'Failed password' ifadesini grep ile arardım, IP'ye göre sıralardım ve elle kural oluştururdum. İşe yarar, fakat yavaştır. Özetlenmiş günlük verilerini LLM'e beslediğimde, saniyeler içinde önerilen bir kural alıyorum. Modelin mükemmel olması gerekmiyor; yorgun veya acele olduğumda kaçırabileceğim desenleri vurgulaması yeterli. Çıktısını kesin bir karar değil, bir başlangıç noktası olarak görüyorum.
Günlük Boru Hattını Nasıl Kuruyorum
Her beş dakikada bir cron üzerinden çalıştırdığım basit bir kabuk betiği kullanıyorum. Bu betik, auth.log dosyasının son 100 satırını çıkarır, IP başına başarısız SSH denemelerini sayar ve LLM için bir prompt hazırlar. Temel mantık şu şekildedir:
#!/bin/bash
LOG_FILE="/var/log/auth.log"
RECENT=$(sudo tail -n 100 "$LOG_FILE")
PROMPT="Analyze these SSH log entries for brute-force patterns. List IPs with 5+ failed attempts in the last 10 minutes. For each, suggest a temporary iptables rule to block port 22 for 20 minutes. Output only the iptables commands, one per line."
RESPONSE=$(ollama run llama3:8b "$PROMPT\n\n$RECENT")
if [ -n "$RESPONSE" ]; then
echo "$RESPONSE" | while read -r line; do
if [[ $line =~ ^iptables ]]; then
echo "[SUGGESTION] $line"
# Uncomment to auto-apply: sudo $line && sudo timeout 20m iptables -D INPUT $(echo $line | cut -d' ' -f4- | sed 's/-A/-D/')
fi
done
fi
Bu betik varsayılan olarak kuralları otomatik olarak uygulamıyor — önce onları incelemeyi tercih ediyorum. Yorum satırındaki satır, zaman aşımıyla temizlemeyi sağlayacak şekilde otomasyonu nasıl aktifleştirebileceğinizi gösteriyor; ancak modelin doğruluk ortamımda gelişene kadar manuel onaylamayı tercih ediyorum.
Örnek Çıktı ve Yorumlama
Geçen hafta, bir barındırma sağlayıcısının IP aralığından ani bir SSH deneme artışı sırasında betik şunu döndürdü:
[SUGGESTION] iptables -A INPUT -p tcp -s 185.130.105.204 -j DROP --dport 22
[SUGGESTION] iptables -A INPUT -p tcp -s 185.130.105.205 -j DROP --dport 22
Günlükleri inceledim, desenin bir sözlük saldırısıyla eşleştiğini onayladım ve kuralları uyguladım. 20 dakika sonra, notlarımda bulundurduğum timeout komutu sayesinde kurallar otomatik olarak süresi doldu. Bu örnekte yanlış pozitif görmedim, fakat fail2ban tarafından tetiklenen günlükler gibi gürültülü hizmetlerde modelin fazla öneri yapabileceğini gördüm — bu da denetimin gerekliliğini gösteriyor.
Sınırlılıklar ve Güvenlik Kontrolleri
LLM'ler, prompt sıkı tutulmadığında veya model çok küçük olduğunda günlükleri yanlış yorumlayabilir veya hayal kurabilir. Token aşımını ve gizlilik sızıntılarını önlemek için ham, filtrelenmemiş günlükleri göndermekten kaçınıyorum. Bunun yerine, gürültüyü azaltmak için awk veya grep ile ön işleme yapıyorum. Ayrıca, bu sistemi harici API'lere açıyor olmam; her şey ayrılmış bir VM'de yerel olarak Ollama ve CPU-only çıkarım ile çalışıyor.
Faydalı bir ipucu: oluşturulan kural sözdizimini uygulamadan önce iptables -C (kontrol) komutuyla test etmek veya nftables kullanıyorsanız nft -f ile simüle etmek. Başka bir güvenlik önlemi olarak, tüm önerilen kuralları denetim için ayrı bir dosyaya kaydediyorum; bunu syslog üzerinden yapıyorum.
Bu Yaklaşımın En Etkili Olduğu Durumlar
Bu yöntem, dışarıdaki saatlerde veya gerçek zamanlı günlük izleme yapamadığım çok sayıda sunucu yönetiminde gerçekten işe yarıyor. fail2ban veya CrowdSec'in yerini almıyor, ancak geçici maruz kalmaları sertleştirmek veya ad-hoc analiz için tamamlayıcı bir araç olarak kullanıyorum. Daha önceki yazımda AI destekli log analizi üzerinde durmuştum (https://furkanikkan.com/urun/ai-destekli-log-analizi-syslog-tan-gecici-iptables-kurali-uretme-101), amacım insan değerlendirmesini artırmak, onu körce otomatikleştirmek değil.
Linux güvenlik duvarı çalıştırıyorsanız ve AI destekli operasyonlarla deneme yapmak istiyorsanız, küçükden başlayın: kritik olmayan bir konakta betiği test edin, promptu ayarlayın ve her öneriyi doğrulayın. Zamanla, değer katabileceği ve katamadığınız yerleri göreceksiniz.
Kapak görseli: Jefferson Lab · PDM (Openverse / kamu malı) · https://www.flickr.com/photos/53950384@N02/55166403368
