IRC spam botları genellikle aynı kalıbı izler: bağlanır bağlanmaz kanal listesini çeker, özel mesaj ya da davet yağdırır, rastgele nick ve ident kullanır veya Latin ve Kiril gibi alfabeleri karıştırarak filtreleri atlatmaya çalışır. UnrealIRCd 6 bunların her birine ayrı bir araç sunuyor.

Bu rehberde resmî UnrealIRCd belgelerine dayanarak dört katmanı ele alıyoruz: komutları yeni bağlananlara geçici olarak kapatan set::restrict-commands, rastgele görünen kullanıcıları yakalayan antirandom, karışık alfabeli spam mesajları durduran antimixedutf8 ve kimlik doğrulaması istenen kullanıcıya yol gösteren authprompt.

1. set::restrict-commands: yeni gelenlere bekleme süresi

set::restrict-commands bloğu bir komutu kimlerin kullanabileceğini; bağlantı süresi, Services kimlik doğrulaması, WebIRC ve itibar puanı gibi ölçütlerle sınırlar. IRCOp'lar kısıtlamaları her zaman atlayabilir.

Blok içinde komut adıyla (ör. list, invite, links) bir alt blok açılır. Bunlara ek olarak beş özel tür vardır: private-message, private-notice, channel-message ve channel-notice arka planda PRIVMSG ve NOTICE komutlarını, channel-create ise yeni kanal oluşturmak için kullanılan JOIN komutunu kısıtlar.

Her komut bloğunun içindeki except bloğu, komutu kimlerin kullanmaya devam edebileceğini belirler:

SeçenekAnlamı
connect-time 60Kısıtlama bağlantıdan sonraki 60 saniye boyunca uygulanır
identified yesServices'e kimlik doğrulamış kullanıcılar muaftır
webirc yesWebIRC bloğu üzerinden gelenler muaftır
websocket yesWebSocket kullananlar muaftır (6.0.7 ve üzeri)
tls yesSSL/TLS ile bağlananlar muaftır
reputation-score 24İtibar puanı bu değere eşit veya üzerinde olanlar muaftır


mask, ip, country, account ve security-group gibi Mask item ölçütleri de kullanılabilir. Flood botları TLS ve WebSocket de kullanabildiği için belgeler bu iki muafiyeti pek önermiyor. Bekleme süresinin mantığı basit: botlar genellikle bağlandıktan hemen sonra, fark edilmeden saldırır.

CODE TERMINAL
set {
    restrict-commands {
        list {
            except {
                connect-time 60;      /* 60 saniye sonra LIST serbest */
                webirc yes;           /* WebIRC ağ geçidi ise hemen */
                identified yes;       /* Services'e giriş yaptıysa hemen */
                reputation-score 24;  /* itibar puanı 24 ve üzeriyse hemen */
            }
        }
        invite {
            except {
                connect-time 120;
                identified yes;
                reputation-score 24;
            }
        }
        private-message {
            except { connect-time 10; }
        }
        private-notice {
            except { connect-time 10; }
        }
    }
}


Kanal mesajı kısıtlamasında yardım kanalını destination "#help"; satırıyla except bloğuna ekleyerek muaf tutabilirsiniz.

Bir komut bloğunda hiç except tanımlanmazsa komut IRCOp'lar dışında herkes için tamamen kapanır.

Sürüm notu: Bu sözdizimi 6.0.4 ile geldi; 6.0.3 ve öncesinde connect-delay ve exempt-* seçenekleri kullanılıyordu. Eski örnekleri kopyalamadan önce bu farkı kontrol edin.

2. antirandom: rastgele görünen kullanıcıları yakalamak

antirandom modülü, nick, ident ve realname bilgisi rastgele görünen kullanıcıları bağlanırken yakalar. Rastgele görünen her öğe kullanıcıya puan ekler; toplam puan threshold değerine ulaştığında belirlenen işlem uygulanır. Modül varsayılan olarak yüklü değildir.

