BIND DNS Sunucusunu CentOS 6 Üzerine Kurulumu ve Yapılandırması
Alan Adı Sistemi (DNS), internetin telefon rehberidir. İnsanların hatırlaması kolay alan adlarını (örneğin, google.com) bilgisayarların birbirini tanımlamak için kullandığı IP adreslerine (örneğin, 172.217.160.142) çevirir. Bu temel hizmet olmadan, internetin mevcut haliyle çalışması mümkün değildir. DNS, web sitelerine erişimden e-posta gönderimine kadar her şeyin sorunsuz çalışmasını sağlar. Herhangi bir ağ altyapısının temel bir bileşenidir ve doğru yapılandırılması, ağınızın güvenilirliği ve performansı için kritik öneme sahiptir.
BIND (Berkeley Internet Name Domain), internet üzerindeki en yaygın kullanılan DNS yazılımıdır. Açık kaynaklıdır, güçlüdür, esnektir ve milyonlarca sunucuda DNS çözümlemesini sağlamak için kullanılır. BIND, hem küçük ölçekli ağlarda hem de büyük, karmaşık kurumsal ortamlarda veya internet servis sağlayıcılarında birincil veya ikincil DNS sunucusu olarak görev yapabilir. Kapsamlı özellik seti, zone transferleri, dinamik DNS güncellemeleri, DNSSEC desteği gibi ileri düzey işlevleri barındırır.
CentOS 6, her ne kadar ömrünün sonuna gelmiş bir işletim sistemi olsa da, birçok eski sistemde hala kullanılmaktadır ve BIND’ı bu platformda kurma bilgisi hala değerli olabilir. Bu makale, CentOS 6 üzerinde BIND DNS sunucusunu adım adım nasıl kuracağınızı ve temel birincil (master) DNS sunucusu olarak nasıl yapılandıracağınızı ayrıntılı olarak açıklayacaktır. Bu rehber, hem ileriye dönük (forward lookup) hem de geriye dönük (reverse lookup) DNS bölgelerini yapılandırmayı, güvenlik önlemlerini ve sorun giderme ipuçlarını kapsayacaktır.
Ön Gereksinimler
BIND kurulumuna başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:
* CentOS 6 İşletim Sistemi: Çalışır durumda bir CentOS 6 sunucusu.
* Root Erişimi veya Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için root kullanıcısı olarak veya sudo yetkilerine sahip bir kullanıcı ile oturum açmış olmanız gerekmektedir.
* Statik IP Adresi: DNS sunucusunun kararlı ve güvenilir çalışması için sunucunuza statik bir IP adresi atanmış olmalıdır. Dinamik IP adresleri, DNS çözümlemesinde tutarsızlıklara yol açabilir. Örneğin, 192.168.1.10 gibi bir IP adresi kullanacağız.
* İnternet Bağlantısı: BIND paketlerini indirmek ve sistemi güncellemek için sunucunuzun internet erişimi olmalıdır.
* Temel Linux Komut Bilgisi: yum, service, vi/nano gibi temel Linux komutlarına aşina olmanız beklenir.
Adım 1: Sistemi Güncelleme ve Gerekli Paketleri Kurma
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin güncel olduğundan emin olmak iyi bir uygulamadır. Bu, potansiyel güvenlik açıklarını kapatır ve yazılım uyumluluğu sorunlarını önler. Ayrıca, BIND ve ilgili yardımcı programları kurmak için gerekli paketleri indireceğiz.
Terminali açın ve root kullanıcısı olarak veya sudo ile aşağıdaki komutları çalıştırın:
sudo yum update -y
Bu komut, sisteminizdeki tüm yüklü paketleri en son sürümlerine güncelleyecektir. İşlem biraz zaman alabilir. Güncelleme tamamlandıktan sonra, BIND DNS sunucusunu ve onunla birlikte gelen yardımcı programları kurmak için aşağıdaki komutu kullanın:
sudo yum install bind bind-utils -y
* bind: BIND DNS sunucusunun kendisini içeren ana pakettir.
* bind-utils: dig, nslookup, host, named-checkconf, named-checkzone gibi DNS sorun giderme ve sorgulama araçlarını içerir. Bu araçlar, DNS yapılandırmanızı test etmek için paha biçilmezdir.
Kurulum tamamlandığında, BIND’ın ana yapılandırma dosyaları /etc/named.conf altında ve bölge dosyaları /var/named dizini altında bulunacaktır.
Adım 2: SELinux ve Firewall Ayarları
CentOS, güvenlik için SELinux ve iptables (güvenlik duvarı) kullanır. BIND’ın düzgün çalışabilmesi için bu bileşenlerin doğru şekilde yapılandırılması gerekir. Aksi takdirde, DNS sorguları engellenebilir veya BIND gerekli dosyalara erişemeyebilir.
SELinux Yapılandırması
SELinux, Linux çekirdeğine entegre edilmiş bir güvenlik mekanizmasıdır ve uygulamaların sistem kaynaklarına erişimini kısıtlar. BIND’ın düzgün çalışması için SELinux kurallarının ayarlanması veya geçici olarak devre dışı bırakılması gerekebilir. Geliştirme veya test ortamlarında geçici olarak devre dışı bırakmak yaygın olsa da, üretim ortamlarında SELinux politikalarını doğru şekilde yapılandırmak en iyi uygulamadır.
SELinux’u geçici olarak devre dışı bırakmak için:
sudo setenforce 0
Bu komut, SELinux’u zorlama modundan izin verilen moda (Permissive) geçirir. Bu, BIND’ın çalışmasına izin verirken, SELinux’un hala olası güvenlik ihlallerini kaydetmeye devam etmesini sağlar.
SELinux’u kalıcı olarak devre dışı bırakmak veya yapılandırmak için /etc/selinux/config dosyasını düzenlemeniz gerekir:
sudo vi /etc/selinux/config
Dosyada SELINUX= ile başlayan satırı bulun ve değerini enforcing yerine disabled olarak değiştirin:
# This file controls the state of SELinux on the system.
SELINUX= can take one of these three values:
enforcing - SELinux security policy is enforced.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
SELINUXTYPE= can take one of these two values:
targeted - Targeted processes are protected,
mls - Multi Level Security protection.
SELINUXTYPE=targeted
Değişikliği kaydettikten sonra, sisteminizi yeniden başlatmanız gerekir ki değişiklikler etkili olsun:
sudo reboot
Eğer SELinux’u tamamen devre dışı bırakmak istemiyorsanız, BIND için özel SELinux kuralları eklemeniz gerekir. Ancak bu, daha ileri bir konudur ve bu rehberin kapsamı dışındadır. En basit yol, yukarıdaki gibi devre dışı bırakmaktır.
Firewall (iptables) Yapılandırması
DNS sunucusu, istemcilerden gelen DNS sorgularını dinlemek için 53 numaralı portu (hem TCP hem de UDP) kullanır. Güvenlik duvarınız bu portları engelliyorsa, DNS sorguları sunucuya ulaşamaz. CentOS 6’da varsayılan güvenlik duvarı iptables‘tır.
Aşağıdaki komutlarla 53 numaralı portu açın:
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
Bu komutlar, 53 numaralı UDP ve TCP portları üzerinden gelen bağlantılara izin veren kurallar ekler. Değişikliklerin kalıcı olması için iptables yapılandırmasını kaydetmeniz gerekir:
sudo service iptables save
Ardından, iptables hizmetini yeniden başlatın:
sudo service iptables restart
Bu adımları tamamladıktan sonra, BIND’ın ağ ve güvenlik kısıtlamaları olmadan çalışmaya başlayabileceği bir ortama sahip olmalısınız.
Adım 3: Ana Yapılandırma Dosyası: named.conf
BIND’ın ana yapılandırma dosyası /etc/named.conf‘tur. Bu dosya, BIND’ın nasıl davranacağını, hangi bölgeleri yöneteceğini, hangi IP adreslerinden sorguları dinleyeceğini ve diğer genel ayarları içerir. İlk kurulumda bu dosya genellikle bazı varsayılan ayarlar ve örnek bölge tanımlamalarıyla gelir. Biz bu dosyayı kendi ihtiyaçlarımıza göre düzenleyeceğiz.
Dosyayı bir metin düzenleyici ile açın:
sudo vi /etc/named.conf
Varsayılan named.conf dosyası genellikle aşağıdaki gibi bir yapıya sahiptir:
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/ Path to ISC DLV key /
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
Bu dosyayı kendi DNS sunucumuz için aşağıdaki gibi düzenleyeceğiz. Özellikle options bloğunda ve yeni zone tanımlamalarında değişiklikler yapacağız.
//
// named.conf for BIND DNS Server on CentOS 6
//
options {
// DNS sunucunuzun dinleyeceği IP adresleri ve port.
// Kendi sunucunuzun statik IP adresini (örn. 192.168.1.10) veya 'any' olarak ayarlayabilirsiniz.
listen-on port 53 { 192.168.1.10; }; // Sunucunuzun IP adresini buraya yazın
// IPv6 dinlemesini kapatmak için yorum satırı yapabilir veya kendi IPv6 adresinizi belirtebilirsiniz.
// listen-on-v6 port 53 { ::1; };
// Bölge dosyalarının bulunduğu dizin. Varsayılan olarak /var/named'dir.
directory "/var/named";
// Önbellek döküm dosyası, istatistik dosyaları.
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// Sorgulara izin verilecek IP adresleri.
// 'any' tüm IP'lerden sorgulara izin verir (güvenlik riski taşıyabilir).
// Belirli bir ağdan (örn. 192.168.1.0/24) veya IP adreslerinden izin vermek daha güvenlidir.
allow-query { 192.168.1.0/24; localhost; }; // Kendi ağınızı buraya yazın
// Özyinelemeli sorgulara izin verilip verilmeyeceği.
// İç ağ DNS sunucuları için 'yes' olmalıdır.
recursion yes;
// DNSSEC ayarları. Üretim ortamlarında etkinleştirilmesi önerilir.
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
// Root hint dosyası. İnternet DNS çözümlemesi için gereklidir.
// bindkeys-file "/etc/named.root.key"; // Bu satırı genellikle dokunmadan bırakabilirsiniz.
// managed-keys-directory "/var/named/dynamic";
// Eğer bir upstream DNS sunucusu kullanmak istiyorsanız (örneğin ISP'nizin DNS'i veya Google DNS),
// aşağıdaki forwarders bloğunu etkinleştirebilirsiniz.
// forwarders {
// 8.8.8.8;
// 8.8.4.4;
// };
// forward only; // Eğer sadece forwarder'lara iletmek istiyorsanız.
};
// Günlük kaydı ayarları. Sorun giderme için önemlidir.
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// Kök ipuçları (root hints) bölgesi. İnternet DNS çözümlemesi için gereklidir.
zone "." IN {
type hint;
file "named.ca";
};
// Yerel ana bilgisayar (localhost) için ileriye dönük bölge.
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
// Yerel ana bilgisayar (loopback) için geriye dönük bölge.
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
// Örnek özel alan adınız için ileriye dönük bölge tanımlaması.
// Kendi alan adınızı (örn. example.com) ve dosya adını buna göre değiştirin.
zone "example.com" IN {
type master;
file "example.com.zone"; // Bu dosyayı /var/named/ dizininde oluşturacağız.
allow-update { none; };
};
// Örnek özel ağınız için geriye dönük bölge tanımlaması.
// Kendi ağınızın tersini (örn. 1.168.192.in-addr.arpa) ve dosya adını buna göre değiştirin.
zone "1.168.192.in-addr.arpa" IN {
type master;
file "db.192.168.1"; // Bu dosyayı /var/named/ dizininde oluşturacağız.
allow-update { none; };
};
Yukarıdaki örnekte şunlara dikkat edin:
* listen-on port 53 { 192.168.1.10; };: DNS sunucunuzun dinleyeceği IP adresini buraya yazın. Birden fazla IP adresiniz varsa virgülle ayırarak ekleyebilirsiniz. any olarak bırakmak tüm arayüzlerde dinlemeye izin verir ancak güvenlik açısından belirli bir IP’ye bağlamak daha iyidir.
* allow-query { 192.168.1.0/24; localhost; };: DNS sorgularına izin verilecek istemci IP’lerini veya ağlarını belirtin. any olarak bırakmak, herkesin sunucunuzdan sorgu yapmasına izin verir ve bu, açık bir çözümleyici (open resolver) oluşturarak DDoS saldırıları için kötüye kullanılabilir. Kendi yerel ağınızın IP aralığını kullanın.
* zone "example.com" IN { ... };: Kendi özel alan adınız için bir ileriye dönük bölge tanımlaması. example.com yerine kendi alan adınızı yazın.
* zone "1.168.192.in-addr.arpa" IN { ... };: Kendi ağınız için bir geriye dönük bölge tanımlaması. 192.168.1.0/24 ağının tersi 1.168.192.in-addr.arpa şeklindedir (IP adresinin oktetleri tersten yazılır ve sonuna .in-addr.arpa eklenir).
Değişiklikleri kaydedip dosyayı kapatın.
Adım 4: İleri Yönlü Bölge Dosyası Oluşturma
İleriye dönük bölge dosyaları, alan adlarını IP adreslerine çevirmek için kullanılır (örneğin, www.example.com -> 192.168.1.100). Bu dosyaları /var/named/ dizininde oluşturacağız.
Önce, BIND’ın varsayılan bölge dosyalarından birini kopyalayarak başlayabiliriz. Bu, dosya izinleri ve SELinux bağlamı gibi şeyleri doğru ayarlamanıza yardımcı olur.
sudo cp /var/named/named.localhost /var/named/example.com.zone
Şimdi example.com.zone dosyasını düzenleyin:
sudo vi /var/named/example.com.zone
Dosyanın içeriğini aşağıdaki gibi değiştirin. example.com ve IP adreslerini kendi değerlerinizle güncellemeyi unutmayın.
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023112001 ; Serial (YYYYMMDDNN)
3H ; Refresh (3 hours)
1H ; Retry (1 hour)
1W ; Expire (1 week)
1D ) ; Minimum TTL (1 day)
; Name Servers
@ IN NS ns1.example.com.
ns1 IN A 192.168.1.10 ; BIND sunucunuzun IP adresi
; Host Records
@ IN A 192.168.1.10
www IN A 192.168.1.100 ; Web sunucusu IP
mail IN A 192.168.1.110 ; Mail sunucusu IP
ftp IN CNAME www ; FTP sunucusu (www ile aynı)
; MX Record (Mail Exchanger)
@ IN MX 10 mail.example.com. ; Mail sunucusu
Açıklamalar:
* $TTL 86400: Bu bölgedeki kayıtların varsayılan yaşam süresini (Time To Live) saniye cinsinden belirtir. 86400 saniye = 1 gün.
* @ IN SOA ns1.example.com. admin.example.com. (...): Start of Authority (SOA) kaydı, bir bölgenin yetkili ad sunucusunu ve bölge hakkında önemli yönetim bilgilerini tanımlar.
* ns1.example.com.: Birincil ad sunucusunun tam nitelikli alan adı (FQDN). Sonundaki nokta önemlidir.
* admin.example.com.: Bölge yöneticisinin e-posta adresi (burada @ yerine . kullanılır).
* Serial: Bölge dosyasının sürüm numarası. Bu numara her değişiklik yapıldığında artırılmalıdır. Genellikle YYYYMMDDNN (YılAyGünSıraNo) formatı kullanılır.
* Refresh: İkincil DNS sunucularının birincil sunucuyu ne sıklıkla güncellemeler için kontrol etmesi gerektiği.
* Retry: Birincil sunucuya ulaşılamazsa, ikincil sunucuların tekrar denemek için ne kadar beklemesi gerektiği.
* Expire: İkincil sunucuların birincil sunucuya ulaşamazsa bölge verilerini ne kadar süreyle geçerli kabul edeceği.
* Minimum TTL: Negatif önbellekleme için minimum TTL.
* @ IN NS ns1.example.com.: Name Server (NS) kaydı, bu bölge için yetkili ad sunucularını belirtir.
* ns1 IN A 192.168.1.10: A (Address) kaydı, bir ana bilgisayar adını (ns1) bir IPv4 adresine eşler.
* @ IN A 192.168.1.10: @ sembolü, alan adının kendisini (example.com) ifade eder. Bu, alan adının kendi IP adresidir.
* www IN A 192.168.1.100: www.example.com‘u 192.168.1.100 IP adresine eşler.
* ftp IN CNAME www: CNAME (Canonical Name) kaydı, bir takma adı (ftp) başka bir ana bilgisayar adına (www) eşler. Bu, ftp.example.com‘un www.example.com ile aynı IP adresine sahip olacağı anlamına gelir.
* @ IN MX 10 mail.example.com.: MX (Mail Exchanger) kaydı, bu alan adı için e-posta sunucusunu belirtir. 10 öncelik değeridir; daha düşük sayılar daha yüksek önceliğe sahiptir.
Dosyayı kaydettikten sonra, BIND’ın bu dosyaya doğru izinlerle erişebildiğinden emin olun. named kullanıcısı ve grubu genellikle dosya ve dizinlere sahip olmalıdır.
sudo chown root:named /var/named/example.com.zone
sudo chmod 640 /var/named/example.com.zone
Adım 5: Geri Yönlü Bölge Dosyası Oluşturma
Geriye dönük bölge dosyaları, IP adreslerini alan adlarına çevirmek için kullanılır (örneğin, 192.168.1.100 -> www.example.com). Bu, özellikle e-posta sunucuları için önemlidir, çünkü birçok e-posta sunucusu, spam’i önlemek için gönderen sunucunun IP adresinin alan adına doğru şekilde çözümlenebildiğini kontrol eder (PTR kaydı).
Aynı şekilde, varsayılan bir bölge dosyasını kopyalayarak başlayın:
sudo cp /var/named/named.loopback /var/named/db.192.168.1
Şimdi db.192.168.1 dosyasını düzenleyin:
sudo vi /var/named/db.192.168.1
Dosyanın içeriğini aşağıdaki gibi değiştirin. Ağınızın ve ana bilgisayarlarınızın IP adreslerini ve alan adlarını kendi değerlerinizle güncellemeyi unutmayın. Unutmayın, geriye dönük bölge dosyalarında IP adreslerinin son okteti kullanılır.
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023112001 ; Serial
3H ; Refresh
1H ; Retry
1W ; Expire
1D ) ; Minimum TTL
; Name Servers
@ IN NS ns1.example.com.
; PTR Records (IP to Hostname)
10 IN PTR ns1.example.com. ; 192.168.1.10 -> ns1.example.com
100 IN PTR www.example.com. ; 192.168.1.100 -> www.example.com
110 IN PTR mail.example.com. ; 192.168.1.110 -> mail.example.com
Açıklamalar:
* @ IN SOA ns1.example.com. admin.example.com. (...): SOA kaydı, ileriye dönük bölge dosyasındaki ile aynı mantıkla çalışır.
* @ IN NS ns1.example.com.: NS kaydı da aynıdır.
* 10 IN PTR ns1.example.com.: PTR (Pointer) kaydı, bir IP adresinin son oktetini (örneğin, 192.168.1.10 için 10) bir alan adına (FQDN) eşler. Sonundaki nokta önemlidir.
Dosyayı kaydettikten sonra, izinleri ayarlayın:
sudo chown root:named /var/named/db.192.168.1
sudo chmod 640 /var/named/db.192.168.1
Adım 6: Yapılandırma Dosyalarını Kontrol Etme
BIND servisini başlatmadan önce, yapılandırma dosyalarınızda herhangi bir sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir. Yanlış yapılandırılmış bir dosya, BIND’ın başlamamasına veya beklendiği gibi çalışmamasına neden olabilir.
named-checkconf
Bu araç, /etc/named.conf dosyasının sözdizimini kontrol eder.
sudo named-checkconf
Eğer herhangi bir çıktı görmüyorsanız, bu, ana yapılandırma dosyasında sözdizimi hatası olmadığı anlamına gelir. Eğer hatalar varsa, hata mesajları ile birlikte satır numaralarını gösterecektir.
named-checkzone
Bu araç, her bir bölge dosyasının sözdizimini ve içeriğini kontrol eder.
İleriye dönük bölge dosyasını kontrol edin:
sudo named-checkzone example.com /var/named/example.com.zone
Çıktı aşağıdakine benzer olmalıdır:
zone example.com/IN: loaded serial 2023112001
OK
Geriye dönük bölge dosyasını kontrol edin:
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/db.192.168.1
Çıktı aşağıdakine benzer olmalıdır:
zone 1.168.192.in-addr.arpa/IN: loaded serial 2023112001
OK
Eğer OK mesajını alırsanız, bölge dosyalarınızın doğru şekilde yapılandırıldığı anlamına gelir. Herhangi bir hata durumunda, hata mesajlarını dikkatlice okuyarak ilgili dosyayı düzeltmeniz gerekir.
Adım 7: BIND Servisini Başlatma ve Etkinleştirme
Tüm yapılandırma dosyaları kontrol edildikten ve hatalar giderildikten sonra, BIND DNS servisini başlatabiliriz. Ayrıca, sunucu yeniden başlatıldığında otomatik olarak başlaması için servisi etkinleştireceğiz.
BIND servisini başlatın:
sudo service named start
Servisin durumunu kontrol edin:
sudo service named status
Çıktı named (pid xxxx) is running... gibi bir şey göstermelidir. Eğer servis başlamadıysa veya hata veriyorsa, /var/log/messages dosyasını kontrol etmeniz gerekir (bkz. Sorun Giderme bölümü).
Servisi sistem başlangıcında otomatik olarak başlaması için etkinleştirin:
sudo chkconfig named on
Bu komut, sistem yeniden başlatıldığında BIND servisini otomatik olarak başlatacak gerekli bağlantıları oluşturur.
Adım 8: DNS Çözümlemesini Test Etme
BIND sunucunuzu kurup yapılandırdıktan ve başlattıktan sonra, düzgün çalışıp çalışmadığını test etmeniz gerekir.
Sunucunun Kendi Çözümleyicisini Yapılandırma
İlk olarak, DNS sunucunuzun kendisinin kendi DNS sunucusunu kullanmasını sağlamak için /etc/resolv.conf dosyasını düzenleyin. Bu, sunucunun kendi DNS hizmetini test etmenin ilk adımıdır.
sudo vi /etc/resolv.conf
Dosyanın içeriğini aşağıdaki gibi değiştirin (veya ekleyin):
search example.com
nameserver 192.168.1.10
* search example.com: DNS sorgularını yaparken varsayılan olarak aranacak alan adını belirtir.
* nameserver 192.168.1.10: DNS sorgularının gönderileceği DNS sunucusunun IP adresini belirtir. Kendi sunucunuzun IP adresini kullanın.
Not: CentOS 6’da NetworkManager veya diğer ağ yapılandırma araçları /etc/resolv.conf dosyasını otomatik olarak güncelleyebilir. Eğer değişiklikleriniz kalıcı olmuyorsa, ağ arayüz yapılandırma dosyanızı (/etc/sysconfig/network-scripts/ifcfg-eth0) düzenleyerek DNS sunucusunu orada belirtmeniz gerekebilir (örn. DNS1=192.168.1.10).
dig Komutu ile Test Etme
dig (domain information groper), DNS sunucularını sorgulamak için güçlü bir araçtır.
1. Kendi alan adınızı sorgulayın (İleriye Dönük Çözümleme):
dig www.example.com @192.168.1.10
Veya eğer /etc/resolv.conf doğru yapılandırıldıysa:
dig www.example.com
Çıktıda ANSWER SECTION altında www.example.com. IN A 192.168.1.100 gibi bir kayıt görmelisiniz.
2. Kendi alan adınızın ana IP’sini sorgulayın:
dig example.com @192.168.1.10
ANSWER SECTION altında example.com. IN A 192.168.1.10 gibi bir kayıt görmelisiniz.
3. Geriye Dönük Çözümlemeyi Test Edin (PTR Kaydı):
dig -x 192.168.1.100 @192.168.1.10
Çıktıda ANSWER SECTION altında 100.1.168.192.in-addr.arpa. IN PTR www.example.com. gibi bir kayıt görmelisiniz.
4. Harici bir alan adını sorgulayın (Özyineleme testi):
dig google.com @192.168.1.10
Bu, BIND sunucunuzun harici DNS sunucularından bilgi alıp almadığını kontrol eder. ANSWER SECTION altında google.com için bir veya daha fazla IP adresi görmelisiniz.
nslookup Komutu ile Test Etme (Alternatif)
nslookup da DNS sorguları için kullanılabilir, ancak dig daha ayrıntılı bilgi sağlar ve genellikle daha çok tercih edilir.
nslookup www.example.com 192.168.1.10
nslookup 192.168.1.100 192.168.1.10
Her iki komutta da doğru IP adresleri veya alan adları döndürülmelidir.
Başka Bir İstemciden Test Etme
Ağınızdaki başka bir bilgisayardan (örneğin, bir Windows veya başka bir Linux makinesi) DNS sunucunuzu test etmek önemlidir. İstemcinin ağ ayarlarında birincil DNS sunucusu olarak BIND sunucunuzun IP adresini (192.168.1.10) yapılandırın.
Ardından, o istemciden ping www.example.com veya nslookup www.example.com gibi komutları çalıştırarak çözümlemenin doğru olup olmadığını kontrol edin.
Adım 9: Güvenlik İpuçları ve En İyi Uygulamalar
BIND sunucusu kurmak, ağ güvenliğiniz için önemli bir adımdır. Güvenliği artırmak için aşağıdaki ipuçlarını ve en iyi uygulamaları göz önünde bulundurun:
* allow-query ve allow-recursion Kısıtlamaları: named.conf dosyasındaki allow-query ve allow-recursion yönergelerini yalnızca yerel ağınızdaki veya güvenilir istemcilerinizdeki IP adresleriyle sınırlayın. any olarak bırakmak, sunucunuzu bir “açık çözümleyici” (open resolver) haline getirir ve DDoS saldırıları için kötüye kullanılabilir.
* allow-transfer Kısıtlamaları: Eğer ikincil (slave) DNS sunucularınız varsa, zone bloklarında allow-transfer yönergesini kullanarak bölge transferlerine yalnızca yetkili ikincil sunucuların IP adreslerinden izin verin.
* Root Hints Dosyasını Güncel Tutun: /var/named/named.ca (veya named.root.hints) dosyasındaki kök sunucu ipuçları, BIND’ın internetteki diğer alan adlarını çözebilmesi için gereklidir. Bu dosya nadiren değişse de, zaman zaman güncellendiğinden emin olun.
* BIND Güncellemelerini Takip Edin: ISC (Internet Systems Consortium), BIND için düzenli olarak güvenlik güncellemeleri ve yamalar yayınlar. Sistem güncellemelerinizi düzenli olarak yaparak (örneğin, sudo yum update -y) BIND’ın en son ve en güvenli sürümünü kullandığınızdan emin olun.
* Günlük Kayıtlarını İzleyin: BIND’ın günlük kayıtlarını (/var/log/messages veya named.conf‘ta yapılandırdığınız özel günlük dosyaları) düzenli olarak kontrol edin. Anormal aktiviteler veya hata mesajları, potansiyel güvenlik sorunlarını veya yapılandırma hatalarını gösterebilir.
* CHROOT Ortamında Çalıştırma (Gelişmiş): BIND’ı bir chroot (change root) ortamında çalıştırmak, bir saldırganın BIND’ı ele geçirmesi durumunda sistemin geri kalanına erişimini kısıtlar. Bu, daha karmaşık bir yapılandırma gerektirir ancak güvenliği önemli ölçüde artırır. CentOS 6’da BIND genellikle varsayılan olarak chroot’ta çalışır (/var/named/chroot). Kontrol etmek için /etc/sysconfig/named dosyasındaki ROOTDIR ayarına bakabilirsiniz.
* DNSSEC Etkinleştirme: DNS Security Extensions (DNSSEC), DNS verilerinin bütünlüğünü ve doğruluğunu sağlamak için kriptografik imzalar kullanır. named.conf dosyasında dnssec-enable yes; ve dnssec-validation yes; ayarlarını etkinleştirerek DNSSEC doğrulamasını açabilirsiniz. Bu, DNS önbellek zehirlenmesi (cache poisoning) gibi saldırılara karşı koruma sağlar.
* rndc Güvenliği: rndc (remote name daemon control) aracı, BIND sunucusunu uzaktan yönetmek için kullanılır. rndc.key dosyası yetkisiz erişimi engellemek için doğru izinlere sahip olmalı ve gizli tutulmalıdır. Genellikle bu dosya sadece named kullanıcısı ve root tarafından okunabilir olmalıdır.
Sorun Giderme
BIND kurulumu veya yapılandırması sırasında sorunlarla karşılaşabilirsiniz. İşte yaygın sorunlar ve çözüm yolları:
* BIND servisi başlamıyor:
* Günlük kayıtlarını kontrol edin: En önemli adım, /var/log/messages dosyasını kontrol etmektir. BIND’ın neden başlamadığını veya hata verdiğini gösteren ayrıntılı mesajlar içerir. sudo tail -f /var/log/messages komutu ile canlı günlükleri izleyebilirsiniz.
* Yapılandırma dosyası hataları: named-checkconf ve named-checkzone komutlarını tekrar çalıştırarak tüm yapılandırma dosyalarınızın hatasız olduğundan emin olun.
Dosya izinleri: /etc/named.conf ve /var/named/ dizinindeki bölge dosyalarının named kullanıcısı tarafından okunabilir olduğundan emin olun. sudo chown root:named /var/named/.zone ve sudo chmod 640 /var/named/*.zone gibi komutlarla izinleri düzeltebilirsiniz.
* SELinux: SELinux’un BIND’ı engellemediğinden emin olun. Geçici olarak sudo setenforce 0 ile devre dışı bırakıp tekrar deneyin. Eğer bu işe yararsa, SELinux politikalarını ayarlamanız veya kalıcı olarak devre dışı bırakmanız gerekir (üretim ortamında dikkatli olun).
* Port çakışması: Başka bir uygulamanın 53 numaralı portu kullanıp kullanmadığını kontrol edin: sudo netstat -tulpn | grep :53.
* DNS çözümlemesi çalışmıyor:
* Firewall: 53 numaralı UDP ve TCP portlarının güvenlik duvarında açık olduğundan emin olun (iptables kurallarını kontrol edin).
* allow-query ayarı: /etc/named.conf dosyasındaki allow-query yönergesinin, sorgu yapan istemcinin IP adresini veya ağını içerdiğinden emin olun.
* recursion ayarı: Eğer harici alan adlarını çözmek istiyorsanız, recursion yes; ayarının etkin olduğundan emin olun.
* resolv.conf: Test ettiğiniz istemcinin (veya sunucunun kendisinin) /etc/resolv.conf dosyasında BIND sunucunuzun IP adresinin nameserver olarak belirtildiğinden emin olun.
* Bölge dosyası hataları: named-checkzone ile bölge dosyalarınızda hata olmadığından emin olun. Özellikle SOA seri numarası, NS ve A kayıtları doğru olmalıdır.
* Önbelleği temizle: Bazen yanlış önbelleğe alınmış veriler sorunlara neden olabilir. BIND’ın önbelleğini temizlemek için sudo rndc reload veya sudo service named restart komutlarını kullanabilirsiniz.
Sonuç
Bu kapsamlı rehberde, CentOS 6 işletim sistemi üzerinde BIND DNS sunucusunu baştan sona nasıl kuracağınızı ve temel birincil DNS sunucusu olarak nasıl yapılandıracağınızı öğrendiniz. BIND paketlerini kurmaktan, SELinux ve güvenlik duvarı ayarlarını yapılandırmaya, ileriye dönük ve geriye dönük bölgeleri oluşturmaya ve DNS çözümlemesini test etmeye kadar tüm adımları ayrıntılı olarak ele aldık. Ayrıca, DNS sunucunuzun güvenliğini sağlamak ve olası sorunları gidermek için önemli ipuçları ve en iyi uygulamalar sunduk.
BIND, güçlü ve esnek bir DNS sunucusu olup, doğru yapılandırıldığında ağınızın temel bir bileşeni olarak güvenilir bir hizmet sunar. Bu rehberdeki adımları takip ederek, kendi ağınız için sağlam bir DNS altyapısı kurabilir ve yönetebilirsiniz. Unutmayın ki DNS yönetimi sürekli dikkat ve düzenli bakım gerektiren bir süreçtir. Yapılandırmalarınızı düzenli olarak gözden geçirmek, güvenlik güncellemelerini takip etmek ve günlük kayıtlarını izlemek, DNS sunucunuzun sorunsuz ve güvenli bir şekilde çalışmasını sağlamanın anahtarıdır. CentOS 6 eski bir sistem olsa da, bu temel bilgiler DNS sunucularının çalışma prensiplerini anlamak ve yönetmek için sağlam bir temel oluşturmaktadır.
