DNS, Etki Alanı Adı Sistemi için bir kısaltmadır, bir IP adresini bir etki alanı adına çözen ve bunun tersini yapan bir internet hizmetidir. Genellikle, insanlar internet üzerinden sitelere, genellikle ezberlenmesi daha kolay olan alan adlarını kullanarak erişir, örneğin, computerforgeeks.com vb. Web sunucuları IP adreslerini kullanarak etkileşime girer, DNS artık tarayıcıların sayfaları yüklemesine izin vermek için adresleri çevirir. Bu, internet sayfalarıyla ilişkili IP adreslerinin ezberlenmesinin karmaşıklığını ortadan kaldırır.
BIND olarak kısaltılan Berkeley İnternet Adı Etki Alanı, ilk olarak 1980’lerde California Üniversitesi Berkeley’de yazılmış açık kaynaklı ve kapsamlı bir yazılımdır. DNS ile ilgili tüm hizmet işlevlerini aşağıdaki yeteneklerle sağlamak için kullanılır:
- Yetkili DNS: DNS bölgelerini ve sunucunun yetkili kontrolü altındaki kayıtları birincil veya ikincil sunucu olarak yayınlamasına izin verir.
- Bölünmüş DNS: DNS ad alanının birden çok görünümünü yayınlama yeteneği
- Özyinelemeli DNS (önbellek çözümleyici): İstemci sistemler adına yetkili/diğer DNS sunucularından veri alabilir.
- IPv6 desteği: IPv6 adreslerini adlar için yayınlayarak ve doğrudan IPv6 ağına katılarak IPv6’yı destekler
- Veri çoğaltma: Verileri birincil sunuculardan ikincil sunuculara verimli ve zamanında kopyalayabilirsiniz.
Varsayılan olarak, DNS güvenli değildir ve internetin samimi ve güvenilir bir yer olduğu bir zamanda tasarlandığından, tasarımında güvenlik birincil bir husus değildi. Özyinelemeli bir çözümleyici, isteği yetkili bir DNS’ye gönderdiğinde, alınan yanıtın gerçekliğini doğrulamanın bir yolu yoktur. Çözümleyici yalnızca yanıtın aynı IP’den gelmesini sağlar. IP kolayca dövülebildiğinden veya sızdırılabildiğinden bu yeterince güvenli değildir. DNS çözümleyici, sorgularından birine herhangi bir sahte yanıt algılamak için tasarlanmamıştır.
BIND DNS’nin güvenliğini sağlamak, saldırganların DNS yanıtını değiştirmesini, yetkili DNS önbelleğini maskeleyip manipüle etmesini engellediği için önemlidir. DNSSEC olarak kısaltılan DNS Güvenlik Uzantıları, kişinin DNS yanıtlarının veri bütünlüğünü korumasına izin verir. Public Key Infrastructure(PKI) kullanarak bir bölgenin A, MX, CNAME vb. tüm DNS kayıtlarını imzalar.
DNSSEC, 8 yeni kaynak kaydı türü sunar:
- DNSKEY (public key)
- RRSIG (digital resource record signature)
- DS (parent-child)
- NSEC (proof of nonexistence)
- NSEC3 (proof of nonexistence)
- NSEC3PARAM (proof of nonexistence)
- CDS (child-parent signaling)
- CDNSKEY (child-parent signaling)
DNSSEC doğrulaması etkinleştirildiğinde, çözümleyici sorgusunda ek kaynak kayıtları ister. Yetkili DNS’den, yanıtla ilişkili bazı kanıtlarla yanıt vermesini ister. Yanıtlar alındığında, çözümleyici yanıtların gerçekliğini ve bütünlüğünü doğrulamak için bazı kriptografik kontroller gerçekleştirir. Bu işlem, bir anahtara ulaşılıp güvenilene kadar get-key, validate, ask-parent ve ebeveyni tarafından tekrarlanır. Kök anahtar olan DNSSEC tarafından yalnızca bir anahtara güvenilir.
Aşağıdaki resim, DNSSEC’nin çalışmasını göstermek için kullanılabilir.
DNSSec Anahtarları ile Güvenli BIND DNS Sunucusu
Bu kılavuzda, BIND DNS Sunucusunun DNSSec Anahtarları ile nasıl güvenli hale getirileceğini öğreneceğiz.
Adım 1: Bind DNS Sunucusunun Kurulumu
Bu kurulum, en son BIND sürümünü, muhtemelen 9.9’un üzerindeki herhangi bir sürümü gerektirir.
Kurulduktan sonra, sürümü şu komutla kontrol edin:
# named -V
BIND 9.16.23-RH (Extended Support Version) <id:fde3b1f>
.......
compiled by GCC 11.2.1 20220127 (Red Hat 11.2.1-9)
compiled with OpenSSL version: OpenSSL 3.0.1 14 Dec 2021
linked to OpenSSL version: OpenSSL 3.0.1 14 Dec 2021
compiled with libuv version: 1.42.0
linked to libuv version: 1.42.0
compiled with libxml2 version: 2.9.13
linked to libxml2 version: 20913
compiled with json-c version: 0.14
linked to json-c version: 0.14
compiled with zlib version: 1.2.11
linked to zlib version: 1.2.11
linked to maxminddb version: 1.5.2
compiled with protobuf-c version: 1.3.3
linked to protobuf-c version: 1.3.3
threads support is enabled
BIND, OpenSSL ile oluşturulmuşsa, DNSSEC’yi destekler. Sürüm DNSSEC’yi desteklemiyorsa, en son sürüme yükseltmeniz gerekir.
Sürümü şu komutla da kontrol edebilirsiniz:
dig -t txt -c chaos VERSION.BIND
Adım 1: BIND Master’da DNSSEC’yi etkinleştirin
Ana yapılandırmayı düzenleyin ve DNSSEC’yi etkinleştirin.
##On Debian/Ubuntu
sudo vim /etc/bind/named.conf.options
##On CentOS/Rocky Linux/Alma Linux
sudo vim /etc/named.conf
Yapılandırmada aşağıdaki satırların mevcut olduğundan emin olun;
.........
dnssec-enable yes;
dnssec-validation yes;
.......
2. Adım: ZSK ve KSK için anahtar çifti oluşturun
DNSSEC için anahtar çifti oluşturmak için root olarak BIND dizinine geçin
##On Debian/Ubuntu
sudo su -
cd /etc/bind
##On CentOS/Rocky Linux/Alma Linux
sudo su -
cd /var/named/
Yukarıdaki dizinin bölge dosyalarınızı içermesi gerektiğini unutmayın. Bölgeniz (zone) için Bölge İmzalama Anahtarını şu komutla oluşturun:
dnssec-keygen -a <ALGORITHM> -b <BITS> -n ZONE <ZONENAME>
Bu yazıda kullanılacak olan bilgiler:
- zone isimleri:
- computingforgeeks.local as the forward zone
- 205.168.192.in-addr.arpa as the reverse zone.
- Zone dosyaları
- computingforgeeks.forward
- computingforgeeks.reverse
So the ZSK Keys will be generated as shown:
##For the Foward Zone
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE computingforgeeks.local
##For the Reverse Zone
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE 205.168.192.in-addr.arpa
Bölgeleriniz için Anahtar İmzalama Anahtarını (KSK) oluşturun
##For the Foward Zone
dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n ZONE computingforgeeks.local
##For the Reverse Zone
dnssec-keygen -f KSK -a RSASHA256 -b 4096 -n ZONE 205.168.192.in-addr.arpa
Oluşturulan anahtarları şu komutu kullanarak bölge dosyalarınıza ekleyin:
##For the Foward Zone
for key in `ls Kcomputingforgeeks.local*.key`
do
echo "\$INCLUDE $key">> computingforgeeks.forward
done
##For the Reverse Zone
for key in `ls K205.168.192.in-addr.arpa*.key`
do
echo "\$INCLUDE $key">> computingforgeeks.reverse
done
Anahtarlar için gerekli izinleri ayarlayın.
##On Debian/Ubuntu
chown root:bind Kcomputingforgeeks.*
chown root:bind K205.168.192.in-addr.arpa*
##On CentOS/Rocky Linux/Alma Linux
chown root:named Kcomputingforgeeks.*
chown root:named K205.168.192.in-addr.arpa*
3. Adım: Oluşturulan Anahtarları İmzalayın
Şimdi dnssec-signzone komutunu kullanarak bölge anahtarlarını aşağıdaki sözdizimi ile imzalayın:
dnssec-signzone -3 <salt> -A -N INCREMENT -o <zonename> -t <zonefilename>
örneğin benim Forward zone:
dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o computingforgeeks.local -t computingforgeeks.forward
Reverse Zone:
dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o 205.168.192.in-addr.arpa -t computingforgeeks.reverse
Örnek çıktı:
Bundan sonra forward.signed ve reverse.signed olarak yeni zone dosyalarınız olacaktır. Şimdi yeni imzalanan bölge dosyalarını yerleştirmek için aşağıdaki dosyayı düzenleyin;
##On Debian/Ubuntu
sudo vim /etc/bind/named.conf.local
##On CentOS/Rocky Linux/Alma Linux
sudo vim /etc/named.rfc1912.zones
Dosyada değişiklikleri yapın. Örneğin CentOS’ta;
.....
zone "computingforgeeks.local" IN {
type master;
file "computingforgeeks.forward.signed";
allow-transfer { 2.2.2.2; };
allow-update { none; };
};
zone "205.168.192.in-addr.arpa" IN {
type master;
file "computingforgeeks.reverse.signed";
allow-transfer { 2.2.2.2; };
allow-update { none; };
};
Gerekli izinleri ayarlayın:
##On Debian/Ubuntu
chown root:bind computingforgeeks.forward.signed
chown root:bind computingforgeeks.reverse.signed
##On CentOS/Rocky Linux/Alma Linux
chown root:named computingforgeeks.forward.signed
chown root:named computingforgeeks.reverse.signed
İşte bu! DNS’inizi güvence altına aldınız. Hizmeti yeniden başlatın;
##On Debian/Ubuntu
sudo systemctl restart bind9
##On CentOS/Rocky Linux/Alma Linux
sudo systemctl restart named.service
DNSSEC’yi localhost’tan BIND DNS üzerinde test edin
dig DNSKEY computingforgeeks.local +multiline
Örnek Çıktı:
RRSIG kayıtlarının kullanılabilirliğini kontrol edin
dig www.computingforgeeks.local. +noadditional +dnssec +multiline
Örnek Çıktı:
Yukarıdaki çıktıdan, AD (Authenticated Data) bit bayrağı seti ile doğrulanmış bir yanıt alıyoruz. Başlık NOERROR durumuna sahiptir. Doğrulanmayan bir yanıt, SERVFAIL olarak HEADER durumuna sahip olacaktır.
;; >>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 21978
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.