Exchange 2016'da SenderID, SPF, DKIM ve DMARC – Bölüm II


Önceki blog yazısında SPF'nin nasıl çalıştığını ve gönderen SMTP sunucularının orijinalliğini doğrulamak için genel DNS'yi nasıl kullandığını tartışmıştım. SPF doğru şekilde uygulandığında, alıcı posta sunucusu, gönderen posta sunucusunun, gönderen veya kuruluşu adına e-posta göndermesine izin verilip verilmediğini doğrulayabilir.

Bu blog yazısında, e-posta doğrulamada ek (ve daha karmaşık ve sahteciliği daha zor) bir adım olarak DKIM imzalamayı tartışacağım.

Kısa bir hatırlatma olarak laboratuvar ortamım şu şekilde görünüyor:

Birkaç Posta Kutusunu barındıran bir Exchange 2016 CU2 Posta Kutusu sunucusu ve bir Exchange 2016 CU2 Uç Aktarım sunucusu vardır. Edge senkronizasyonu, tüm gelen ve giden SMTP trafiğinin Edge Transport sunucusu tarafından yönetilmesini sağlayacaktır.

Önceki blog yazımda aşağıdaki değere sahip bir SPF kaydı oluşturulmuş ve uygulanmıştır:

v=spf1 a:smtphost.exchangelabs.nl ~tümü

böylece posta sunucuları, Edge Transport sunucumun benim adıma e-posta göndermesine izin verildiğini doğrulayabilir ve posta başka bir posta sunucusundan geliyorsa, bu sahte bir mesaj olabilir.

Ama şimdilik DKIM ile devam edelim.

Etki Alanı Anahtarları Tanımlanan Posta

Etki Alanı Anahtarları Tanımlanmış Posta anlamına gelen DKIM ise başka bir çözümdür. Bu gerçek bir spam önleme çözümü değil, daha çok meşru bir doğrulama çözümüdür. Ve bir e-posta mesajı doğrulandığında, büyük olasılıkla spam değildir (yani, gönderenin ortamı tehlikeye girmediği veya rotası değiştirilmediği sürece).

DKIM tamamen e-posta mesajlarının imzalanması ve doğrulanmasıyla ilgilidir. Bu nedenle bunu, S/MIME'nin istemci tabanlı ve DKIM'nin sunucu tabanlı olduğu S/MIME'nin imzalama yetenekleriyle karşılaştırabilirsiniz.

DKIM iki işlemden oluşur:

  • İletinin imzalanması. Bu, gönderen ana bilgisayarın kendisi tarafından gerçekleştirilebileceği gibi, üçüncü taraf bir uygulama veya hizmet tarafından da yapılabilir. Bir mesajı imzalarken, imzalama modülü mesaja uygun bilgileri içeren bir DKIM-Signature başlığı ekler. Bu imzalama modülü, imza oluşturmak için özel anahtar kullanır, dolayısıyla yalnızca bu sunucunun (veya kuruluşun) mesajları imzalayabilmesini sağlar.
  • Mesaj doğrulanıyor. Tıpkı imzalamada olduğu gibi bu işlem de alıcı ana bilgisayar veya 3. taraf bir uygulama veya hizmet tarafından gerçekleştirilebilir. Doğrulama modülü, DKM-İmza alanındaki bilgileri okur ve gönderen kuruluşun ortak anahtarını kullanarak imzayı doğrular.

Özel ve genel anahtar bir anahtar çifti oluşturur. Özel anahtar yalnızca gönderen posta sunucularında bilinir, genel anahtar ise gönderenin genel DNS sunucusunda yayınlanır ve bu nedenle imzalı mesajı doğrulaması gereken herkes tarafından kullanılabilir.

Dolayısıyla, DKIM-İmza başlığı DKIM'de önemli bir rol oynar ve tipik bir DKM-İmza başlığı şu şekilde görünebilir:

DKIM-Signature: v=1; a=rsa-sha256; d=örnek.net; s=brisbane;
c=rahat/basit; q=dns/txt; 1=1234; t=1117574938; x=1118006938;
h=başlangıç:bitiş:konu:tarih:anahtar kelimeler:anahtar kelimeler;
bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
b=dzdVyOfAKCdLXdJOc9G2q8LoXSlEniSbav+yuU4zGeeruD00lszZ
VoG4ZHRNiYzR

