Web Siteniz

DNS Zone Transfer (AXFR) Nedir?

Yazar admin
9 dakika Okuma Süresi
A+A-
Sıfırla
DNS Zone Transfer (AXFR) Nedir?

Merhaba! Bu yazıda, DNS’in kalbi sayılabilecek “Zone Transfer (AXFR)” kavramını, hiçbir DNS bilgisi olmayan birine anlatır gibi, adım adım açıklayacağız. Öğrenme sürecinizi kolaylaştırmak için pratik örnekler ve dostane bir dil kullanacağım. Hazırsanız başlayalım!

DNS Temelleri

DNS (Domain Name System), internette alan adlarını (örneğin example.com) IP adreslerine (örneğin 93.184.216.34) çeviren dağıtık bir veritabanıdır. Bu sayede kullanıcılar karmaşık IP’ler yerine kolayca hatırlanan alan adları kullanır.

  • DNS sunucuları: Bilgi sorgulayan istemcilerden gelen isteklere yanıt verir.
  • Zone (Bölge): Bir DNS sunucusunun sorumlu olduğu alan adlarının topluluğudur. Örneğin, example.com ve alt alan adları (www.example.com, mail.example.com) bir “zone” oluşturur.

DNS mimarisinde birden fazla sunucu bulunur; biri “master” (ana), diğerleri “slave” (yan) olabilir. Master sunucu, bölge verisinin kaynağıdır; slave sunucular ise bu veriyi master’dan çekerek güncel tutar.

Zone Transfer Nedir?

Zone Transfer, bir DNS sunucusunun (genellikle slave), bir başka DNS sunucusundan (genellikle master) zone içeriğini (kayıtları) kopyalamasıdır. Tasarım amacı:

  1. Yedeklilik: Bir sunucu arızalansa bile diğerleri hizmet vermeye devam eder.
  2. Performans: Trafik farklı sunuculara dağıtılarak yük dengelenir.
  3. Kapsam: Farklı coğrafi konumlarda sunucular konumlandırılarak bölgesel gecikme azaltılır.

AXFR vs. IXFR

  • AXFR (Full Zone Transfer): Zone’un tamamını bir defada çeker. Küçük bölgeler için basit ve güvenilir.
  • IXFR (Incremental Zone Transfer): Sadece değişiklikleri (farkları) çeker. Büyük veya sık güncellenen bölgeler için bant genişliğinden tasarruf sağlar.

Not: Bu yazıda yalnızca AXFR üzerinde duracağız.

Neden Zone Transfer’a İhtiyaç Duyulur?

  1. Yedeklilik: Master sunucuya erişilemediğinde, slave sunucular kullanıcı isteklerini karşılamaya devam eder.
  2. Dağıtık Mimari: Coğrafi olarak dağılmış sunucular, farklı bölgelerden gelen sorgulara yakın sunucuları kullanarak gecikmeyi azaltır.
  3. Bakım Kolaylığı: Tüm DNS kayıtlarının master’da tek bir merkezde yönetilmesi, kayıt güncellemelerini kolaylaştırır. Zone transfer, tüm slave’lerin otomatik güncellenmesini sağlar.

AXFR İşlemi Nasıl Gerçekleşir?

  1. Slave isteği: Slave, belirli aralıklarla (örneğin her saat) master’a AXFR isteği gönderir.
  2. Yetkilendirme: Master, isteği IP bazlı ya da TSIG anahtarıyla doğrular.
  3. Veri Aktarımı: Master, zone içindeki tüm kayıtları (SOA, NS, A, CNAME, MX, TXT vb.) bir dizi DNS mesajıyla gönderir.
  4. Onaylama: Slave, SOA kaydındaki seri numarasını kontrol ederek veriyi kabul eder. Seri numarası artış gösteriyorsa yeni veriyi günceller.

Pratik Örnek: dig ile AXFR

Komut satırında DNS zone transfer denemek için yaygın olarak dig aracı kullanılır. Aşağıda adım adım bir örnek var:

# 1. Zone transfer denemesi
dig @ns1.example.com example.com AXFR

# 2. Çıktı örneği
; <<>> DiG 9.16.1-Ubuntu <<>> @ns1.example.com example.com AXFR
; (1 server found)
;; global options: +cmd
example.com.    3600    IN    SOA    ns1.example.com. hostmaster.example.com. (
                                2025051801 ; serial
                                7200       ; refresh
                                3600       ; retry
                                1209600    ; expire
                                3600       ; minimum
                                )
...
www             3600    IN    A      93.184.216.34
mail            3600    IN    A      93.184.216.35
example.com.    3600    IN    MX     10 mail.example.com.
  • @ns1.example.com: Sorguyu hangi DNS sunucusuna göndereceğimizi belirtir.
  • AXFR: Zone transfer türünü gösterir.

