Bu rehberde JSON-RPC modüllerini yükleyecek, TLS üzerinde ayrı bir RPC listener tanımlayacak, kaynak IP'yi sınırlandıracak ve UnrealIRCd 6.1.7 ve sonrasında özel rpc-class ile en az yetki modeli kuracağız.
1. Gereksinimler ve mimari
JSON-RPC için RPC modülleri, bir RPC listener ve en az bir rpc-user gerekir. Yönetim paneli aynı sunucuda çalışıyorsa en güvenli başlangıç, RPC portunu yalnız loopback üzerinde dinletmektir. Panel ayrı sunucudaysa iki sistem arasında özel ağ veya sıkı güvenlik duvarı kuralı kullanılmalıdır.
| Bileşen | Görev | Güvenlik kararı |
|---|---|---|
| rpc.modules.default.conf | JSON-RPC yöntemlerini yükler | Gerekmeyen yöntemi özel sınıfta yetkilendirme |
| listen options rpc | HTTPS tabanlı RPC portu | Loopback veya yönetim IP'siyle sınırla |
| rpc-user | API istemcisinin kimliği | Benzersiz kullanıcı, güçlü hash'li parola |
| rpc-class | Çağrılabilecek yöntemler | full yerine readonly veya özel sınıf |
| TLS | Trafiği şifreler ve sunucuyu doğrular | Geçerli sertifika ve hostname doğrulaması |
| Güvenlik duvarı | Ağ erişimini daraltır | Yalnız panel/otomasyon IP'sine izin ver |
2. RPC modüllerini yükleme
UnrealIRCd yapılandırmasına şu include satırını ekleyin:
CODE TERMINAL
include "rpc.modules.default.conf";Bu dosya JSON-RPC yöntemlerini sağlayan modülleri yükler. JSON logging farklı bir özelliktir; API'yi açmak için log formatını JSON yapmak gerekmez. Değişiklikten sonra doğrudan rehash uygulamadan önce configtest çalıştırın.
CODE TERMINAL
cd ~/unrealircd
./unrealircd configtest3. Yalnız localhost üzerinde RPC listener
Panel aynı makinedeyse listener'ı bütün arayüzlere bağlamayın:
CODE TERMINAL
listen {
ip 127.0.0.1;
port 8600;
options { rpc; }
};IPv6 loopback kullanıyorsanız ayrı olarak ::1 için uygun listener tanımlayın. ip *; kullanmak portu bütün ağ arayüzlerinde erişilebilir hale getirebilir. RPC istemcisi yalnız yereldeyse geniş dinleme adresinin işlevsel yararı yoktur.
4. TLS sertifikası
JSON-RPC, HTTPS üzerinden kullanılmalıdır. UnrealIRCd'nin TLS yapılandırmasında geçerli sertifika ve özel anahtar bulunmalı; istemci sertifika adını doğrulamalıdır. Self-signed sertifikayı doğrulamayı kapatmak yerine kurum CA'sı veya güvenilir bir sertifika kullanın.
Reverse proxy ile TLS sonlandırılıyorsa RPC portunun proxy dışındaki ağlardan erişilemediğini doğrulayın. X-Forwarded-For benzeri başlıklar rpc-user IP eşlemesinin yerine geçmez; UnrealIRCd'nin gördüğü kaynak adres ve gerçek ağ yolu birlikte test edilmelidir.
5. İlk rpc-user: yalnız okuma
UnrealIRCd'nin yerleşik readonly sınıfı, listeleme ve bilgi sorguları için uygundur. İzleme panosu veya envanter toplayıcıya yönetim yetkisi vermeyin.
CODE TERMINAL
rpc-user monitor {
match { ip 127.0.0.1; }
password "$argon2id$ORNEK_HASH_DEGERI";
rpc-class readonly;
};Örnekteki hash kullanılmamalıdır. Parolayı UnrealIRCd'nin desteklediği parola hash aracıyla kendi sisteminizde üretin ve dosyaya açık metin yazmayın. Kimlik bilgisini panel yapılandırmasında da en dar dosya izinleriyle saklayın.
6. Özel rpc-class ile en az yetki
UnrealIRCd 6.1.7 ve sonrasında rpc-class, yöntem bazında izin tanımlamayı sağlar. Örneğin yalnız sunucu, kanal ve kullanıcı bilgisi okuyan bir entegrasyon için:
CODE TERMINAL
rpc-class inventory-readonly {
permissions {
server { list; get; }
channel { list; get; }
user { list; get; }
stats { get; }
}
};
rpc-user inventory {
match { ip 127.0.0.1; }
password "$argon2id$ORNEK_HASH_DEGERI";
rpc-class inventory-readonly;
};Bu sınıf server.rehash, server.connect, channel.set_mode, user.set_oper veya server_ban.add gibi değişiklik yapan çağrıları içermez. Uygulama yeni işlev istediğinde doğrudan full sınıfa taşımak yerine tek yöntemi, gerekçesi ve sahibiyle ekleyin.
7. Yönetim işlevlerini ayrı kullanıcıya bölme
Ban otomasyonu ile izleme paneli aynı kimliği paylaşmamalı. Ban ekleyip kaldırması gereken bir otomasyon için yalnız ilgili yöntemleri tanımlayan ayrı sınıf oluşturulabilir:
CODE TERMINAL
rpc-class ban-automation {
permissions {
server_ban { list; get; add; del; }
}
};
rpc-user banbot {
match { ip 192.0.2.25; }
password "$argon2id$FARKLI_BIR_HASH";
rpc-class ban-automation;
};192.0.2.25 belge amaçlı örnek IP'dir; kendi yönetim sunucunuzun sabit adresiyle değiştirin. Aynı otomasyonun user.set_oper gibi ayrıcalık yükselten yöntemlere ihtiyacı yoksa bu izinleri eklemeyin.
8. Ağ katmanında kısıtlama
rpc-user içindeki match bloğu güçlü bir ilk filtredir. UnrealIRCd belgeleri, eşleşmeyen bağlantının istek gövdesi ayrıştırılmadan reddedildiğini ve bunun saldırı yüzeyini azalttığını belirtir. Yine de tek katmana güvenmeyin.
- Listener'ı mümkünse 127.0.0.1 veya özel yönetim IP'sine bağlayın.
- Host güvenlik duvarında yalnız panel sunucusuna izin verin.
- Bulut security group veya ağ ACL seviyesinde aynı kısıtı tekrarlayın.
- RPC portunu genel internet taramalarına açık bırakmayın.
- Panel ile IRCd farklı ağlardaysa site-to-site VPN veya yönetim ağı kullanın.
- Kaynak IP NAT ile değişiyorsa üretimde gözlenen gerçek adresi doğrulayın.
9. JSON-RPC isteğini güvenli test etme
Kimlik bilgisini kabuk geçmişine açık biçimde yazmak yerine geçici environment değişkeni veya korumalı secrets mekanizması kullanın. Aşağıdaki gövde, sunucunun kullanılabilir RPC yöntemlerini sorgulayan zararsız rpc.info örneğidir:
CODE TERMINAL
{
"jsonrpc": "2.0",
"method": "rpc.info",
"params": {},
"id": 1
}İlk testte sertifika doğrulamasını kapatan -k veya --insecure seçeneklerine kalıcı çözüm gibi güvenmeyin. Hata varsa sertifika zincirini, hostname'i ve istemci güven deposunu düzeltin.
10. rpc.set_issuer ile işlemi kişiye bağlama
UnrealIRCd 6.1.0 ve sonrasında rpc.set_issuer, sonraki RPC komutlarının kimin adına verildiğini loglara ve ilgili ileti etiketine eklemeye yardımcı olur. Web paneli veya otomasyon, oturum açmış operatör adını issuer olarak ayarlayabilir.
Issuer, kimlik doğrulamanın yerine geçmez. API hesabı yine rpc-user ile doğrulanır; issuer ise denetlenebilirlik ve olay incelemesi için ek bağlam sağlar. Kullanıcı tarafından değiştirilebilen serbest metin yerine panelin doğrulanmış oturum kimliği kullanılmalıdır.
11. Loglama ve alarm üretimi
JSON-RPC erişimi için başarılı ve başarısız oturum açma, reddedilen IP, çağrılan yöntem, issuer ve değişiklik sonucu merkezi log sistemine gönderilmelidir. Özellikle aşağıdaki davranışlar alarm üretmelidir:
- Daha önce görülmeyen kaynak IP'den RPC bağlantısı
- Kısa sürede çok sayıda başarısız rpc-user doğrulaması
- readonly hesaptan değişiklik yapan yöntem denemesi
- server.rehash, server.connect veya server.disconnect çağrıları
- user.set_oper ve geniş kullanıcı değişiklikleri
- Çok sayıda server_ban.add veya spamfilter.add isteği
- Bakım penceresi dışında rpc-class ya da rpc-user yapılandırma değişikliği
12. Kimlik bilgisi rotasyonu
Her panel ve otomasyon için ayrı rpc-user tanımlamak, bir kimlik bilgisi sızdığında etkileneni tek başına devre dışı bırakmayı kolaylaştırır. Parola rotasyonu için yeni hash'i ekleyip istemciyi güncelleyin, doğrulamadan sonra eski kimliği kaldırın. Ortak “admin” hesabı bütün entegrasyonlarda kullanılırsa güvenli rotasyon zorlaşır.
Yapılandırma dosyası yedeklerinde parola hash'leri bulunduğundan, yedek erişimi de üretim sunucusuyla aynı hassasiyette yönetilmelidir. Panel .env dosyaları web kökünden erişilememeli ve hata sayfalarında secret gösterilmemelidir.
13. Reverse proxy kullanırken
Resmî web paneli ve RPC listener arasında reverse proxy kullanılıyorsa bağlantı zaman aşımı, body boyutu ve HTTP upgrade davranışı test edilmelidir. Proxy'nin genel internete açık yönetim yüzeyi ayrı MFA/SSO katmanı gerektirebilir; ancak bu katman rpc-user kimlik doğrulamasını kaldırmak için gerekçe değildir.
Proxy üzerinde genel allowlist varken UnrealIRCd tarafındaki rpc-user match bloğunu * yapmak katmanlı savunmayı zayıflatır. Her iki tarafta da aynı yönetim kaynağını sınırlandırın ve bir katmandaki yanlış yapılandırmanın API'yi herkese açmamasını sağlayın.
14. Yapılandırmayı devreye alma
Değişiklikleri şu sırayla uygulayın:
- unrealircd.conf ve include dosyalarının yedeğini alın.
- RPC modüllerini, listener'ı, rpc-class ve rpc-user bloklarını ekleyin.
- ./unrealircd configtest ile sözdizimini doğrulayın.
- Host ve ağ güvenlik duvarı kurallarını kontrol edin.
- ./unrealircd rehash çalıştırın ve uyarıları okuyun.
- İzin verilen kaynaktan rpc.info isteğini test edin.
- İzin verilmeyen kaynaktan bağlantının erken reddedildiğini doğrulayın.
- readonly kullanıcıyla yazma yönteminin reddedildiğini test edin.
- Log ve SIEM alarmının beklenen alanları aldığını doğrulayın.
15. Sık hatalar
Bağlantı reddediliyor: Listener IP/portu, host güvenlik duvarı ve rpc-user match adresi eşleşmiyor olabilir. NAT sonrası UnrealIRCd'nin gördüğü kaynak IP'yi logdan kontrol edin.
401 veya kimlik doğrulama hatası: Kullanıcı adı, parola/hash biçimi ve istemcinin Authorization gönderimi incelenmeli. Aynı parolayı farklı istemcilerde kopyalamak yerine ayrı kullanıcı oluşturun.
Yöntem bulunamadı: İlgili RPC modülü yüklenmemiş veya kullanılan sürüm yöntemi desteklemiyor olabilir. rpc.info çıktısından gerçek yöntem listesini ve modül sürümünü kontrol edin.
Yetki reddedildi: rpc-class gerekli yöntemi içermiyor olabilir. Full yetki vermeden önce yalnız gereken permission dalını ekleyin ve configtest uygulayın.
Panel çalışıyor ancak IP kısıtı etkisiz: Reverse proxy veya container ağı bütün istekleri aynı ara IP'den getiriyor olabilir. Ağ mimarisini düzeltmeden geniş match kullanmayın.
16. Güvenlik kontrol listesi
- RPC listener genel internet yerine loopback veya özel yönetim ağında mı?
- Her entegrasyonun ayrı rpc-user hesabı var mı?
- Parolalar hash'li ve secrets depolama alanında korunuyor mu?
- İzleme işleri readonly veya özel salt-okunur rpc-class kullanıyor mu?
- Değişiklik yapan otomasyon yalnız gereken yöntemlere sahip mi?
- Kaynak IP hem rpc-user match hem güvenlik duvarında kısıtlı mı?
- TLS sertifikası ve hostname istemci tarafından doğrulanıyor mu?
- Issuer, yöntem ve sonuç merkezi loglarda görülebiliyor mu?
- Kimlik bilgisi rotasyonu ve acil devre dışı bırakma prosedürü test edildi mi?
Sonuç
UnrealIRCd JSON-RPC, web paneli ve otomasyon için güçlü bir yönetim arayüzüdür; güvenli kullanımın temeli ise API'yi dar bir ağ yolunda tutmak ve her istemciye yalnız gereken yöntemleri vermektir. Loopback listener, TLS, sıkı rpc-user match, özel rpc-class, ayrı kimlik bilgileri ve merkezi loglama birlikte uygulandığında full yetkili, internete açık bir yönetim portundan çok daha dayanıklı bir mimari elde edilir.
Resmî kaynaklar
- UnrealIRCd JSON-RPC belgeleri
- UnrealIRCd rpc-user bloğu
- UnrealIRCd rpc-class bloğu
- UnrealIRCd JSON-RPC yöntemleri ve rpc.info
- UnrealIRCd resmî web paneli
TR Siber Ekibi