Bir DKIM İmza başlığında aşağıdaki etiketler tanımlanabilir:

  • v=sürüm
  • a=imzalama algoritması
  • d=Etki Alanı
  • s=Seçici
  • c=Gövde ve başlık için kanonikleştirme algoritması
  • q=Sorgu yöntemi
  • l=vücudun kanonikleştirme kısmının uzunluğu
  • t=zaman damgası imzası
  • x=son kullanma süresi
  • h=imzalı başlık alanlarının listesi
  • b=seçilen mesaj başlıklarının karması
  • bh=mesaj gövdesinin karması

Bir mesajı imzalamak için imzalama modülü ilk olarak mesaj gövdesinin bh etiketi ile saklanan bir karmasını oluşturur. Daha sonra mesajdaki seçilen başlıklara hash uygulanır ve bunlar b etiketinde saklanır. Yani iki karma oluşturuluyor. Her iki karma da mesajın DKIM başlığında saklanır. Her ikisi de yukarıdaki DKIM-İmza başlığı örneğinde açıkça görülmektedir.

Bir mesajı imzalamak için bir anahtar çiftine ihtiyacınız vardır. Özel anahtar, posta sunucusu tarafından mesajı imzalamak için kullanılır; genel anahtar, DNS'de saklanır ve imzanın şifresini çözmek için alıcı sunucu tarafından alınabilir. Bir anahtar çiftini nasıl edinirsiniz?

Anahtar çifti oluşturmak için http://dkimcore.org sitesini kullanabilirsiniz. Anahtar çifti bu web sitesinde oluşturulduğundan ve (tamam, belki geçici olarak) saklandığından, bu yalnızca test amacıyla kullanılmalıdır.

Oluşturulan özel anahtar, gönderen posta sunucusundaki imzalama modülüne girilmelidir, bu şuna benzer:

—-BEGIN RSA ÖZEL ANAHTARI—-
MIICXAIBAAKBgQCy9cx399ZJ3xhCDcVmHOFkFWw5XAuWls0npBNO1hiMeUr0qI/c
+Abmjma2O/VB5oCPGHzRT3f78BlGryJKjEAyZKBE7U+GkaCGEVEjQqGEWnsF7tql
OkWW99Lx1VOEJItO9yMrRpmA6Ml01jH6rkBeADhUpgKAUD0fN+ZCnlVv1QIDAQAB
AoGAa4BLuyUdjHJ/V+59zcE7g6t6v1oTe/pKcq2VC56AUKHr7Nv0z4AOZSDVglKy
GUwlnc/P6swZ/zVTeapqpu1pAdtPiglf70GMDPA1YUqxaKXnH/jZz8g7o5L2F1pw
6CZoPDzXnCx0BAFuAyByonOIolFf9iPnMkm809d9La/Y0wECQQDZxkgPeRbHmySW
USfq19vqH5Kz3YYjW+E/rMXMBE9qtfYaiQJBAJ+sVmGh8yXfhu/iAcYZi/R9Y/ug
Tu6mky+8HzIhc8kG1G8c4Xo4Y3Oj/RyG/00iB5JgIkZgaMjaPN9pCwBkdfECQBjd
UWgNymikJWe9PmZviQ6VtH3Eyw3dk2+fo5odTZ/wA0tdetXBf2poL2eoBHoK2tt5
+T/o1Z/UGRMBV/l9xxECQEyUnkqkX+2YEkxotCyVKt+whxdshZFAoPqGzIyN4Spq
w4j2w3xiPYSzpyXDx+6Dgpyb/Ru8MhNhakNRYIMjK64=
—-SON RSA ÖZEL ANAHTARI—-

Oluşturulan genel anahtar (BIND 9 DNS formatında) şuna benzer:

1471253148.exchangelabs._domainkey.exchangelabs.nl. TXT'DE (

“v=DKIM1;t=s;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmutszXoY6C8/xlzy/Hrz954Gy”
“5zf0O8q/+brIO9o
+WyYeoMkNjs2NEy9z20Ur7t1lP64KH7dx/BKK6hlwRKxTw70D”
“MU5HC5ZJtvLYuiiUz3KGuEMDSwsBpY4aAtDhVG7CjYheSoIQ5kD2EcvnZJaQTPTa”
“tKLxEwImU2tYwPmqyQIDAQAB”)

Bu örnekteki seçici “1471253148.exchangelabs” olup, seçici ise genel anahtarın saklandığı DNS kaydıdır.

