SASL neden gerekli?
Klasik NickServ IDENTIFY akışında istemci önce sunucuya bağlanır, kanallara katılır, ardından NickServ'e özel mesaj göndererek kimliğini doğrular. Bu aradaki pencerede istemci kayıtlı takma adı kullanıyor gibi görünse de aslında doğrulanmamıştır; bazı istemciler doğrulama tamamlanmadan mesaj gönderebilir ve loglarda kısa süreli "sahte kimlikli" görünüm oluşabilir. SASL (Simple Authentication and Security Layer), bu doğrulamayı bağlantı el sıkışmasının içine, kanal katılımından önce taşıyarak hem güvenliği hem de kullanıcı deneyimini iyileştirir. UnrealIRCd 6, IRCv3 `sasl` capability'sini destekler ve gerçek kimlik doğrulamayı bağlı olduğu servis yazılımına (Atheme veya Anope) devreder.
Ön koşullar
- UnrealIRCd 6.1+ ve services protokolü üzerinden bağlı, SASL destekleyen bir services paketi (Atheme 7.2+ `saslserv`, Anope 2.0+ `m_sasl`).
- Sunucu-servis linki TLS üzerinden ve tercihen `SPKIFP` ile doğrulanmış olmalı (bkz. sunucu linkleme güvenliği rehberimiz); SASL kimlik bilgileri bu link üzerinden taşınır.
- `set::plaintext-policy` ve TLS zorunluluğu yapılandırılmış olmalı ki PLAIN mekanizması açık metin bağlantılarda kullanılmasın.
UnrealIRCd tarafında yapılandırma
SASL desteği UnrealIRCd 6'da varsayılan olarak derlenmiştir; ayrı bir modül yüklemeniz gerekmez. Sunucunuzun services ile SASL konuşabilmesi için services linkinin doğru şekilde tanımlanması yeterlidir:
CODE TERMINAL
link services.ornekag.net {
hostname "services.ornekag.net";
outgoing {
bind-ip *;
hostname services.ornekag.net;
port 6900;
}
password "guclu-link-parolasi" { spkifp "AB:CD:...:EF"; };
class servers;
verify-certificate yes;
}
set {
plaintext-policy {
server strict;
oper strict;
client warn;
}
outgoing-webhook { }
}`set::plaintext-policy::client warn` (veya ortamınıza göre `deny`), kullanıcıları TLS olmayan bağlantılarda SASL PLAIN göndermemeleri konusunda uyarır; SASL kimlik bilgileri düz metin bağlantılarda asla taşınmamalıdır.
Atheme tarafında saslserv
Atheme kullanıyorsanız `saslserv` modülünün `atheme.conf` içinde yüklü olduğundan emin olun:
CODE TERMINAL
loadmodule "modules/saslserv/main";
loadmodule "modules/saslserv/plain";
loadmodule "modules/saslserv/external";
saslserv {
nick = "SaslServ";
user = "SaslServ";
host = "services.ornekag.net";
real = "SASL Authentication Agent";
}`external` modülü, sertifika parmak izi (CertFP) tabanlı kimlik doğrulamayı etkinleştirir; kullanıcılar `/msg NickServ CERT ADD` ile kendi istemci sertifikalarının parmak izini hesaplarına kaydedebilir ve şifre girmeden bağlanabilir.
Anope tarafında m_sasl
Anope için `modules.conf` içinde SASL modülünü etkinleştirin:
CODE TERMINAL
module { name = "sasl" }
module { name = "sasl_plain" }
module { name = "sasl_external" }
module { name = "sasl_scram" }Anope 2.1+ sürümlerinde `sasl_scram` modülü, parolayı hiç iletmeden SCRAM-SHA-256 ile doğrulama imkânı sunar; destekleyen istemcilerde PLAIN yerine tercih edilmelidir.
İstemci tarafında test
Çoğu modern istemci (WeeChat, HexChat, Irssi) SASL'ı yerleşik destekler. WeeChat örneği:
CODE TERMINAL
/set irc.server.ornekag.sasl_mechanism plain
/set irc.server.ornekag.sasl_username "kullaniciadi"
/set irc.server.ornekag.sasl_password "parola"
/set irc.server.ornekag.sasl_timeout 15
/connect ornekagCertFP kullanacaksanız `sasl_mechanism` değerini `external` yapın ve istemci TLS sertifikanızı ayarlayın; `sasl_username`/`sasl_password` gerekmez.
Doğrulama ve sorun giderme
- Sunucu tarafında `/STATS` veya operclass izniyle `/SASLLIST` (services'e özgü komut) ile aktif SASL oturumlarını görebilirsiniz.
- Başarısız denemeler için services loglarını (`saslserv.log` veya Anope `services.log`) izleyin; art arda başarısız denemeler kaba kuvvet (brute-force) belirtisi olabilir.
- UnrealIRCd tarafında `set::anti-flood::connect-flood` ve services'te başarısız SASL denemeleri için hız sınırlaması (throttling) ayarlarının etkin olduğundan emin olun.
- "SASL authentication failed" hatası genellikle link parolası uyuşmazlığından veya services ile ircd arasındaki protokol sürümü farkından kaynaklanır; her iki tarafın da güncel sürümde olduğunu doğrulayın.
Sertleştirme önerileri
- PLAIN mekanizmasını yalnızca TLS bağlantılarda kabul edin; `plaintext-policy` ile düz metin SASL'ı engelleyin.
- Mümkün olan istemcilerde CertFP (`external`) veya SCRAM'i varsayılan yapın, parola tabanlı PLAIN'i yedek bırakın.
- Services ile ircd arasındaki linki `SPKIFP` doğrulamasıyla koruyun; SASL kimlik verileri bu kanaldan geçer.
- Başarısız SASL denemelerini merkezi log/SIEM sisteminize aktararak marka/hesap avlama (credential stuffing) girişimlerini erken tespit edin.
- NickServ üzerinde iki faktörlü doğrulama (Atheme `nicknick` OTP modülleri gibi) destekleniyorsa SASL ile birlikte etkinleştirin.
SASL'ı doğru yapılandırmak, hem kullanıcı deneyimini NickServ IDENTIFY beklentisinden kurtarır hem de ağınızın kimlik doğrulama yüzeyini bağlantı anına taşıyarak yarı-doğrulanmış oturum penceresini tamamen ortadan kaldırır.
TR Siber Ekibi