Bir IRC ağında ne olduğunu görmeden onu güvende tutamazsınız. UnrealIRCd 6, olayları tek bir düz metin dosyasına yazmakla yetinmez: log bloğu ile hangi olayların nereye gideceğini ayrıntılı biçimde belirleyebilirsiniz. Olaylar bir dosyaya (metin ya da JSON), syslog'a, bir operatör snomask'ine, bir IRC kanalına, bir webhook'a ya da ağdaki diğer sunuculara yönlendirilebilir. Bu rehber, resmî UnrealIRCd belgelerindeki log bloğu ve snomask açıklamalarına dayanarak güvenlik izleme için pratik bir yapılandırma kurmayı anlatır.

Log bloğunun yapısı

Her log bloğu bir source (kaynak) ve bir destination (hedef) bölümünden oluşur:

CODE TERMINAL
log {
    source {
        // hangi olaylar
    }
    destination {
        // nereye
    }
}


Belgelere göre hiçbir log bloğu tanımlı değilse tüm mesajlar ircd.log dosyasına yazılır. Kendi bloğunuzu tanımladığınızda varsayılan davranışı siz belirlersiniz.

Source: hangi olaylar loglansın?

Kaynaklar dört biçimde belirtilebilir:

BiçimÖrnekAnlamı
Alt sistemoper, linkO alt sistemin tüm olayları
Log seviyesiinfo, debug, error, fatalBelirli önem düzeyindeki olaylar
Olay kimliğiLINK_CONNECTINGTek bir olay
Birleşiklink.LINK_CONNECTINGAlt sistem ve olay birlikte


Özel iki kaynak vardır: all her şeyi kapsar, nomatch başka hiçbir blokta eşleşmeyenleri yakalar. Ünlem işareti ile olumsuz filtre yazılabilir; örneğin hata ayıklama mesajları hariç her şey:

CODE TERMINAL
source {
    !debug;
    all;
}


Destination: dosya ve JSON

CODE TERMINAL
log {
    source { all; !debug; }
    destination {
        file "ircd.json.log" { maxsize 100M; type json; }
    }
}



  • maxsize: Dosya bu boyuta ulaşınca .old dosyasına taşınır. K, M ve G birimleri kullanılabilir.
  • type: text ya da json. JSON çıktı, bir SIEM'e veya betiğe beslemek için idealdir.
  • Dosya adı: strftime biçimi desteklenir; örneğin ircd.%Y-%m-%d.log günlük dosya üretir. Tam yol da yazılabilir (örneğin /var/log/unrealircd/ircd.log).



Syslog ve snomask

CODE TERMINAL
destination { syslog; }


Syslog hedefi olayları Unix/Linux syslog sistemine gönderir; böylece mevcut merkezi log altyapınız IRC olaylarını da toplayabilir. Snomask hedefi ise olayları belirli bir sunucu bildirim maskesine yönlendirir:

CODE TERMINAL
log {
    source { link; }
    destination { snomask L; }
}


Bu örnekte sunucu bağlantı olayları L snomask'ine gider; bu maskeyi açan operatörler yalnızca bu bildirimleri görür.

Snomask nedir?

Snomask'ler (server notice mask), IRC operatörlerinin hangi sunucu bildirimlerini alacağını belirleyen özel kullanıcı modlarıdır. Belgelerde listelenen başlıca maskeler:

Harfİşlev
bSunucu yasakları (KLINE, GLINE, SHUN vb.)
cYerel istemci bağlantıları
CUzak istemci bağlantıları
fFlood bildirimleri
jKanala giriş, çıkış ve atılma
kKill bildirimleri
sDiğer önemli sunucu bildirimleri
SSpamfilter isabetleri
oIRCOp kanal geçersiz kılma
OIRCOp kullanıcı özelliği değişiklikleri


Maske şu komutla ayarlanır: /MODE nick +s +cF gibi; kaldırmak için /MODE nick +s -c. Operatörler için varsayılan maske set::snomask-on-oper ile belirlenir (belgelerdeki varsayılan +bBcdfkqsSoO), oper bloğundaki snomask ayarıyla kişi bazında özelleştirilebilir.

Kanala loglama

CODE TERMINAL
destination {
    channel "#opers" {
        color yes;
        show-event yes;
        json-message-tag yes;
        oper-only yes;
    }
}



  • oper-only: Yalnızca IRCOp'lara gösterir; belgeler güvenlik için yes önerir.
  • json-message-tag: Mesaja JSON etiketi ekler; hassas bilgi içerebileceği için oper-only ile birlikte kullanın.
  • color, show-event: Görünümü ve olay adının gösterilmesini denetler.



Önemli bir uyarı: kanal loglaması yalnızca yerel bağlı kullanıcılara gönderilir. Ağdaki tüm sunucularda görmek istiyorsanız aynı yapılandırmayı her sunucuya uygulayın.

Webhook ve uzak sunucu

CODE TERMINAL
log {
    source { error; fatal; link; }
    destination {
        webhook 'https://example.org/hook.php?key=gizli-anahtar';
    }
}


Webhook hedefi olayları HTTP(S) POST ile JSON olarak gönderir. Belgelerin uyarısına göre URL tek tırnak içine alınmalıdır. Anahtarı URL içinde taşıyan bir webhook adresi bir sırdır; günlüklere ve depolara yazmayın, alıcı tarafta anahtarı doğrulayın. destination { remote; } ise mesajı ağdaki tüm diğer sunuculara iletir.

Önerilen güvenlik izleme kurulumu

CODE TERMINAL
/* 1) Kalıcı JSON kayıt: tüm olaylar, debug hariç */
log {
    source { all; !debug; }
    destination {
        file "/var/log/unrealircd/ircd.%Y-%m-%d.json.log" { maxsize 100M; type json; }
    }
}

/* 2) Syslog: merkezi log toplama için */
log {
    source { error; fatal; oper; link; }
    destination { syslog; }
}

/* 3) Operatör kanalı: yalnızca operlere */
log {
    source { error; fatal; link; }
    destination {
        channel "#opers" { oper-only yes; show-event yes; }
    }
}


Bu yapılandırmayı uygulamadan önce ./unrealircd configtest ile sözdizimini denetleyin, ardından ./unrealircd rehash ile yükleyin.

Kontrol listesi


  • Log dosyalarının sahibi ve izinleri yalnızca IRCd kullanıcısına açık olsun.
  • JSON loglar kişisel veri (IP, nick) içerebilir; saklama süresini ve erişimi belirleyin.
  • maxsize ve günlük dosya adlarıyla disk dolmasını önleyin.
  • Kanal ve JSON etiketi hedeflerinde oper-only yes kullanın.
  • Webhook adreslerindeki anahtarları gizli tutun.
  • Çok sunuculu ağlarda kanal loglama yapılandırmasını her sunucuda tekrarlayın.



Kaynaklar
TR Siber Ekibi Yazar · TRSiber
← Ana sayfaya dön