Bu rehberde resmî UnrealIRCd belgelerine dayanarak bu üç bloğun sözdizimini, birbirleriyle ilişkisini ve sık yapılan yapılandırma hatalarını ele alıyoruz.
1. class bloğu: kaynak sınıflarını tanımlama
class blokları, istemci ve sunucu bağlantılarına uygulanacak kaynak sınırlarını tanımlar. Her allow bloğu bir class'a işaret eder; bu yüzden önce class'lar tanımlanır. Resmî belgelerdeki örneklere dayanan tipik bir yapılandırma şöyledir:
CODE TERMINAL
class clients {
pingfreq 90;
maxclients 1000;
sendq 200k;
recvq 8000;
}
class opers {
pingfreq 90;
maxclients 50;
sendq 1M;
recvq 8000;
}
class servers {
pingfreq 60;
connfreq 15;
maxclients 10;
sendq 20M;
}Öğelerin anlamları:
| Öğe | Anlamı | Belgelerdeki öneri |
|---|---|---|
| pingfreq | Sunucunun PING gönderme aralığı (saniye) | 90-180 |
| connfreq | Yalnızca sunucular: autoconnect denemeleri arası süre | 15 |
| maxclients | Bu class'taki toplam istemci/sunucu üst sınırı | Kullanıma göre |
| sendq | Gönderim kuyruğunda tutulabilecek veri miktarı | 200k istemci, 1M oper, 20M sunucu |
| recvq | Normal kullanıcılar için flood kontrolünde alım kuyruğu | 3000-8000 (varsayılan 8000) |
sendq değerinin sunucular için çok daha büyük tutulmasının nedeni, sunucu bağlantılarında ağ senkronizasyonu sırasında yoğun veri aktarılmasıdır. İstemciler için gereğinden büyük bir sendq ise yavaş okuyan ya da okumayan bağlantıların bellekte fazla yer kaplamasına yol açabilir.
class bloğunda options { nofakelag; } seçeneği de bulunur; bu seçenek fake lag korumasını devre dışı bırakır. Belgeler bunun nadiren kullanıldığını belirtiyor; flood korumasını zayıflattığı için sıradan kullanıcı class'larında kullanılmamalıdır.
2. allow bloğu: kimin bağlanabileceğini belirleme
allow bloğu, hangi bağlantıların sunucuya kabul edileceğini ve hangi class'a yerleştirileceğini belirler. Resmî sözdizimi:
CODE TERMINAL
allow {
mask ;
class ;
maxperip ;
/* Geri kalanı isteğe bağlıdır: */
global-maxperip ;
password { ; }
redirect-server ;
redirect-port ;
options {
;
}
}Zorunlu üç öğe mask, class ve maxperip'tir. maxperip, aynı IP adresinden bu sunucuya yerel olarak açılabilecek eş zamanlı bağlantı sayısını; global-maxperip ise ağ genelindeki sınırı belirler.
En basit ve yaygın kullanım, herkese izin veren genel bir bloktur:
CODE TERMINAL
allow {
mask *;
class clients;
maxperip 3;
}3. Sıralama: en çok yapılan hata
Birden fazla allow bloğu kullanıldığında sıralama kritik hâle gelir. Resmî belgelere göre allow blokları tersten (aşağıdan yukarıya) okunur; bu nedenle belirli bir host veya IP için yazılan özel allow blokları, genel *@* bloklarından sonra yazılmalıdır.
Örneğin bir kurum ağına daha yüksek bağlantı sınırı tanımak istiyorsanız doğru sıra şöyledir:
CODE TERMINAL
/* Önce genel blok */
allow {
mask *;
class clients;
maxperip 3;
}
/* Sonra özel blok: kurum NAT adresleri */
allow {
mask 198.51.100.0/24;
class clients;
maxperip 25;
}Bu sırayı ters çevirirseniz özel blok hiçbir zaman devreye girmez ve NAT arkasındaki kullanıcılar maxperip sınırına takılarak bağlanamaz.
4. allow seçenekleri ve parola
options altında kullanılabilen seçenekler:
- tls: Blok yalnızca TLS/SSL bağlantılarıyla eşleşir.
- useip: Kullanıcının hostname yerine IP adresi gösterilir.
- noident: ident yerine istemcinin verdiği kullanıcı adı kullanılır.
- reject-on-auth-failure: Parola yanlışsa veya hiç verilmemişse bağlantı reddedilir.
tls seçeneği, belirli bir blokla sağlanan ayrıcalıkları (örneğin yüksek maxperip) yalnızca şifreli bağlantılara vermek için kullanışlıdır:
CODE TERMINAL
allow {
mask 198.51.100.0/24;
class clients;
maxperip 25;
options { tls; }
}password öğesiyle bir allow bloğu parolaya bağlanabilir. reject-on-auth-failure seçeneği eklendiğinde parola yanlış veya eksikse bağlantı reddedilir. Belgelere göre UnrealIRCd 6.2.1 ve sonrasında birden fazla parola tanımlanabiliyor. Parolayı yapılandırma dosyasında düz metin tutmak yerine desteklenen bir auth-type ile özet (hash) olarak saklamak daha güvenlidir.
5. Class dolduğunda yönlendirme
Bir class'ın maxclients sınırına ulaşıldığında yeni bağlantılar reddedilir. redirect-server ve redirect-port öğeleri, bu durumda kullanıcıları ağdaki başka bir sunucuya yönlendirmek için kullanılır. Yoğun ağlarda taşma senaryosu için önceden planlanması, ani trafik artışlarında kullanıcı kaybını azaltır.
6. except throttle bloğu: bağlantı hız sınırından muafiyet
UnrealIRCd, aynı IP adresinden kısa sürede gelen tekrarlı bağlantıları set::anti-flood::connect-flood ayarıyla sınırlar. except throttle bloğu, belirli IP maskelerini bu throttling sisteminden muaf tutar:
CODE TERMINAL
except throttle {
mask 192.168.1.*;
}
except throttle {
mask { 192.168.*; 10.*; 127.*; }
}Tipik kullanım alanları; ağ izleme sistemleri, yerel ağdaki test araçları ve çok sayıda kullanıcıyı tek IP üzerinden bağlayan güvenilir ağ geçitleridir.
Resmî belgeler burada açık bir uyarı yapıyor: bağlantı throttling'i DoS, flood ve kaba kuvvet saldırılarına karşı önemli bir güvenlik önlemidir; bağlantıları bundan muaf tutmak bu korumaları ciddi biçimde zayıflatır. Bu yüzden muafiyet yalnızca gerçekten güvendiğiniz IP'ler için verilmelidir.
7. Sık yapılan hatalar
- Yanlış sıralama: Özel allow bloğunu genel bloğun üstüne yazmak; özel blok hiç eşleşmez.
- Geniş muafiyet: except throttle'a büyük ve güvenilmeyen IP aralıkları eklemek; throttling koruması o aralık için anlamsızlaşır.
- Aşırı maxperip: Genel blokta yüksek maxperip vermek; tek bir IP'den çok sayıda bot bağlantısına kapı açar. Yüksek değerleri yalnızca bilinen NAT adreslerine özel bloklarla verin.
- Gerçekçi olmayan maxclients: Sunucu kapasitesinin çok üzerinde değerler; class sınırı pratikte işlevsiz kalır.
- Düz metin parola: allow parolasını yapılandırmada açık metin tutmak.
8. Değişiklikleri test etme ve uygulama
Değişiklikten sonra yapılandırmayı canlıya almadan önce hata denetimi yapın. *NIX sistemlerde:
CODE TERMINAL
./unrealircd configtest
./unrealircd rehash
./unrealircd statusWindows'ta rehash ve durum raporu için unrealircdctl rehash ve unrealircdctl status komutları kullanılır. Rehash sonrası maxperip sınırını ve yönlendirmeyi test bağlantılarıyla denemek, sıralama hatalarını canlı kullanıcılar etkilenmeden yakalamanın en kolay yoludur.
Sonuç
class, allow ve except throttle blokları birlikte sunucunun kabul kapısını oluşturur: class kaynak sınırlarını, allow kimin hangi class'a gireceğini, except throttle ise bağlantı hız sınırından kimin muaf olacağını belirler. Doğru sıralanmış allow blokları, dar tutulmuş muafiyetler ve gerçekçi limitler; ban, spamfilter ve reputation gibi üst katmanlara çok daha temiz bir trafik bırakır.
Kaynaklar: UnrealIRCd Allow block, UnrealIRCd Class block, UnrealIRCd Except throttle block, UnrealIRCd Command Line Interface
TR Siber Ekibi