SPF kaydınız sorunsuz görünüyor: posta kutusu sağlayıcınız, bülten aracınız ve CRM için birkaç include, sonda da -all. Yine de bir ileti başlığında spf=permerror yazıyor, DMARC raporlarınız SPF hataları gösteriyor veya bir kontrol aracı “too many DNS lookups” bildiriyor. Neden genellikle SPF standardındaki 10 DNS sorgulayan terim sınırıdır; bu sınır her include’un içinde gizlenen sorguları da sayar.
Bu rehber hangi terimlerin sayıldığını ve hangilerinin sayılmadığını, void lookup’lar için ayrı sınırı, toplamı elle nasıl hesaplayacağınızı, meşru e-postayı kaybetmeden ona nasıl ineceğinizi, flattening’in neden dikkat istediğini ve bir adın neden yalnızca tek SPF kaydı taşıyabileceğini açıklar. Tüm alan adları ve IP adresleri örnektir.
Bu rehberin kapsamı
Ücretsiz Yayına Hazırlık Snapshot’ı, girdiğiniz ana makine adındaki SPF kaydını okur ve yalnızca o kayıttaki DNS sorgulayan terimleri sayar. include: veya redirect= izlemez, void lookup saymaz, e-posta göndermez; pentest değildir.
“Too many DNS lookups” ne anlama gelir?
Alıcı sunucu SPF’i kontrol ederken zarf göndericisi alan adındaki (MAIL FROM adresi, sonradan Return-Path olarak görünür) v=spf1 ile başlayan TXT kaydını okur ve terimlerini soldan sağa değerlendirir. Bazı terimler alıcının yeniden DNS sorgulamasına yol açar. RFC 7208, bölüm 4.6.4 bu terimleri, include ettiğiniz her kaydın içindekiler dahil, kontrol başına 10 ile sınırlar. Bir değerlendirme on birincisini gerektirdiğinde alıcı durmalı ve permerror döndürmelidir; bu, yayımlanan kaydın doğru yorumlanamadığını belirten sonuçtur.
Bunu genellikle üç yerde fark edersiniz: teslim edilmiş bir iletinin Authentication-Results başlığında (RFC 8601), örneğin spf=permerror smtp.mailfrom=example.com; çok sayıda sorgudan söz eden bir geri dönüş (bounce) iletisinde; ya da DMARC toplu raporlarındaki SPF hatalarında.
İki ayrıntı hatayı kafa karıştırıcı yapar. Alıcılar sorguları değerlendirme sırasında sayar ve değerlendirme eşleşen ilk terimde durur. Listede erken yer alan bir servisin postası yine geçebilir; include’u onuncu sorgudan sonra gelen servisin postası ise permerror alır, bu yüzden sorun aralıklı görünebilir. Ayrıca permerror bir fail değildir: SPF yalnızca yardımcı olmayı bırakır. DMARC, From adresiyle hizalı bir alan adı için SPF veya DKIM geçtiğinde geçer (RFC 9989); dolayısıyla hizalı DKIM imzası olan ileti yine geçer, yalnızca SPF’e dayanan ileti geçmez. Bunun ötesinde alıcının permerror’a nasıl davranacağı kendi kararıdır.
Hangi SPF terimleri sınıra sayılır, hangileri sayılmaz?
| Terim | 10 sınırına katkısı | Bilinmesi gerekenler |
|---|---|---|
include: | 1, artı include edilen kayıttaki her sorgu | Include edilen adın SPF kaydı yoksa sonuç permerror olur |
a, a: | 1 | Gönderenin IPv4 veya IPv6 ile bağlanmasına göre adın A veya AAAA kayıtlarını sorgular |
mx, mx: | 1 | Döndürdüğü MX sunucularının adres sorgularının ayrı, kendi 10’luk sınırı vardır |
ptr | 1 | RFC 7208 yayımlanmaması gerektiğini (SHOULD NOT) söyler |
exists: | 1 | Oluşturulan adın A kaydı varsa eşleşir; çoğunlukla makrolarla kullanılır |
redirect= | 1, artı hedef kayıttaki her sorgu | Kayıtta all terimi varsa yok sayılır |
ip4:, ip6: | 0 | Adres sorgu yapılmadan doğrudan karşılaştırılır |
all | 0 | Daha önce eşleşmeyen her gönderen için sonucu belirler |
exp= | 0 | Yalnızca fail sonrasında, açıklama metnini almak için sorgulanır |
Kendi v=spf1 kaydınız | 0 | İlk TXT sorgusu bir terim değildir |
Bütçe tek bir kayda değil, tüm değerlendirmeye aittir. Bir include kendisi için bir sorgu, ardından arkasındaki kaydın en son iç içe düzeye kadar harcadığı kadar sorgu tutar. Sağlayıcılar kendi kayıtlarını değiştirir, örneğin adres aralıklarını daha fazla iç içe include’a yayarlar; bu yüzden sizin tarafınızda hiçbir değişiklik olmadan toplam değişebilir.
Sınır var çünkü SPF kayıtları alıcıların yayımlayan adına DNS sorgusu göndermesini sağlar; RFC 7208’in 11.1 bölümü, bir saldırganın bunu üçüncü bir tarafın DNS’ini boğmak için nasıl kullanabileceğini anlatır. RFC ayrıca tüm kontrol için en az 20 saniyelik bir zaman sınırı önerir. Sürenin dolması permerror değil, geçici hata olan temperror verir.
İkinci sınır: en fazla iki void lookup
RFC 7208, boş dönen sorgular için ayrı bir sınır ekler: kaydı olmayan bir yanıt (cevap sayısı sıfır olan NOERROR) veya Name Error (NXDOMAIN, ad mevcut değil). Bunlara void lookup denir. Uygulamalar ikiden fazlasına izin vermemelidir (SHOULD) ve aşılması, toplam hâlâ 10’un altında olsa bile permerror verir. Bu, bir SPF kaydının alıcıları var olmayan uzun ad listelerinin peşine düşürmesini engeller.
Void lookup’lar çoğunlukla artık kalıntılardan gelir:
- Eski sunucunun DNS adı silindikten sonra kalan
a:old-web.example.com. - MX kaydı olmayan bir adda
mxveyamx:example.org. Mekanizma adın A kaydına geri düşmemelidir, bu yüzden hiçbir şey bulamaz. - Web sitesi yalnızca
wwwüzerinde yanıt veren bir sunucuya taşındıktan sonra çıplak alan adındakia.
include: bundan daha katıdır. Include edilen ad yoksa veya SPF kaydı yayımlamıyorsa include yalnızca void sayılmaz: tüm sonucu hemen permerror yapar (bölüm 5.2). Kullanmayı bıraktığınız bir sağlayıcı, kaydınızın hâlâ include ettiği alan adını kapattığında olan budur. Kaydınızın işaret ettiği her adı sorgulayın; hiçbir şey döndürmeyen ad düzeltilmeli veya kaldırılmalıdır.
SPF sorgularını elle nasıl sayarsınız?
Gönderdiğiniz bir iletinin Return-Path başlığından okuyabileceğiniz zarf göndericisi alan adından başlayın ve kaydı özyinelemeli olarak izleyin:
- Kaydı okuyun:
dig +short TXT example.comveya Windows’tanslookup -type=TXT example.com. include,a,mx,ptr,existsveredirectiçin 1;ip4,ip6vealliçin 0 puan verin.- Her include ve redirect için işaret ettiği kaydı okuyun ve iç içe ne kadar derinse o kadar aynı şekilde puanlayın.
- Hepsini toplayın ve kayıt döndürmeyen adları not edin.
İşte yüzeyde yalnızca beş DNS sorgulayan terimi olan varsayımsal bir kayıt:
example.com. TXT "v=spf1 mx include:_spf.mail.example.net include:spf.crm.example.org include:news.example.net a -all"| Terim | Sorgu | Neden |
|---|---|---|
mx | 1 | example.com için MX sorgusu |
include:_spf.mail.example.net | 4 | Include için 1, o kayıttaki üç iç içe include için 3 |
include:spf.crm.example.org | 2 | Include için 1, içindeki bir a: terimi için 1 |
include:news.example.net | 3 | Include için 1, iç içe bir include için 1, onun içindeki exists: terimi için 1 |
a | 1 | Eski bir web sunucusundan kalan giriş |
-all | 0 | Sorgu yok |
| Toplam | 11 | Sınırın bir üstünde |
Toplam en kötü durumdur. İlk include ile eşleşen bir gönderen en fazla beş sorguya ihtiyaç duyar ve geçer. Daha önce hiçbir şeyle eşleşmeyen bir gönderen son a terimine, yani on birinci sorguya ulaşır; böylece sahte posta, -all’un üretmesi amaçlanan fail yerine permerror alır. Yeni bir gönderim servisi eklediğinizde ve zaman zaman bunun dışında da yeniden sayın, çünkü include edilen kayıtlar haber verilmeden değişir.
E-posta kaybetmeden ona nasıl inersiniz?
- Artık kullanmadığınız include’ları kaldırın. Önceki bir posta kutusu sağlayıcısı, iptal ettiğiniz bir bülten aracı, bir CRM denemesi. DMARC toplu raporları, alan adınız adına gerçekte hangi kaynakların gönderdiğini gösterir; bu da kimsenin ihtiyaç duymadığı include’ları fark etmenize yardım eder. Kaldırmadan önce her servisin sahibine danışın.
- Bir include’un hiç değerlendirilip değerlendirilmediğini kontrol edin. SPF, zarf göndericisi alan adına karşı kontrol edilir. Bir servisin iletileri
Return-Path’te kendi alan adını gösteriyorsa alıcılar sizin değil, o alan adının SPF kaydını kontrol eder ve include’unuz o posta için hiçbir işe yaramaz. Kaldırmadan önce sağlayıcının belgelerinden doğrulayın. - Kontrol ettiğiniz sunucular için
avemxyerineip4veip6kullanın. Kendi sunucunuz 192.0.2.10’dan gönderiyorsaip4:192.0.2.10hiçbir şeye mal olmaz,aise bir sorgu harcar.mx’in orada gerçekten gerekli olup olmadığını sorgulayın: postanızı alan sunucular onu göndermek zorunda değildir ve posta kutusu sağlayıcınıza aitlerse include’u gönderim sunucularını zaten listeliyor olabilir. Sunucu taşındığında adresi güncelleyin. - Yüksek hacimli her göndericiye kendi alt alan adını verin. Bir bülten veya destek talebi servisinin zarf göndericisi olarak
news.example.comgibi bir bounce alan adı kullanmasına izin verin; kendi SPF kaydı ve kendi 10’luk sınırı olur. SPF miras alınmaz, bu yüzden alt alan adının o kayda ihtiyacı vardır. DMARC’ın varsayılan gevşek (relaxed) hizalamasındanews.example.com, example.com’daki bir From adresiyle yine hizalanır. Birçok servis buna özel return-path veya bounce alan adı der. ptr’yi bırakın. RFC 7208 bunun yayımlanmaması gerektiğini söyler: yavaştır, bağlanan IP adresinin sahibinin denetlediği ters DNS’e dayanır ve sorgu bütçesini tüketir. Yerineip4/ip6veya sağlayıcının include’unu kullanın.- Yeniden sıralamayı çözüm saymayın. En yoğun göndericiyi öne taşımak, on birinci sorguya daha az iletinin ulaşması demektir; ama kayıt,
-all’a takılması gereken sahte posta dahil, aşağıdaki her şey için bozuk kalır.
DKIM de baskıyı azaltır. DMARC yalnızca bir hizalı geçişe ihtiyaç duyar ve DKIM genellikle iletmeden (forwarding) sağ çıkarken SPF çıkamaz. Her servisin sizin alan adınızla imzaladığından emin olun, sonra SPF kaydını sadeleştirin.
SPF flattening: daha az sorgu, daha fazla bakım
Flattening, bir include’u bugün çözümlendiği ip4 ve ip6 aralıklarıyla değiştirir. Sorgu sayısı düşer, ancak kaydınız artık başkasının listesinin bir kopyasını taşır ve bu kopya kendini güncellemez.
| Risk | Ne olur | Nasıl sınırlanır |
|---|---|---|
| Sağlayıcı aralık ekler veya değiştirir | Yeni adreslerden gelen posta SPF’te kalır ve sizi hiçbir şey uyarmaz | Yalnızca kararlı, belgelenmiş aralıklar yayımlayan sağlayıcıları flatten edin ve bunları düzenli olarak yeniden kontrol edin |
| Sağlayıcı aralık kullanmayı bırakır | Bırakılan ve sonradan başkasına hizmet verebilecek adresler kaydınızda yetkili kalır | Sağlayıcının artık listelemediği aralıkları kaldırın |
| Kayıt büyür | RFC 7208, SPF yanıtlarının 512 oktet içinde kalmasını önerir; güvenlik duvarları TCP üzerinden DNS’e veya EDNS0’a karıştığında tek UDP paketine sığmayan yanıtlar sessizce yok sayılabilir | Yalnızca en çok maliyet getiren birkaç include’u flatten edin |
| Altyapı sık değişir | Büyük bulut platformları gönderim adreslerini döndürür | Include’larını koruyun; örneğin Microsoft, Microsoft 365 include’unun flatten edilmemesini önerir |
Otomatik flattening servisleri include’ları belirli aralıklarla çözümler ve kaydınızı yeniden yazar. Bu, eskimiş aralıkları halleder ama DNS’inizde üçüncü bir tarafa rol verir ve başarısız bir güncelleme SPF’inizi bozar. Önce diğer çözümleri deneyin. Flatten ederseniz hangi include’u ne zaman değiştirdiğinizi not edin, sağlayıcının yayımladığı aralıklarla düzenli karşılaştırın ve her değişiklikten sonra SPF’i test edin (Microsoft Learn kendi müşterilerine aynı tavsiyeyi verir).
Ad başına tek SPF kaydı ve doğru bölme
Bir adın v=spf1 ile başlayan tam olarak bir TXT kaydı olmalıdır. İki tane olursa alıcı seçim yapamaz ve permerror döndürür (RFC 7208, bölüm 4.5). Bu genellikle yeni bir servisin kurulum kılavuzu “bu TXT kaydını ekleyin” dediğinde, biri ilk kaydı düzenlemek yerine ikinci bir SPF kaydı eklediğinde olur. İkinci kayıt bütçeyi ikiye katlamaz; ikisini birleştirin:
# Wrong: two SPF records on one name
example.com. TXT "v=spf1 include:_spf.mail.example.net -all"
example.com. TXT "v=spf1 include:spf.crm.example.org ~all"
# Right: one record
example.com. TXT "v=spf1 include:_spf.mail.example.net include:spf.crm.example.org -all"Aynı addaki site doğrulama belirteçleri gibi diğer TXT kayıtları sorun değildir; yalnızca v=spf1 ile başlayanlar sayılır. Bir TXT kaydı içindeki tek bir dize en fazla 255 karakter tutar. Daha uzun bir SPF kaydı, birkaç tırnaklı dizeden oluşan tek bir TXT kaydı olarak kalır; alıcılar bunları araya boşluk eklemeden birleştirir (bölüm 3.3), bu yüzden bir terimin bittiği yerde dizeyi boşlukla bitirin:
example.com. TXT "v=spf1 ip4:192.0.2.0/24 ip6:2001:db8::/32 include:_spf.mail.example.net " "include:spf.crm.example.org -all"Başka birkaç hata da aynı permerror’u üretir: kaydın herhangi bir yerinde include: yerine include= yazmak gibi sözdizimi hataları (bölüm 4.6) veya SPF kaydı olmayan bir alan adını include etmek. SPF kayıtları miras da alınmaz; zarf göndericisi olarak kullanılan her ad kendi kaydına ihtiyaç duyar ve her birinin kendi 10 sınırı vardır.
Ücretsiz SPF ve DMARC kontrolü neyi sayar?
Ücretsiz Yayına Hazırlık Snapshot’ı, kayıt olmadan tek bir herkese açık alan adında sekiz pasif kontrol çalıştırır; bunlardan biri e-posta DNS kayıtlarını okur. Pentest değildir, altı alanlı denetim de değildir ve e-posta göndermez.
- Tam ana makine adı. Girdiğiniz addaki SPF kaydını, üst alan adına geri dönmeden okur. Zarf göndericisi alan adının kendisini girin; örneğin www.example.com değil, example.com.
- Üst düzey sayım. O kayıttaki DNS sorgulayan terimleri (
include,a,mx,ptr,existsveredirect) sayar ve ondan fazlasını orta risk sinyali olarak işaretler. - İzlenmeyenler.
include:veyaredirect=izlemez, void lookup saymaz ve aynı addaki ikinci bir SPF kaydını işaretlemez. Yukarıdaki beş terimli örnek, alıcılar on bir sorguya ihtiyaç duysa da bu sayımdan geçer; bu yüzden özyinelemeli sayımı kendiniz de yapın. - Diğer SPF sinyalleri.
+allyüksek,?alldüşük risk olarak işaretlenir; ana makinede MX kayıtları varsa eksik SPF veya DMARC kaydı işaretlenir.
E-posta DNS kontrolünü önce açmak için ücretsiz SPF ve DMARC kontrolünü kullanın: aynı snapshot’ı çalıştırır ve bu kontrolü diğer yedisinin üstünde gösterir. Kaydın geri kalanı için, ~all ile -all farkından DMARC’ı none’dan reject’e taşımaya kadar, SPF ve DMARC rehberine bakın.
Sık sorulan sorular
“SPF permerror: too many DNS lookups” ne anlama gelir?
SPF kaydınızın değerlendirilmesi, include edilen kayıtlardakiler dahil 10’dan fazla DNS sorgulayan terim gerektirdi. RFC 7208 alıcıların bu noktada durup permerror döndürmesini şart koşar; böylece SPF iletinin DMARC’ı geçmesine artık yardımcı olamaz.
ip4 ve ip6 SPF sorgu sınırına sayılır mı?
Hayır. ip4, ip6 ve all DNS sorgusu gerektirmez ve sayılmaz. include, a, mx, ptr, exists ve redirect birer sorgu sayılır; include veya redirect ayrıca işaret ettiği kayıttaki her sorguyu da ekler.
SPF sınırı 10 include mu, 10 sorgu mu?
10 sorgu. Dört include’lu bir kayıt, include edilen kayıtlar kendi include, a veya mx terimlerini içeriyorsa sınırı aşabilir. Yalnızca görebildiğiniz terimleri değil, her include ve redirect boyunca özyinelemeli sayın.
Daha fazla sorgu için ikinci bir SPF kaydı yayımlayabilir miyim?
Hayır. Aynı addaki v=spf1 ile başlayan iki TXT kaydı sonucu permerror yapar. Bunları tek kayıtta birleştirin veya bir göndericiyi kendi kaydı ve kendi 10 sınırı olan bir alt alan adına taşıyın.
SPF flattening 10 sorgu sınırını çözer mi?
Sayıyı düşürür, ancak kopyalanan IP aralıkları sağlayıcı değiştirdiğinde eskir ve yeni adreslerden gelen meşru posta SPF’te kalır. Önce kullanılmayan include’ları kaldırın ve alt alan adı kullanın; yalnızca kararlı, belgelenmiş aralıkları olan sağlayıcıları flatten edin ve düzenli kontrol edin.
SPF kaydım permerror döndürürse DMARC başarısız olur mu?
Zorunlu değil. DMARC yalnızca bir hizalı geçişe ihtiyaç duyar; From alan adıyla hizalı geçerli bir DKIM imzası olan posta yine geçer. Yalnızca SPF’e dayanan posta geçmez; kaydı düzeltmenin önemi buradan gelir.
Kaynaklar ve ileri okuma
- RFC 7208: Gönderen Politikası Çerçevesi (SPF)www.rfc-editor.org
- RFC 7208, bölüm 4.6.4: DNS sorgu sınırlarıwww.rfc-editor.org
- RFC 9989: DMARCwww.rfc-editor.org
- RFC 8601: E-posta kimlik doğrulama durumunu bildiren ileti başlığı alanıwww.rfc-editor.org
- Microsoft Learn: Microsoft 365 alan adınız için geçerli e-posta kaynaklarını belirten SPF kurulumulearn.microsoft.com
Sitelemetry yayın ekibi tarafından hazırlanmıştır. Konuyu derinleştirmek için bağlantılı kaynakları inceleyebilirsiniz.



