Bir IRC ağında kötüye kullanımın büyük bölümü bağlantı katmanında değil, içerik katmanında gerçekleşir: zararlı bağlantı yayan botlar, kanal kanal dolaşan reklam mesajları, sahte "ücretsiz hesap" duyuruları ve part/quit mesajlarına gömülen spam. Bağlantı sayısını sınırlayan anti-flood mekanizmaları bu davranışın hiçbirini engellemez, çünkü saldırgan teknik olarak sınırların içinde kalır.


UnrealIRCd'nin spamfilter mekanizması tam olarak bu boşluğu doldurur. Bu rehberde spamfilter yapılandırmasını, hedef türlerini, eylem seçeneklerini, istisna yönetimini ve en çok hataya yol açan konu olan yanlış pozitif kontrolünü ele alacağız.


1. Spamfilter Nasıl Çalışır?



Spamfilter, belirlenen hedef türlerinden geçen metni bir desenle karşılaştırır ve eşleşme olduğunda tanımlı eylemi uygular. İki kullanım biçimi vardır:



  • Yapılandırma dosyasındaki spamfilter blokları: Sunucuya özeldir, /REHASH ile yüklenir ve yalnızca o sunucuda çalışır. Kalıcı, versiyonlanabilir kurallar için uygundur.
  • /SPAMFILTER komutuyla eklenen kurallar: TKL (Timed KLine) altyapısı üzerinden tüm ağa yayılır ve tkldb modülü sayesinde yeniden başlatmalarda korunur. Saldırı sırasında hızlı müdahale için uygundur.



Pratikte doğru yaklaşım ikisini birlikte kullanmaktır: kalıcı ve gözden geçirilmiş kurallar yapılandırma dosyasında, ani saldırılara verilen geçici yanıtlar /SPAMFILTER ile.


2. Temel Yapılandırma Bloğu



CODE TERMINAL
spamfilter {
    match-type simple;
    target { channel; private; };
    action block;
    reason "Bu_baglanti_agimizda_yasak";
    match "*bedava-hesap.example*";
};


Blok yüklendikten sonra /REHASH çalıştırın. Alanların anlamı:


AlanAçıklama
match-typesimple (? ve * joker karakterleri) veya regex (PCRE)
targetHangi trafik türünün taranacağı
actionEşleşme durumunda uygulanacak eylem
ban-timeBan süresi (1d, 6h gibi); yalnızca ban üreten eylemlerde anlamlı
reasonKullanıcıya ve günlüğe yansıyan gerekçe
matchAranacak desen


Not: reason alanında alt çizgi karakterleri çalışma anında boşluğa dönüştürülür. Bu, komut satırından eklenen kurallarla aynı davranışı korumak içindir.


3. Hedef Türleri



Hedef seçimi, spamfilter'ın en çok ihmal edilen ayarıdır. Yalnızca channel hedefini tarayan bir kural, aynı içeriği özel mesajla dağıtan botu göremez.


HarfHedefKapsam
cchannelKanal mesajları
pprivateKullanıcıdan kullanıcıya özel mesaj
nprivate-noticeÖzel notice
Nchannel-noticeKanal notice
PpartPart gerekçesi
qquitQuit gerekçesi
ddccDCC dosya adı
aawayAway mesajı
ttopicKonu başlığı değişikliği
Tmessage-tagİstemcinin gönderdiği mesaj etiketleri
uusernick!user@host:realname biçiminde eşleşir
RrawHam protokol satırı


Spam kampanyaları genellikle önce özel mesajı, engellendiğinde notice'i, o da engellendiğinde quit gerekçesini dener. Bu nedenle içerik kurallarında hedef kümesini geniş tutmak gerekir:


CODE TERMINAL
spamfilter {
    match-type simple;
    target { channel; private; private-notice; channel-notice; part; quit; away; topic; };
    action block;
    reason "Spam_iceriktir";
    match "*kripto-kazanc.example*";
};


