Dkim, RFC4871‘de standartları belirlenmiş bir e-mail kimlik denetleme yöntemidir. Bu yöntem, gönderilen postaların gerçekten ilgili adresten gönderilip gönderilmediğinin tespit edilebilmesi için kullanılmaktadır. Örneğin bir spammer ya da phising saldırısı amaçlayan birisi sizin e-posta adresinizi From: adresine yazarak herhangi birine bir mail gönderebilir. İşte DKIM aslında gerçek adres sahibinden gönderilmeyen forge edilmiş bu tip postaların saptanmasını amaçlamaktadır.
Bu yöntem ilk olarak DomainKeys adı altında Yahoo! tarafından geliştirilmiş olsa da artık yavaş yavaş yerini DKIM (Domainkeys Identified Mail)’e bırakmaya başlamıştır. Ancak her iki yöntemde hali hazırda kullanılmaktadır. Örneğin Yahoo ve Gmail gibi büyük posta sağlayıcıları hem DomainKey hem de DKIM kontrolü yapmaktadırlar. Tabii DKIM ya da DomainKey ile imzalanmamış mailleri de kabul etmektedirler. Yani ortada zorunlu bir durum bulunmamaktadır.
Fakat dediğim gibi, çok fazla mail gönderimi yapan bir kurumunuz varsa, DKIM kullanmak spam filtreleri ile iyi geçinmeyi sağlayıcı etkenlerden birisi olacaktır. Bu nedenle ben de gönderilen mailler için DKIM kullanmaktayım.
Bunun yanı sıra, yahoo ya da gmail’in yaptığı gibi gelen postalar için siz de sunucularınızda DKIM ya da Domainkey kontrolü yapabilirsiniz. Örnek olarak Spamassassin ile bu iş yapılabiliyor.Fakat, bu her iki teknoloji de uzun zamandır var olmalarına rağmen pek fazla kullanılmamaktadır. Bu açıdan spam ile başınız çok büyük belada değilse DKIM ya da Domainkey sorgulaması yapmak en uç nokta güvenlik yöntemi olacaktır.
DKIM’in ne olduğuna değindikten sonra nasıl çalıştığı ile ilgili olarak teorik tarafına değinmek istiyorum.
DKIM Nasıl Çalışır ?
Kullandığınız posta sunucusuna DKIM implementasyonu yaptığınız zaman, MTA’nız giden maillerin header bölümüne, DKIM-Signature denilen ve mailin içeriğini (header ve body’i) kapsayan bir dijital imza ekler. Bu imzalama işlemi herhangi bir dosyanın şifrelenmesinden farksız olarak gerçekleşen bir konudur.
Misal olarak elinizdeki bir dosyayı pgp, gpg vs gibi yazılımlarla şifrelemek için öncelikle örneğin openssl kullanarak bir private ve public key oluşturursunuz, sonrasında şifrelenecek dosyayı private key ile encrypt eder ve iletmek istediğiniz kişiye gönderirsiniz. Alıcı şifrelenmiş dosyayı açmak için imzalama sırasında kullanılan private key’in public key’ine ihtiyaç duyar. Bu key’i alıcıya yollamanız durumunda, alıcı şifrelenmiş datayı bu public key ile açabilir.
DKIM olayında da mantık benzerdir. Tek fark, mailin doğrulanmasını sağlayacak olan header bölümünde yer alan şifrelenmiş verinin decrypt edilmesi için gerekli olan public key’in, maili gönderen domaine ait bir DNS kaydından yayınlanmasıdır. Böylece, gönderilen maili alan SMTP sunucusu bir DNS sorgusu ile şifrelenmiş veriyi açabilmek için ihtiyaç duyduğu public key’i edinebilir ve decrypt işlemini yapabilir. (Yazının ilerleyen bölümlerinde DNS kayıtlarının nasıl olması gerektiğini anlatacağım.)
Sonuç olarak mailin tamamını içeren şifrelenmiş bölüm SMTP sunucusu tarafından açılır ve mailin içeriği ile aynı olup olmadığı kontrol edilir. Eğer şifrelenmiş veri, mailin içeriği ile aynı ise doğrulama gerçekleşmiş olur ve posta sunucusu bu mailin gerçekten sizden geldiğine emin olur. Mailin açılması için gerekli public key’in edinilmesi bir faz, mailin imzalı kısmı ile imzasız kısmının birbiri ile uyuşması ikinci fazdır. Her iki şart da yerini getirilirse doğrulama tamamlanmış olur.
Konuya yabancıysanız aklınız karışmış olabilir, (yabancı değilseniz kurulum notlarının verildiği bir sonraki bölüme atlayabilirsiniz.) Bu nedenle, bir örnek üzerinden anlatarak toparlamak istiyorum.
Örnek olarak, gmail’e DKIM ile imzalanmış bir mail gönderdiğiniz zaman, mailin başlık kısmında, postanın mail sunucunuz tarafından imzalandığını belirtir “signed-by alan-adı.com” başlıklı aşağıdaki şekilde bir ibare görürsünüz.