İçindekiler
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ı:
- Yedeklilik: Bir sunucu arızalansa bile diğerleri hizmet vermeye devam eder.
- Performans: Trafik farklı sunuculara dağıtılarak yük dengelenir.
- 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?
- Yedeklilik: Master sunucuya erişilemediğinde, slave sunucular kullanıcı isteklerini karşılamaya devam eder.
- Dağıtık Mimari: Coğrafi olarak dağılmış sunucular, farklı bölgelerden gelen sorgulara yakın sunucuları kullanarak gecikmeyi azaltır.
- 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?
- Slave isteği: Slave, belirli aralıklarla (örneğin her saat) master’a AXFR isteği gönderir.
- Yetkilendirme: Master, isteği IP bazlı ya da TSIG anahtarıyla doğrular.
- 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.
- 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
- 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; };
};
- 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.
- Incremental Transfer (IXFR) Tercihi
- Tam bölge transferi yerine, yalnızca değişiklikleri transfer ederek veri hacmini ve risk yüzeyini azaltın.
- Zone Transfer’ı Kapatmak
- Eğer sadece tek bir DNS sunucunuz varsa veya slave kullanmıyorsanız,
allow-transfer { none; };
ile tamamen kapatabilirsiniz.
- Eğer sadece tek bir DNS sunucunuz varsa veya slave kullanmıyorsanız,
- 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! 😊