4. Eylem Seçenekleri



EylemEtkisi
warnYalnızca operatörleri uyarır, mesaj iletilir
blockYalnızca ilgili mesajı engeller, kullanıcı bağlı kalır
killKullanıcıyı ağdan düşürür, yeniden bağlanabilir
tempshunKomut göndermesini engeller, yeniden bağlanınca kalkar
shunIP adresi üzerinden komut göndermeyi engeller
klineIP adresini yalnızca bu sunucuya bağlanmaktan men eder
glineIP adresini tüm ağa bağlanmaktan men eder
zline / gzlineKimlik doğrulama öncesi IP engeli (yerel / ağ geneli)
dccblockKullanıcının DCC ile dosya göndermesini engeller
viruschanKullanıcıyı bir yardım kanalına kilitler ve komutlarını kısıtlar
stopSonraki spamfilter kurallarının işlenmesini durdurur


soft- önekli varyantlar (soft-kill, soft-block, soft-gline gibi), servislere kimlik doğrulaması yapmış kullanıcılara uygulanmaz. Kayıtlı kullanıcı tabanı olan ağlarda, yeni bir kuralı önce soft- varyantıyla devreye almak, doğrulanmış kullanıcıları etkilemeden desenin davranışını gözlemlemeyi sağlar.


5. Regex Kuralları ve Kaçınma Teknikleri



Spam gönderenler filtreyi atlatmak için alan adının içine noktalama ekler, harfleri görsel olarak benzer karakterlerle değiştirir veya araya boşluk koyar. Basit joker desenleri bu varyasyonları yakalayamaz:


CODE TERMINAL
/spamfilter add -regex cpnNPqat block - Spam_baglanti (?i)k\W?r\W?i\W?p\W?t\W?o\W?[-\s.]*kazanc


Komut söz dizimi şu sırayı izler: /spamfilter add [match-type] [hedefler] [eylem] [süre] [gerekçe] [desen]. Süre alanındaki - karakteri varsayılan değeri kullanır. Gerekçedeki alt çizgiler boşluğa dönüşür.


Regex yazarken üç kurala uyun:



  • (?i) öneki ile büyük/küçük harf duyarlılığını kapatın; aksi halde tek bir büyük harf filtreyi atlatır.
  • İç içe niceleyicilerden ((a+)+ gibi) kaçının. Bu tür desenler katastrofik geri izlemeye (catastrophic backtracking) yol açarak sunucuyu yavaşlatabilir.
  • Deseni mümkün olduğunca dar tutun. .* ile başlayan ve biten kurallar hem yavaştır hem de yanlış pozitif üretir.



UnrealIRCd bu riske karşı otomatik koruma sağlar: bir kuralın çalışma süresi detect-slow-warn eşiğini (varsayılan 250 ms) aşarsa operatörler uyarılır, detect-slow-fatal eşiğini (varsayılan 500 ms) aşarsa kural otomatik olarak kaldırılır. Bu değerleri düşürmek yerine, uyarı aldığınızda deseni sadeleştirin.


6. İstisnalar



IRC operatörleri, operclass'larında immune:server-ban:spamfilter izni bulunduğu için varsayılan olarak muaftır. Diğer istisnalar üç yöntemle tanımlanır.


6.1. Except ban bloğu



CODE TERMINAL
except ban {
    mask { ip 203.0.113.10; };
    type spamfilter;
};


6.2. ELINE



CODE TERMINAL
/eline *@bot.ornek.net F 0 Guvenilir_bot_muafiyeti


6.3. Hedef bazlı muafiyet



Kullanıcıların spam örneği bildirebileceği bir kanal işletiyorsanız, o kanalı alıcı olarak muaf tutabilirsiniz. Bu ayar göndereni değil, yalnızca hedefi kapsar:


CODE TERMINAL
set {
    spamfilter {
        except "#spam-bildirim";
    };
};


