DNS sunucunuzun versiyonunu gizleyin
Güvenlik politikası olarak belirsizliği seviyorsanız sunucularınızın üstünde çalışan uygulamaların kimliklerini dışa vermemelerini istiyorsunuzdur.Daha önceki bir yazıda kısaca Apache Web Sunucusunun kimliğini gizlemeden bahsetmiştim, bu yazıda da DNS sunucumuzun versiyonunu maskelemeden bahsedeceğim.
Sunucumuzu maskelemeden önce dışarıya karşı ne gibi bilgiler veriyor bakalım :
$ dig @ns1.mydomain.com -c CH -t txt version.bind
; <<>> DiG 9.7.2-P2 <<>> @ns1.mydomain.com -c CH -t txt version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64071
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.2.4"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 84 msec
;; SERVER: 00.00.00.00#53(00.00.00.00)
;; WHEN: Thu Jan 27 20:58:38 2011
;; MSG SIZE rcvd: 62
Yukarda görüldüğü gibi Bind DNS sunucusu öntanımlı olarak dışarıya kendi ve versiyonu ile ilgili bilgileri vermektedir.Bind DNS sunucumuzun versiyonu "9.2.4" müş.Kimliğimizi dışarıya vermemek ya da yanıltmak için "named.conf" dosyamızın içindeki "options" kısmına "version" satırını ekleyerek kimliğimizi dışarıya karşı maskeleyelim."version" satırı için istediğimiz bir isim ekleyebiliriz.
# vi /var/named/chroot/etc/named.conf
options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; recursion no ; allow-transfer { none; }; dnssec-enable yes; version "DNS Server" ;
Sunucumuzu yeniden başlatalım :
# /sbin/service named restart
Yukarda görüldüğü gibi "options" kısmına " version "DNS Server" ; " satırını ekledik.DNS sunucumuzun versiyonunu tekrar sorgulattığımızda artık bize "DNS Server" adını göstermesi lazım.
$ dig @ns1.mydomain.com -c CH -t txt version.bind ; <<>> DiG 9.7.2-P2 <<>> @ns1.mydomain.com -c CH -t txt version.bind ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29215 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;version.bind. CH TXT ;; ANSWER SECTION: version.bind. 0 CH TXT "DNS Server" ;; AUTHORITY SECTION: version.bind. 0 CH NS version.bind. ;; Query time: 110 msec ;; SERVER: 00.00.00.00#53(00.00.00.00) ;; WHEN: Thu Jan 27 21:11:16 2011 ;; MSG SIZE rcvd: 60
Artık DNS sunucumuz versiyon bilgisi vermiyor.Onun yerine yazmış olduğumuz "DNS Server" yazısını ekrana yazıyor.Sadece bunu yaparak DNS sunucumuzu güvende mi tutuyoruz?Elbetteki hayır! Şu an sadece sunucumuzun versiyonunu maskelemiş olduk.Yoksa maskeleyemedik mi ???
Aslında tam olarak da maskeleyemedik."Finger print DNS " yazılımı ile kolayca sunucumuzun kimliğini ifşa edebilirler.Kimse etmeden ilk biz deneyelim."fpdns" yazılımı neredeyse her dağıtımın deposunda mevcut.Hemen bu yazılımı kuralım:
# yum install fpdns
"fpdns" yazılımını kurduktan sonra sunucumuzu sorgulatalım.
$ fpdns ns1.mydomain.com
fingerprint (ns1.mydomain.com, 00.00.00.00): BIND 9.2.3rc1 -- 9.4.0a0
Yukarda görüldüğü gibi demek ki çok da iyi saklayamamışız :)