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 | Örnek | Anlamı |
|---|---|---|
| Alt sistem | oper, link | O alt sistemin tüm olayları |
| Log seviyesi | info, debug, error, fatal | Belirli önem düzeyindeki olaylar |
| Olay kimliği | LINK_CONNECTING | Tek bir olay |
| Birleşik | link.LINK_CONNECTING | Alt 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 |
|---|---|
| b | Sunucu yasakları (KLINE, GLINE, SHUN vb.) |
| c | Yerel istemci bağlantıları |
| C | Uzak istemci bağlantıları |
| f | Flood bildirimleri |
| j | Kanala giriş, çıkış ve atılma |
| k | Kill bildirimleri |
| s | Diğer önemli sunucu bildirimleri |
| S | Spamfilter isabetleri |
| o | IRCOp kanal geçersiz kılma |
| O | IRCOp 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
- UnrealIRCd Log block: https://www.unrealircd.org/docs/Log_block
- UnrealIRCd Snomasks: https://www.unrealircd.org/docs/Snomasks
TR Siber Ekibi