Not. Bu örnekte gerçek ortak anahtar (Base64 kodlu)
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmutszXoY6C8/xlzy/Hrz954Gy5zf0O8q/+brIO9o+WyYeoMkNjs2NEy9z20Ur7t1lP 64KH7dx/BKK 6hlwRKxTw70D MU5HC5ZJtvLYuiiUz3KGuEMDSwsBpY4aAtDhVG7CjYheSoIQ5kD2EcvnZJaQTPTatKLxEwImU2tYwPmqyQIDAQAB

DNS'ye eklendikten sonra genel DKIM Çekirdek anahtarını test etmek için http://dkimcore.org/tools sitesini kullanabilirsiniz. Seçiciyi ve alan adını girebileceğiniz gibi, önceki adımda bulunan kaydı da girebilirsiniz. Seçiciyi ve alan adını girmek sanırım en mantıklısı:

DNS'deki DKIM kayıtlarını kontrol etmek için Kontrol Et'i tıklayın; şunun gibi bir şey göreceksiniz:

DKIM kaydınızı test etmek için http://mxtoolbox.com/dkim.aspx sitesini de kullanabilirsiniz; yalnızca alan adını ve seçiciyi girin:

Not. DKIMCORE.ORG tarafından oluşturulan anahtar çiftini test amacıyla kullanabilirsiniz ve anahtar çiftini bu siteden silerseniz, onu üretimde de kullanabilmeniz gerekir. Ancak bu bir güvenlik riski oluşturabilir. Anahtar çifti internette oluşturulduğundan beri, artık anahtar çiftine ne olacağını asla bilemezsiniz. Daha iyi bir çözüm, OPENSSL veya PUTTYGEN gibi bir araç kullanarak bir anahtar çifti oluşturmaktır.

Yani bu noktada her şey yerli yerinde. Mesajları imzalamak için özel bir anahtar var, DNS'de saklanan bir ortak anahtar var ve artık hazırsınız. Mesajlar (gönderen) sunucunuza gönderilir, alıcı sunucu mesajın başlığını okuyacaktır ve seçici anahtara bağlı olarak sunucu imzayı doğrulamak için genel anahtarı alabilir.

Exchange Sunucusu ve DKIM

Ancak önemli bir şey daha var… Önceki bölümde "Exchange sunucusu" adını kullanmadığımı fark etmiş olabilirsiniz; bunun nedeni Exchange'in DKIM imzalamayı ve kutudan çıktığı gibi doğrulamayı desteklememesidir. Bunun için 3.. yazılımı kullanmanız gerekir, ancak GitHub'da bazı DKIM imzalama yazılımlarını da indirebilirsiniz.