7. Yanlış Pozitif Yönetimi



Yeni bir kuralı doğrudan gline eylemiyle devreye almak, en sık yapılan hatadır. Meşru bir kelimeyi yanlışlıkla yakalayan bir desen, dakikalar içinde onlarca kullanıcıyı ağdan atabilir. Önerilen sıra şudur:



  1. Gözlem aşaması: Kuralı action warn ile ekleyin. Kaç kez ve hangi içerikle tetiklendiğini operatör bildirimlerinden ve sunucu günlüklerinden izleyin.
  2. Doğrulama: En az 24 saat boyunca yalnızca gerçek spam eşleşmesi gözlemleniyorsa bir sonraki adıma geçin.
  3. Engelleme: Eylemi block olarak değiştirin. Bu aşamada kullanıcı ağdan atılmaz, yalnızca mesajı iletilmez.
  4. Sertleştirme: Israrla tekrar eden kaynaklar için soft-gline veya gline eylemine geçin ve makul bir ban-time tanımlayın.



Aktif kuralları listelemek ve gereksiz olanları kaldırmak için:


CODE TERMINAL
/stats spamfilter
/spamfilter del -regex cpnNPqat block - Spam_baglanti (?i)k\W?r\W?i\W?p\W?t\W?o\W?[-\s.]*kazanc


Silme işleminde parametrelerin eklemedekiyle birebir aynı olması gerekir; bu nedenle komutla eklenen kuralları bir yerde kayıt altına almak zaman kazandırır.


8. Örnek Kural Seti



CODE TERMINAL
spamfilter {
    match-type regex;
    target { channel; private; private-notice; channel-notice; };
    action block;
    reason "Zararli_dosya_uzantisi_paylasimi";
    match "(?i)https?://\S+\.(exe|scr|pif|bat|cmd|vbs|jar)\b";
};

spamfilter {
    match-type regex;
    target { dcc; };
    action dccblock;
    reason "Supheli_dosya_transferi";
    match "(?i)\.(exe|scr|pif|bat|cmd|vbs)$";
};

spamfilter {
    match-type regex;
    target { user; };
    action soft-gline;
    ban-time 1d;
    reason "Spam_bot_kalibi";
    match "(?i)^[a-z]{4,8}[0-9]{4,6}![~]?[a-z]+@";
};


Son kuralın user hedefiyle çalıştığına dikkat edin: desen nick!user@host:realname dizisiyle karşılaştırılır ve bağlantı anında değerlendirilir. Bu tür kalıp temelli kurallar güçlüdür, ancak meşru kullanıcıları da kapsayabildikleri için mutlaka warn aşamasından geçirilmelidir.


9. Kontrol Listesi




  • Kalıcı kurallar yapılandırma dosyasında, geçici müdahaleler /SPAMFILTER ile yönetiliyor mu?
  • İçerik kuralları yalnızca kanalı değil, özel mesaj, notice, part, quit ve away hedeflerini de kapsıyor mu?
  • Her yeni kural warn aşamasından geçiriliyor mu?
  • Regex desenlerinde (?i) öneki var mı ve iç içe niceleyicilerden kaçınılmış mı?
  • Güvenilir botlar ve bildirim kanalları için istisnalar tanımlı mı?
  • detect-slow uyarıları düzenli olarak gözden geçiriliyor mu?
  • Aktif kural listesi (/stats spamfilter) periyodik olarak temizleniyor mu?



Spamfilter, kurulup unutulacak bir bileşen değil, sürekli bakım isteyen bir savunma katmanıdır. Spam kampanyaları desen değiştirdikçe kurallar da güncellenmelidir; eskiyen ve artık hiç tetiklenmeyen kuralları kaldırmak ise hem performansı korur hem de kural setinin okunabilir kalmasını sağlar.
TR Siber Ekibi Yazar · TRSiber
Kaynak bağlantısı ← Ana sayfaya dön