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ı:
| Alan | Açıklama |
|---|---|
| match-type | simple (? ve * joker karakterleri) veya regex (PCRE) |
| target | Hangi trafik türünün taranacağı |
| action | Eşleşme durumunda uygulanacak eylem |
| ban-time | Ban süresi (1d, 6h gibi); yalnızca ban üreten eylemlerde anlamlı |
| reason | Kullanıcıya ve günlüğe yansıyan gerekçe |
| match | Aranacak 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.
| Harf | Hedef | Kapsam |
|---|---|---|
| c | channel | Kanal mesajları |
| p | private | Kullanıcıdan kullanıcıya özel mesaj |
| n | private-notice | Özel notice |
| N | channel-notice | Kanal notice |
| P | part | Part gerekçesi |
| q | quit | Quit gerekçesi |
| d | dcc | DCC dosya adı |
| a | away | Away mesajı |
| t | topic | Konu başlığı değişikliği |
| T | message-tag | İstemcinin gönderdiği mesaj etiketleri |
| u | user | nick!user@host:realname biçiminde eşleşir |
| R | raw | Ham 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
| Eylem | Etkisi |
|---|---|
| warn | Yalnızca operatörleri uyarır, mesaj iletilir |
| block | Yalnızca ilgili mesajı engeller, kullanıcı bağlı kalır |
| kill | Kullanıcıyı ağdan düşürür, yeniden bağlanabilir |
| tempshun | Komut göndermesini engeller, yeniden bağlanınca kalkar |
| shun | IP adresi üzerinden komut göndermeyi engeller |
| kline | IP adresini yalnızca bu sunucuya bağlanmaktan men eder |
| gline | IP adresini tüm ağa bağlanmaktan men eder |
| zline / gzline | Kimlik doğrulama öncesi IP engeli (yerel / ağ geneli) |
| dccblock | Kullanıcının DCC ile dosya göndermesini engeller |
| viruschan | Kullanıcıyı bir yardım kanalına kilitler ve komutlarını kısıtlar |
| stop | Sonraki 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.]*kazancKomut 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_muafiyeti6.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:
- 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.
- Doğrulama: En az 24 saat boyunca yalnızca gerçek spam eşleşmesi gözlemleniyorsa bir sonraki adıma geçin.
- Engelleme: Eylemi block olarak değiştirin. Bu aşamada kullanıcı ağdan atılmaz, yalnızca mesajı iletilmez.
- 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.]*kazancSilme 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