Eğer “Transfer failed.” gibi bir hata alırsanız, master sunucu zone transfer’ı engelliyor demektir.

Python ile Basit Bir AXFR İstemcisi

Python’da, dnspython kütüphanesiyle AXFR işlemi kolayca yapılabilir:

import dns.query
import dns.zone
import dns.exception

def axfr_transfer(master, zone_name):
    try:
        zone = dns.zone.from_xfr(dns.query.xfr(master, zone_name))
        print(f"Zone transfer başarılı: {zone_name}")
        for name, node in zone.nodes.items():
            rdatasets = node.rdatasets
            for rdataset in rdatasets:
                for rdata in rdataset:
                    print(f"{name}.{zone_name} {rdataset.ttl} IN {dns.rdataclass.to_text(rdataset.rdclass)} {dns.rdatatype.to_text(rdataset.rdtype)} {rdata}")
    except dns.exception.DNSException as e:
        print(f"Zone transfer hatası: {e}")

if __name__ == "__main__":
    master_server = "ns1.example.com"
    zone = "example.com"
    axfr_transfer(master_server, zone)

dns.query.xfr ile master’dan AXFR isteği gönderiyoruz.

Dönen veriyi dns.zone.from_xfr ile alıp işliyoruz.

Hataları yakalayarak anlaşılır bir mesaj yazdırıyoruz.

Güvenlik Riskleri

Zone transfer, eğer uygun şekilde sınırlandırılmazsa kötü niyetli kullanıcıların tüm DNS kayıtlarınızı (alt alan adları, IP adresleri, e-posta sunucusu bilgileri vb.) ele geçirmesine yol açar. Ortaya çıkan riskler:

  • Altyapı Haritası: Saldırgan, hangi sunucuların nerede olduğunu öğrenir.
  • Hedefli Saldırılar: E-posta veya web sunucularınızı hedef alacak saldırılar planlayabilir.
  • Sosyal Mühendislik: E-posta MX kayıtlarından, çalışan veya servis kayıtları çıkarılabilir.

Zone Transfer Güvenliğini Sağlama Yöntemleri

  1. IP Bazlı Erişim Kontrolü
    • Master DNS sunucusunda yalnızca güvenilir slave IP’lerinin zone transfer yapmasına izin verin.
    • Örnek (BIND named.conf):
zone "example.com" {
    type master;
    file "db.example.com";
    allow-transfer { 192.0.2.10; 192.0.2.11; };
};
  1. TSIG (Transaction SIGnature) Kullanımı
    • Zone transfer isteklerine güçlü bir HMAC tabanlı imza ekleyerek kimlik doğrulama yapın.
    • TSIG anahtarını tüm DNS sunucularınıza ekleyin.
  2. Incremental Transfer (IXFR) Tercihi
    • Tam bölge transferi yerine, yalnızca değişiklikleri transfer ederek veri hacmini ve risk yüzeyini azaltın.
  3. Zone Transfer’ı Kapatmak
    • Eğer sadece tek bir DNS sunucunuz varsa veya slave kullanmıyorsanız, allow-transfer { none; }; ile tamamen kapatabilirsiniz.
  4. Log ve İzleme
    • Zone transfer isteklerini loglayın. Şüpheli IP’leri tespit etmek için düzenli analiz yapın.

Bu yazıda, DNS Zone Transfer (AXFR) kavramını, nasıl çalıştığını ve neden güvenlik önlemleri alınması gerektiğini öğrendik. Pratik örneklerle dig ve Python üzerinden nasıl transfer yapılacağını gördük. Unutmayın:

  • Zone transfer, DNS altyapısının sağlıklı işleyişi için önemlidir.
  • Ancak kontrolsüz bırakılırsa, kritik bilgileriniz açığa çıkabilir.
  • IP kısıtlaması, TSIG ve logging gibi yöntemlerle güvenliği artırabilirsiniz.

  • DNS and BIND (O’Reilly) – DNS protokollerine derinlemesine bakış
  • dnspython dokümantasyonu – Python ile DNS programlaması
  • ISC BIND Administrator Reference Manual – BIND konfigürasyon detayları

Umarım bu yazı, DNS Zone Transfer (AXFR) hakkında sağlam bir temel oluşturmanıza yardımcı olmuştur. Eğer sorularınız varsa veya daha fazla örnek görmek isterseniz, yorumlarda buluşalım! 😊

Ayrıca şunları da beğenebilirsiniz

Yorum Bırakın

* Bu formu kullanarak verilerinizin bu web sitesi tarafından saklanmasını ve işlenmesini kabul etmiş olursunuz.

Bu web sitesi deneyiminizi iyileştirmek için çerezler kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz devre dışı bırakabilirsiniz. Kabul Et Devamı