SMTP protokolünün istenmeyen mesajlara karşı hiçbir savunmasının olmamasından dolayı SPF (sender policy framework) denen bir koruma mekanizması var. Her alan adı, yetkilendirdiği "eposta gönderebilen IP adreslerini" belirtmeli. Bunu yapmak üzere seçilen yöntem, DNS sunucuya bir TXT kaydı oluşturmak.
Bu kayıt
v=spf1
ile başlamalı. Bu, yürürlükteki SPF sürümünü gösteriyor; henüz sürüm 1.
İkinci olarak eposta göndermekle yetkili sunucumuzun IP adresi olmalı. Bunu IPv4 veya IPv6 öneki ile belirtebiliriz. Örneğin
ip4:144.178.36.0/24
veya
ip6:2a01:b747:3001:200::/56
gibi. Tek bir IP veya CIDR notasyonu ile bir subnet olabilir. Ama bu eposta gönderme işini Google veya Microsoft gibi bir firmanın sunduğu hizmetler ile yapıyorsak bu iş için onların SPF kaydını bizim kaydımıza dahil edebiliriz.
include:_spf.google.com
Son aşamada da bizim yetkilendirdiğimiz IP adresleri veya dış hizmetlerin dışında gönderilmiş tüm eposta mesajlarına ne yapılması gerektiği ile ilgili önerimizi belirtebiliriz. Bu sadece öneri. Herkesin uyacağı kesin bir kural değil. Olası seçenekler şunlar
-all # Fail: Geri kalan mesajların hepsi geçersizdir~all # Soft fail: Hepsi geçersiz olabilir, alıcı karar versin?all # Neutral: Bu konuda bir davranış belirlenmemiş+all # Pass: Hepsi geçerli olsun Bugün geçerli olan bir örnek vereyim. 57.103.88.43 adresinden gelen ve isim@icloud.com gibi bir gönderen adresine sahip mesaj acaba gerçekten Apple sunucularından mı gönderilmiştir? Önce icloud.com alan adına ait SPF kaydını sorgulayalım. Ben isim çözümlemeleri için CloudFlare'in 1.1.1.1 DNS sunucusunu kullandım ama belirtilmesi zorunlu değil, başka geçerli/güvenilir bir sunucu da kullanılabilir.
Resolve-DnsName -Name icloud.com -Type TXT -Server 1.1.1.1
Bu cmdlet şöyle bir çıktı üretti:
Name Type TTL Section Strings
---- ---- --- ------- -------
icloud.com TXT 3207 Answer {google-site-verification=Ik3jMkCjHnUgyIo
FR0Kw74srr0H5ynFmUk8fyY1uBck}
icloud.com TXT 3207 Answer {google-site-verification=knAEOH4QxR29I4g
jRkpkvmUmP2AA7WrDk8Kq0wu9g9o}
icloud.com TXT 3207 Answer {yahoo-verification-key=Ga0ZBHHIemhhe2EkR
77Byx+IKXuf2Ezi90h0e6draoQ=}
icloud.com TXT 3207 Answer {google-site-verification=Gc0Hl3EIrWDLXgi
svPdkUCAEwNs0gg5JHtd2pZD3J04}
icloud.com TXT 3207 Answer {v=spf1 redirect=_spf.icloud.com}
Bir alan adının birden fazla TXT kaydı olabilir ama sadece bir tane SPF kaydı olabilir. Birden fazla SPF kaydı geçerli değil. Burada bizim ilgilendiğimiz en alttaki v=spf1 ile başlayan satır.
v=spf1 redirect=_spf.icloud.comredirect de include gibi, ama kararı da tamamen yönlendirdiği alan adının kararına bırakıyor. include ile -all gibi bir seçim belirtmek mümkünken, redirect ile değil. Bu durumda Yapmamız gereken _spf.icloud.com için SPF kaydını bir daha sorgulamak.
Resolve-DnsName -Name _spf.icloud.com -Type TXT -Server 1.1.1.1
Bu da şöyle bir çıktı verdi:
v=spf1 include:_nets2.icloud.com include:_nets1.icloud.com include:_nets0.icloud.com ~all
Matruşka bebek gibi. Sıra
_nets0.icloud.com
_nets1.icloud.com
_nets2.icloud.com
URL'leri için SPF sogrusu yapmaya geldi. Sırasıyla bunları da yapınca aşağıdaki gibi bir sonuç elde ettim:
_nets0.icloud.com
17.41.0.0/16
17.58.0.0/16
17.142.0.0/15
17.57.155.0/24
17.57.156.0/24
_nets1.icloud.com
144.178.36.0/24
144.178.38.0/24
112.19.199.64/29
112.19.242.64/29
222.73.195.64/29
157.255.1.64/29
106.39.212.64/29
123.126.78.64/29
183.240.219.64/29
39.156.163.64/29
_nets2.icloud.com
57.103.64.0/18
2a01:b747:3000:200::/56
2a01:b747:3001:200::/56
2a01:b747:3002:200::/56
2a01:b747:3003:200::/56
2a01:b747:3004:200::/56
2a01:b747:3005:200::/56
2a01:b747:3006:200::/56
2a01:b747:3007::/56
Bana mesajı gönderen IP adresi 57.103.88.43 bu listede, _nets2 sorgusunun ilk satırında var. 57.103.64.0/18 subnet'inin sınırları:
57.103.64.1 - 57.103.127.254
arasında. Sonuç: gönderen IP adresi yetkilendirilmiş.