İndirildiğinde, çıkartıldığında ve kurulduğunda (Exchange 2016 Edge Transport Server'da), DKIM imzalama modülünü (temel olarak bir aktarım kuralı olan) yapılandırabilirsiniz. En önemli sekme, alana özel ayarları yapılandırabileceğiniz Etki Alanı Ayarlarıdır:

Bir mesaj gönderildiğinde, DKIM imzalayanı mesajı işleyecek, mesajı imzalayacak ve DKIM Bilgileri başlığını ekleyecektir. Başka bir harici Posta Kutusuna e-posta mesajı gönderin (Office 365 imzalı DKIM mesajlarını doğrulayabildiği için Office 365'te bir Posta Kutusu kullandım) ve mesaj başlığında aşağıdaki benzer bilgileri göreceksiniz:

DKIM-Signature: v=1; a=rsa-sha256; d=Exchangelabs.nl;
s=1471253148.exchangelabs; c=basit/basit; t=1471374160;
h=from:konu:to:tarih:mesaj-kimliği;
bh=b7KyI3BYV0CyZpQwBxNaF6lgrZQOwdY+ZRYmUTfcxNE=;
b=hWLVh5I4SMMqmFkXlem1wjj+WT2hrNkduciEAJmbQ9nrkugPFv9LFYl9ray1bKhIN0wIdMA0jnr
9FRtaSeMaAht0yM83hPTSy6OcZ89Bapdl6NGycyTaGCwea5iwJKH9/ZTt2cUtCh9hrZyINBT5uvKA
bp9YhzXU6Ks9uWExQ7g=

DKIM İmzası meşru görünüyor ve mesaj başlığında kimlik doğrulamanın kendisiyle ilgili daha fazla bilgi var:

Kimlik Doğrulama Sonuçları: spf=pass (gönderenin IP'si 176.62.196.244)
smtp.mailfrom=Exchangelabs.nl; wesselius.info; dkim=pass (imza
idi) doğrulandı) title.d=Exchangelabs.nl;wesselius.info; dmarc=en iyi tahmin parolası
action=none başlık.from=Exchangelabs.nl;wesselius.info; dkim=geçiş (imza
doğrulandı) head.d=Exchangelabs.nl;
Alınan-SPF: Başarılı (protection.outlook.com: Exchangelabs.nl'nin etki alanı
izin verilen gönderen olarak 176.62.196.244'ü belirtir)
alıcı=koruma.outlook.com; istemci-ip=176.62.196.244;
helo=smtphost.exchangelabs.nl;

Bu noktada hem SPF hem de DKIM, Exchange 2016 ortamım için doğru şekilde çalışıyor ve Edge Transport sunucusu, DKIM'yi kullanarak e-posta mesajlarını düzgün bir şekilde imzalıyor.

Ne yazık ki şu anda Exchange sunucumda yalnızca bir DKIM imzalama modülüm var ve DKIM doğrulama modülünü bulamadım.

Özet

DKIM tamamen SMTP mesajlarındaki başlık bilgilerinin imzalanması ve doğrulanmasıyla ilgilidir. İmzalama yalnızca posta sunucunuz tarafından kullanılabilen özel bir anahtarla gerçekleştiğinden, alıcı posta sunucusu, mesajın gerçekten kuruluşunuzdan geldiğinden ve bunun sahte bir mesaj olmadığından emin olabilir.

DKIM, özel anahtarın gönderen posta sunucusu tarafından kullanıldığı ve genel anahtarın genel DNS'deki bir DNS kaydında saklandığı bir anahtar çifti kullanıyor. Biraz karmaşık görünüyor ve çoğu Exchange yöneticisi bunun karmaşık olduğunu düşünüyor, ancak laboratuvar ortamında DKIM ile uğraştığınızda o kadar da kötü olmadığını hemen anlarsınız.

Bu blog yazısı, DKIM'nin Exchange 2016 sunucusuna kurulması ve yapılandırılmasıyla ilgiliydi ve GitHub'dan indirdiğim yazılım aynı zamanda Exchange 2013 ve Exchange 2010 için de mevcut. Yükleme ve yapılandırma zahmetini istemiyorsanız şunu da tercih edebilirsiniz: IronPort, Exchange Online Protection (EOP) veya DKIM hizmetleri de sunan messageLabs gibi bir üçüncü taraf cihazını veya hizmetini kullanmak.

Bir sonraki blogumda DMARC'yi tartışacağım çünkü DMARC, SPF ve DKIM'in üzerine inşa edilmiştir.

Daha fazla bilgi

  • DomainKeys Tanımlı Posta - https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
  • DomainKeys Tanımlanmış Posta (DKIM) Geliştirme, Dağıtım ve Operasyonlar - http://dkim.org/specs/draft-ietf-dkim-deployment-11.html
  • Exchange Online, varsayılan DKIM imzalama özelliğini herkese sunuyor - https://blogs.msdn.microsoft.com/tzink/2015/12/16/exchange-online-is-rolling-out-default-dkim-signing-to- herkes/
  • Office 365'te açık DKIM imzalamayı etkinleştirin - https://supertekboy.com/2016/06/27/enable-dkim-signing-office-365/
  • EmailArchitect Destek Forumu - https://www.emailarchitect.net/forum/yaf_postst357_Set-up-DKIM-in-Exchange-2007-2010-2013.aspx
  • Microsoft Exchange Server için DKIM İmzalama Aracısı - https://github.com/Pro/dkim-exchange
  • Office 365'te DKIM ve DMARC ile gelişmiş e-posta koruması - https://blogs.office.com/2015/01/20/enhanced-email-protection-dkim-dmarc-office-365/
  • Office 365'te DKIM imzalamayı manuel olarak bağlama - https://blogs.msdn.microsoft.com/tzink/2015/10/08/manually-hooking-up-dkim-signing-in-office-365/
  • Etki Alanı Anahtarlarıyla Tanımlanmış Posta (DKIM.ORG) - http://dkim.org/`

İlgili makaleler