Belgelere göre 2'nin altı kesinlikle kullanılmamalı; 4 yoğun bot saldırısında uygun ama biraz daha fazla masum kullanıcı yakalar; 5 başlangıç için iyi; 6 daha temkinli bir seçimdir.

CODE TERMINAL
loadmodule "antirandom";

set {
    antirandom {
        threshold 6;
        ban-action kill;
        ban-time 4h;
        ban-reason "Bot gibi görünüyorsunuz. Nick/ident/realname bilgilerinizi düzgün doldurun.";
        convert-to-lowercase yes;
        show-failedconnects yes;
        except {
            webirc yes;                /* WebIRC sık yanlış pozitif üretir */
            ip { 192.168.*; 127.*; }   /* yerel ağ */
            // security-group known-users;
        }
    }
}



  • ban-action: warn, kill, gline, gzline, kline, zline, shun veya tempshun.
  • ban-time: Ban süresi (kill ve tempshun için anlamsız). Belgeler 1 saat ile 2 gün arasını öneriyor; 3-4 günün üstü dinamik IP'ler yüzünden masum kullanıcıları yakalama riskini artırıyor.
  • convert-to-lowercase: Kontrol öncesinde metni küçük harfe çevirir; GnStA5FYhiTH51TUkf gibi büyük-küçük harf karışık nickleri yakalamaya yardımcı olur. Varsayılan olarak açıktır.
  • show-failedconnects: Yakalanan her bağlantı için bildirim gönderir; ilk günlerde açık tutulması öneriliyor.
  • except: 6.0.4 ve sonrasında muafiyetler bu blokla tanımlanır; daha eski sürümlerde except-hosts kullanılıyordu.



ban-reason içine bir SSS sayfası veya e-posta adresi eklemek iyi olur; masum kullanıcılar çoğu zaman bu alanlara gelişigüzel bilgi yazdıkları için yakalanır.

3. antimixedutf8: karışık alfabeli spam

antimixedutf8, farklı yazı sistemlerinden karakterlerin karıştırıldığı spam mesajlarını tespit edip durdurur. Tipik örnek, bazı harflerin Latin, bazılarının Kiril alfabesinden seçildiği ve kelime filtrelerini atlatmak için hazırlanmış metinlerdir. Bu modül de varsayılan olarak yüklü değildir.

CODE TERMINAL
loadmodule "antimixedutf8";

set {
    antimixedutf8 {
        score 8;
        ban-action block;
        ban-reason "Karışık karakterli spam";
        ban-time 4h;
        except {
            security-group known-users;
        }
    }
}


score düştükçe hassasiyet artar; 2-3 gibi değerler Latin ve Kiril'i birlikte kullanan Rusça konuşan kullanıcıları da yakalayabilir. Belgeler 8'i güvenli varsayılan olarak öneriyor. Örnekteki block işlemi yalnızca mesajı engeller; ban-time, block ve kill dışındaki işlemler için geçerlidir.

4. Soft işlemler: kimliği doğrulanmış kullanıcıyı ayırmak

UnrealIRCd'nin ban işlemlerinin çoğunun bir de "soft" sürümü vardır: soft-kill, soft-kline, soft-gline, soft-shun, soft-block gibi. Soft işlemler Services'e kimlik doğrulamış kullanıcılara uygulanmaz. Spamfilter, blacklist ve antirandom gibi yerlerde kullanılabilirler; böylece kayıtlı kullanıcılar içeri alınır.

IRC üzerinde KLINE veya GLINE önüne yüzde işareti eklemek, yalnızca kimliği doğrulanmamışları etkileyen bir "soft ban" oluşturur:

CODE TERMINAL
/GLINE %*@192.168.* 0 Lütfen kimlik doğrulaması yapın


Sabit bir kural için yapılandırmada require authentication bloğu kullanılabilir:

CODE TERMINAL
require authentication {
    mask *@*.isp.tld;
    reason "Bu servis sağlayıcıdan çok fazla kötüye kullanım geliyor, lütfen kimlik doğrulaması yapın.";
}


