E-posta altyapınızda DKIM imzası yapılandırırken karşılaştığınız dkim=fail hatalarının önemli bir bölümü yanlış veya çakışan selector tanımlarından kaynaklanır. Bu yazıda DKIM selector kavramını, DNS kaydının anatomisini ve birden fazla selector'ı güvenli biçimde nasıl yönetebileceğinizi adım adım açıklıyoruz.
s= etiketi olarak taşınır; alıcı MTA bu değeri okuyarak <selector>._domainkey.<alanadiniz> adresinden genel anahtarı çeker ve imzayı doğrular.DomainKeys Identified Mail (DKIM), RFC 6376 ile standartlaştırılmış bir e-posta kimlik doğrulama protokolüdür. Gönderen sunucu, belirlediği başlıkları ve gövdeyi özel anahtarla (private key) imzalar; alıcı sunucu ise DNS'ten alınan genel anahtarla bu imzayı doğrular. Başarılı bir doğrulama, iletinin aktarım sırasında değiştirilmediğini ve ilgili alan adı sahibinin onayladığı bir sunucudan gönderildiğini kanıtlar.
DMARC (RFC 7489) uyumu açısından değerlendirildiğinde, DKIM hizalaması From: başlığındaki alan adının d= etiketiyle örtüşmesini zorunlu kılar. SPF (RFC 7208) yalnızca zarfın gönderen adresini denetlerken DKIM, mesaj başlıklarını kapsayarak yönlendirme (forwarding) senaryolarında çok daha güvenilir bir doğrulama sunar.
Bir DKIM TXT kaydının tam DNS adı şu şekilde oluşur:
<selector>._domainkey.<alanadiniz>
Örneğin mail._domainkey.sirketiniz.com. Burada mail selector adıdır. Bu ad tamamen sizin belirlediğiniz bir etikettir; RFC 6376 Bölüm 3.5, selector değerinin yalnızca ASCII alfasayısal karakterler ve tire (-) içerebileceğini, büyük-küçük harf duyarlı olmadığını ve nokta (.) ile birden fazla parçaya bölünebileceğini belirtir.
Bir DKIM genel anahtar kaydının tipik içeriği şöyle görünür:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
v=DKIM1 sürüm etiketidir; k=rsa anahtar algoritmasını (RSA veya Ed25519); p= ise Base64 kodlanmış genel anahtarın kendisini ifade eder. Kaydı iptal etmek istediğinizde p= değerini boş bırakmak yeterlidir; bu durumda alıcı MTA'lar söz konusu anahtarı geçersiz kabul eder.
Modern e-posta ekosisteminde tek bir alan adından birçok farklı sistem posta gönderebilir: kurumsal MTA'nız, e-posta pazarlama platformunuz (ESP), CRM'iniz, transaksiyonel bildirim servisleri ve belki üçüncü taraf iş ortakları. Her servisin kendi özel anahtarına sahip olması, şu avantajları beraberinde getirir:
s= etiketine bakarak hangi sistemin imzaladığını anında anlarsınız.Gönderen MTA, imzaladığı her mesajın başına DKIM-Signature: başlığını ekler. Bu başlıkta s= etiketi, kullanılan selector adını içerir:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=sirketiniz.com; s=esp2025;
h=From:To:Subject:Date:Message-ID;
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
b=ABC123...
Alıcı MTA bu başlığı ayrıştırır, d=sirketiniz.com ve s=esp2025 değerlerini birleştirerek esp2025._domainkey.sirketiniz.com TXT kaydını sorgular. RFC 6376 Bölüm 6.1.2, bu sorgulama sürecini ve hata durumlarında uygulanacak TEMPFAIL / PERMFAIL politikalarını ayrıntıyla tanımlar.
Aşağıda üç farklı gönderen sistem için selector planlaması ve DNS yapılandırması gösterilmektedir. Her sistemin kendi anahtar çiftini üretmesi veya sizin ürettiğiniz anahtarı kullanması gerekir.
| Selector Adı | Kullanım Amacı | DNS Kaydı (Örnek) | Algoritma |
|---|---|---|---|
corp2025 |
Kurumsal MTA (Postfix/Exchange) | corp2025._domainkey.sirketiniz.com |
RSA-2048 |
esp2025 |
E-posta Pazarlama Platformu | esp2025._domainkey.sirketiniz.com |
RSA-2048 |
trx2025 |
Transaksiyonel Bildirim Servisi | trx2025._domainkey.sirketiniz.com |
Ed25519 |
OpenSSL ile RSA 2048-bit anahtar çifti üretmek için:
openssl genrsa -out corp2025_private.pem 2048
openssl rsa -in corp2025_private.pem -pubout -out corp2025_public.pem
DNS TXT kaydına girecek genel anahtarı Base64 tek satır formatında almak için:
openssl rsa -in corp2025_private.pem -pubout -outform DER \
| openssl base64 -A
Ed25519 için OpenSSL 1.1.1 ve üzeri gereklidir:
openssl genpkey -algorithm ed25519 -out trx2025_private.pem
openssl pkey -in trx2025_private.pem -pubout -outform DER \
| openssl base64 -A
DNS yönetim panelinizde her selector için ayrı bir TXT kaydı ekleyin. RFC 6376, tek bir TXT kaydında birden fazla dize (quoted string) kullanımına izin verir; ancak toplam uzunluk 255 karakteri aştığında bazı DNS sistemleri kaydı parçalara ayırır. Bu durumu önlemek için uzun anahtarları bölmeyi destekleyen bir DNS sağlayıcısı tercih edin veya anahtar uzunluğunu 2048 bit ile sınırlı tutun.
OpenDKIM kullanan bir Postfix kurulumunda /etc/opendkim/KeyTable dosyasına şu satırları ekleyin:
corp2025._domainkey.sirketiniz.com sirketiniz.com:corp2025:/etc/opendkim/keys/corp2025_private.pem
/etc/opendkim/SigningTable dosyasında ise:
*@sirketiniz.com corp2025._domainkey.sirketiniz.com
Google Postmaster Tools belgelerinde ve Microsoft'un Exchange Online DKIM kılavuzunda anahtar rotasyonu iki aşamalı bir süreç olarak tanımlanır: önce yeni selector'ı yayımlayın ve en az 48 saat bekleyin (DNS TTL propagasyonu), ardından imzalamayı yeni selector'a geçirin. Eski selector'ı hemen silmeyin; çünkü bazı alıcı sunucular DNS önbelleklerinden eski kaydı okuyarak mesajları doğrulamaya çalışabilir. RFC 6376 Bölüm 6.1.1, bu geçiş sürecinde eski anahtarı en az birkaç gün (tercihen 5-7 gün) DNS'te tutmanızı önerir.
Microsoft 365 portalından DKIM anahtarı rotate etmek için PowerShell ile şu komutu kullanabilirsiniz:
Rotate-DkimSigningConfig -KeySize 2048 -Identity sirketiniz.com
Yapılandırmanızı test etmek için aşağıdaki araçlardan yararlanabilirsiniz:
dig TXT corp2025._domainkey.sirketiniz.com komutuyla DNS kaydınızı doğrudan sorgulayabilirsiniz.opendkim-testkey -d sirketiniz.com -s corp2025 -vvv ile yerel yapılandırma ile DNS'i karşılaştırır.E-posta başlıklarında dkim=fail (bad signature) görüyorsanız en sık karşılaşılan nedenler şunlardır: imzalama sırasında mesaj gövdesi veya başlıklarının değiştirilmesi (bazı listservler veya içerik filtreleri bunu yapabilir), yanlış c= kanonikleştirme algoritması seçimi (simple/simple yerine relaxed/relaxed tercih edin), ya da DNS kaydındaki genel anahtarın özel anahtarla eşleşmemesi.
dkim=permerror hatası çoğunlukla DNS TXT kaydının sözdizim hatasından kaynaklanır; özellikle p= değerinin boş bırakılması anahtarı geçersiz ilan eder. dkim=temperror ise DNS sorgulaması sırasında geçici bir hata yaşandığını gösterir ve alıcı MTA genellikle yeniden deneme (retry) mekanizmasıyla bunu çözer.
DNS'te selector sayısı için teknik bir üst sınır yoktur. Her selector bağımsız bir TXT kaydı olduğundan dilediğiniz kadar ekleyebilirsiniz. Pratikte her aktif gönderen sistem için bir selector ve bir yedek (yeni anahtar geçişi sırasında kullanılmak üzere) bulundurmak yeterlidir.
RFC 6376, selector adının yalnızca alfasayısal karakter ve tire içerebileceğini belirtir. Yönetimi kolaylaştırmak için servisadi-yil formatı (örneğin esp2025) yaygın bir kurumsal pratiktir. Bu sayede kaydın oluşturulma yılını başlığa bakarak anlayabilirsiniz.
Bazı ESP'ler sizin alan adınız adına imzalama yapar; bu durumda size DNS'e ekleyeceğiniz CNAME veya TXT kaydını verirler. CNAME yaklaşımı özellikle anahtarı ESP'nin döndürmesine olanak tanır. Alternatif olarak bazı platformlar sizin ürettiğiniz anahtarı kabul eder; bu durumda özel anahtar yönetimi tamamen size aittir.
Evet. RFC 6376, selector adının nokta ile ayrılmış parçalar içerebileceğini belirtir. Örneğin q1.2025._domainkey.sirketiniz.com geçerli bir DNS adıdır. Ancak çoğu DNS yönetim aracı noktalı selector adlarını düzgün işlemeyebilir; bu nedenle tire kullanımını tercih etmeniz daha güvenlidir.
DKIM imzasının yokluğu tek başına reddetme nedeni değildir; ancak Gmail, Microsoft ve diğer büyük sağlayıcılar imzasız mesajları daha düşük itibar puanıyla değerlendirir. DMARC politikasında p=reject yapılandırılmışsa ve DKIM ile SPF'nin her ikisi de hizalamada başarısız olursa mesaj reddedilir. Bu nedenle DKIM, SPF ve DMARC üçlüsü birlikte uygulanmalıdır.
Ed25519, çok daha kısa anahtar uzunluğuyla (256 bit) RSA 2048-bit ile karşılaştırılabilir güvenlik sunar; bu da DNS TXT kaydının boyutunu küçültür ve imzalama/doğrulama işlemlerini hızlandırır. RFC 8463, Ed25519'u DKIM için resmi olarak standartlaştırmıştır. Ancak bazı eski MTA'lar Ed25519'u henüz desteklemeyebilir; bu nedenle kritik akışlarda her iki algoritmayı paralel olarak yayımlamak (çift imza) önerilir.
Evet. Alıcı MTA'lar, imzayı doğrulamak için DNS'teki genel anahtara ihtiyaç duyar. Selector DNS'ten kaldırıldıktan sonra o selector ile imzalanmış mesajlar dkim=permerror veya dkim=fail döner. Bu durum yalnızca aktif teslim sürecini etkiler; arşivdeki mesajlar etkilenmez ancak yeniden iletilirse sorun yaşanabilir.
Google Workspace varsayılan olarak google._domainkey.alanadiniz.com TXT kaydını oluşturur. Admin konsolunda Uygulamalar > Google Workspace > Gmail > E-posta doğrulama bölümünden bu kaydı etkinleştirebilir ve gerektiğinde 2048-bit'e yükseltebilirsiniz. Google 2023 itibarıyla 1024-bit anahtarlardan 2048-bit'e geçişi zorunlu kılmıştır.
Evet, her gönderen MTA kendi selector'ını bağımsız olarak kullanır. Alıcı MTA, başlıktaki s= etiketini okuyarak doğru selector'ı seçer. Bu nedenle farklı sistemlerin farklı selector'lar kullanması desteklenen ve önerilen bir yapıdır; hiçbir çakışma veya öncelik sorunu yaşanmaz.
Reklamsız, KVKK uyumlu; kurulum ve geçiş ücretsiz, mailleri biz taşırız.
Kurulum + migrasyon ücretsiz. KVKK uyumlu, Türkiye'de barındırma. 7/24 Türkçe destek.
Kampanya 30 Haziran'a kadar geçerlidir.