Belgelerde önemli bir uyarı var: UnrealIRCd 6.1.7'de bu özelliğin çalışmadığı bir hata bulunuyor; basit durumlar için soft kline ile benzer sonuç elde edilebilir. Ayrıca bu blok yalnızca yerel bir gerekliliktir, kullanıcı ağdaki diğer sunuculara yine bağlanabilir.

5. authprompt: kullanıcıya ne yapacağını söylemek

Soft ban veya require authentication ile karşılaşan kullanıcı, ne olduğunu anlamazsa sunucudan vazgeçer. authprompt modülü bu noktada devreye girer ve kullanıcıya SASL ile yeniden bağlanmasını ya da /AUTH nick:parola yazarak hemen kimlik doğrulamasını söyler. Teknik olarak bunu Services'e bir SASL oturumu taklit ederek yapar. Kimlik doğrulaması başarılı olana kadar kullanıcı tam olarak çevrimiçi sayılmaz; kanallara giremez ve mesaj gönderemez.

Modül varsayılan olarak yüklüdür ve set::authentication-prompt bloğuyla özelleştirilir:

CODE TERMINAL
set {
    authentication-prompt {
        enabled yes;
        message "Bu IP adresinden bağlananların kayıtlı bir nick ve parola ile kimlik doğrulaması gerekiyor.";
        message "SASL ile yeniden bağlanın veya şimdi /QUOTE AUTH nick:parola yazın.";
        message "Kayıtlı hesabınız yoksa https://ornek.org/kayit adresini ziyaret edin.";
        fail-message "Kimlik doğrulaması başarısız";
        unconfirmed-message "Henüz onaylanmamış bir Services hesabı kullanıyorsunuz.";
    }
}

/* authprompt kullanıyorsanız el sıkışma süresini artırmak isteyebilirsiniz */
set { handshake-timeout 60s; }


Birden fazla message satırı tanımlanabilir; kayıt sayfası adresini eklemek hesabı olmayanlara yol gösterir. El sıkışma süresi varsayılan 30 saniyedir; elle giriş yapacak kullanıcılar için 60 saniyeye çıkarılabilir. Bu yapı için bir Services paketi (ör. Anope) ve hem sunucuda hem Services'te SASL gerekir; Services tarafında kayıt gecikmesi ve e-posta doğrulaması gibi önlemler de öneriliyor.

6. Yanlış pozitifleri yönetmek


  • antirandom için ilk günlerde ban-action warn ve show-failedconnects yes ile başlayıp yakalanan bağlantıları izleyin, sonra daha sert bir işleme geçin.
  • Çok dilli bir topluluğunuz varsa antimixedutf8'in score değerini düşürmeden önce etkisini gözlemleyin; 8 güvenli başlangıç değeridir.
  • WebIRC ağ geçitlerini, bilinen köprü ve bot hizmetlerini except bloklarıyla önceden muaf tutun.
  • known-users güvenlik grubu, Services'e kimlik doğrulamış veya itibar puanı 25 ve üzeri olan kullanıcıları kapsar; birçok kural için pratik bir muafiyettir.
  • Değişikliklerden sonra yapılandırmayı ./unrealircd configtest ile doğrulayın, ardından /REHASH ile yükleyin.



7. Kontrol listesi


  1. LIST, INVITE ve özel mesaj için connect-time kısıtlaması tanımlandı mı?
  2. antirandom ve antimixedutf8 için loadmodule satırları eklendi mi?
  3. antirandom eşiği ve ban süresi belgelerdeki önerilere göre seçildi mi?
  4. Yanlış pozitif riski olan kullanıcı grupları except bloklarıyla korunuyor mu?
  5. Soft ban veya require authentication kullanılıyorsa SASL, Services ve authprompt mesajları hazır mı?
  6. 6.1.7 kullanıyorsanız require authentication hatası için soft kline alternatifi değerlendirildi mi?



Kaynaklar: UnrealIRCd Restrict commands, UnrealIRCd Set block, UnrealIRCd Actions, UnrealIRCd Soft ban, UnrealIRCd Authentication, UnrealIRCd Require authentication block, UnrealIRCd Security-group block
TR Siber Ekibi Yazar · TRSiber
← Ana sayfaya dön