DNS server menggunakan BIND chroot dengan kontrol rndc key

BIND(Berkeley Internet Name Domain project) adalah aplikasi DNS server opensource yang sudah terkenal dan stabil. Mengenai sekilas tentang DNS bisa di lihat di postingan saya sebelumnya di sini. Pada tutorial ini kita akan membuat DNS server sederhana menggunakan BIND chroot dan di kontrol dengan rndc key dengan alasan meningkatkan keamanan.

Dengan chroot kita dapat membatasi ruang lingkup(direktori) user/daemon atau di penjarakan, ini dilakukan untuk memperkuat keamanan sistem. Jika suatu user/daemon yang di chroot maka dia tidak akan bisa keluar dari direktori(home directory) yang telah di tetapkan, hal ini sangat bermanfaat misal user/daemon yang di jail(chroot) telah diambil alih oleh penyusup maka dia tidak akan bisa keluar dari direktory tersebut dan akan mengurangi resiko pencurian data, tidak akan menggangu user lain atau kinerja sistem secara keseluruhan tapi hanya sebagian saja. Oleh karena itu untuk melakukan chroot harus menetukan environment dan permission yang tepat untuk user/daemon yang akan di jail.

Rndc(remote name daemon control) merupakan utility dari bind untuk mengontrol akses daemon, dengan menggunakan rndc bisa mencegah akses user ilegal(unauthorized) dari sistem lain untuk mengontrol BIND di server kita.

Perhatian:
pada tutorial ini sebagai contoh digunakan nama domain feedyourmind.org
nameserver :
192.168.10.1 --> gw.feedyourmind.org
client :
192.168.10.3 --> ubs.feedyourmind.org
192.168.10.4 --> dp.feedyourmind.org

Selanjutnya adalah langkah-langkah untuk menginstalasi bind yang di jail dan menggunakana rndc.

Instalasi BIND
Untuk mendapatkan bind versi terbaru bisa di download di www.isc.org. Pada tutorial ini saya menggunakan bind-9.4.1.tar.gz, setelah di download loginlah sebagai root kemudian pindahkan file tersebut ke direktori /usr/src. Jalankan perintah-perintah berikut:

# cd /usr/src
# tar zxvf bind-9.4.1.tar.gz

selanjutnya di konfigur

# cd bind-9.4.1
# ./configure --prefix=/usr/local

dengan menggunakan --prefix=/usr/local maka file hasil istalasi akan di tempatkan dibawah direktori /usr/local. Jika tidak ada error lanjutkan dengan make dan make install

# make
# make install

Membuat user, group dan direktori untuk chroot BIND
Setelah instalasi selesai tanpa error berikutnya membuat group dan user named untuk menjalankan bind(daemon).

# groupadd named
# useradd -g named -g /chroot/named -s /bin/true named

kemudian kunci user named

# passwd -l named

membuat direktori untuk memenjarakan user named

# mkdir -p /chroot/named

opsi -p digunakan agar sekaligus membuat parent direktorinya(/chroot), kemudian masuk ke direktori yang baru dibuat

membuat direktori yang diperlukan dibawah direktori /chroot/named

# cd /chroot/named
# mkdir dev
# mkdir etc
# mkdir -p var/run
# mkdir conf/secondaries

membuat device yang diperlukan dan mengkopi file timezone

# cd /chroot/named
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# mknod dev/random c 1 8
# cp /etc/localtime etc

Konfigurasi named
setelah direktori untuk men-jail sudah siap selanjutnya membuat file configurasi /chroot/named/etc/named.conf dengan menggunakan teks editor vi, pico atau yang lain.

# pico /chroot/named/etc/named.conf

isi dari file /chroot/named/etc/named.conf sebagai berikut :

#
# /chroot/named/etc/named.conf
#

options {
directory "/conf";
# direktori letak data file zona
pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";
dump-file "/var/run/named.db";

# direktori /conf dan /var/run disini bukanlah terletak di bawah
# direktori root(/) tetapi terletak di bawah direktori
# /chroot/named, hal ini dikarenakan user/daemon named di chroot
# sehingga root direktori dari named adalah /chroot/named.

# hide our "real" version number
version "[secured]";

// query-source address * port 53;
};

zone "." IN {
type hint;
file "db.rootcache";
# file yang memuat record root server
};

zone "localhost" IN {
type master;
file "db.localhost";
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "db.127.0.0.";
notify no;
};

zone "feedyourmind.org" IN {
type master;
file "db.feedyourmind.org";
};
# pada baris diatas didefinisikan sebuah zona yaitu feedyourmind.org
# dengan nama datafile zonanya db.feedyourmind.org yang terletak di
# direktori /chroot/named/conf

zone "10.168.192.in-addr.arpa" IN {
type master;
file "db.192.168.10";
};
# pada baris diatas didefinisikan sebuah zona untuk reverse lookup
# yaitu 10.168.192.in-addr.arpa dengan nama datafile zonanya
# db.192.168.10 yang terletak di direktori /chroot/named/conf

setelah disimpan buatlah link dari file named.conf

# ln -s /chroot/named/etc/named.conf /etc/named.conf

Konfigurasi rndc
setelah selesai dengan named.conf selanjutnya mengkonfigurasi rndc dengan men-generate rndc key dengan dnssec-keygen.

# cd /chroot/named/etc
# /usr/local/sbin/dnssec-keygen -a HMAC-MD5 -b 256 -n HOST rndc

jika sukses akan terdapat dua file baru yaitu

# ls -alh /chroot/named/etc
...
-rw------- 1 root root 112 2007-10-30 14:46 Krndc.+157+26911.private
-rw------- 1 root root 68 2007-10-30 14:46 Krndc.+157+26911.key
...

kemudian membuat file configurasi rndc yaitu /chroot/named/etc/rndc.conf

# pico /chroot/named/etc/rndc.conf

isi file rndc.conf sebagai berikut

#
# /chroot/named/etc/rndc.conf
#

options {
default-server 127.0.0.1;
default-key "rndc-key";
};

server 127.0.0.1 {
key "rndc-key";
};

key "rndc-key" {
algorithm "hmac-md5";
secret "secret key;
};

PERHATIAN...!
editlah file rndc.conf diatas pada bagian:

key "rndc-key" {
algorithm "hmac-md5";
secret "secret key;
};

gantilah "secret key" dengan key pada file Krndc.+157+26911.private yang merupakan hasil generate menggunakan dnssec-keygen. misal:

# cd /chroot/named/etc
# cat Krndc.+157+26911.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: 13Ms0r2NEoJ+ngxsa/fg9x8ed6X5LrvAklZmuUquJ8E= <-- secret key
Bits: AAA=

sehingga file rndc.conf pada bagian tersebut menjadi seperti berikut

key "rndc-key" {
algorithm "hmac-md5";
secret "13Ms0r2NEoJ+ngxsa/fg9x8ed6X5LrvAklZmuUquJ8E=;
};

yang perlu diperhatikan disini bahwa key hasil generate dnssec-keygen selalu berbeda-beda, jadi isilah secret key dengan key hasil generate dnssec-keygen yang outputnya berupa file berekstensi .private. buatlah link dari /chroot/named/etc/rndc.conf

# ln -s /chroot/named/etc/rndc.conf /usr/local/etc/rndc.conf
# ln -s /chroot/named/etc/rndc.conf /etc/rndc.conf

selanjutnya dengan editlah file named.conf, tambahkan beberapa baris di bagian awal sehingga menjadi seperti di bawah ini:

#
# /chroot/named/etc/named.conf
#

# awal tambahan
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { rndc-key; };
};

key "rndc-key" {
algorithm "hmac-md5";
secret "13Ms0r2NEoJ+ngxsa/fg9x8ed6X5LrvAklZmuUquJ8E=;
# pada baris di atas harus sama dengan secret key
# pada /chroot/named/etc/rndc.conf
};
# akhir tambahan

options {
directory "/conf";
# baris diatas menyatakan direktori letak data file zona pid-file "/var/run/named.pid"; statistics-file "/var/run/named.stats";
dump-file "/var/run/named.db";
# direktori /conf dan /var/run disini bukanlah terletak di bawah
# direktori root(/) tetapi terletak di bawah direktori
# /chroot/named, hal ini dikarenakan user/daemon named di chroot
# sehingga root direktori dari named adalah /chroot/named.
# hide our "real" version number
version "[secured]";
// query-source address * port 53;
};

zone "." IN {
type hint;
file "db.rootcache";
# file yang memuat record root server
};

zone "localhost" IN {
type master;
file "db.localhost";
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "db.127.0.0.";
notify no;
};

zone "feedyourmind.org" IN {
type master;
file "db.feedyourmind.org";
};
# pada baris diatas didefinisikan sebuah zona yaitu feedyourmind.org
# dengan nama datafile zonanya db.feedyourmind.org yang terletak di
# direktori /chroot/named/conf

zone "10.168.192.in-addr.arpa" IN {
type master;
file "db.192.168.10";
};
# pada baris diatas didefinisikan sebuah zona untuk reverse lookup
# yaitu 10.168.192.in-addr.arpa dengan nama datafile zonanya
# db.192.168.10 yang terletak di direktori /chroot/named/conf

selanjutnya hapuslah file hasil generate dnssec-keygen yang berekstensi .private

# cd /chroot/named/etc
# rm -rf Krndc.+157+26911.private

Konfigurasi zona
Setelah file konfigurasi named dan rndc selesai selanjutnya membuat db.rootcache yang berisi daftar alamat server root, untuk membuatnya bisa dengan menjalankan perintah seperti berikut:

# dig @a.root-servers.net . ns > /chroot/named/conf/db.rootcache

buatlah file zone untuk localhost dengan nama db.localhost.

# pico /chroot/named/conf/db.localhost

berikut isi dari file tersebut:

;
; db.localhost
;
$TTL 86400

@ IN SOA @ root (
1001 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

IN NS @
IN A 127.0.0.1

buatlah file zone untuk 0.0.127.in-addr.arpa dengan nama db.localhost.

# pico /chroot/named/conf/db.127.0.0

berikut isi dari file tersebut:

;
; db.127.0.0
;
$TTL 86400
@ IN SOA localhost. root.localhost. (
1 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.

Selanjutnya, kriteria zona yang akan dibuat adalah sebagai berikut:

domain :
feedyourmind.org
nameserver :
192.168.10.1 --> gw.feedyourmind.org
client :
192.168.10.7 --> ubs.feedyourmind.org
192.168.10.8 --> dp.feedyourmind.org

maka buatlah dua buah file zona feedyourmind.org untuk forward-mapping (memetakan nama ke IP Address) dengan nama db.feedyourmind.org dan file zona untuk reverse-mapping (memetakan IP Address ke nama) dengan nama db.192.168.10 (sesuai nama file yang telah didefinisikan di named.conf).

# pico /chroot/named/conf/db.feedyourmind.org

berikut ini isi dari file tersebut:

$ORIGIN feedyourmind.org.
$ttl 86400
@ IN SOA gw.feedyourmind.org. root.gw.feedyourmind.org. (
1001 ; serial
3H ; refresh 3 jam
15M ; retry 15 menit
1W ; expiry 1 minggu
1D ) ; minimum 1 hari
IN NS gw
IN MX 10 gw
gw IN A 192.168.10.1
ubs IN A 192.168.10.7
dp IN A 192.168.10.8
www IN CNAME dp


Keterangan:

@ IN SOA gw.feedyourmind.org. root.gw.feedyourmind.org.
Maksud baris diatas adalah gw.feedyourmind.org.(penulisan host diakhiri dengan tanda titik) sebagai host yang diberi otoritas dan root.gw.feedyourmind.org. personal(mail) yang bertanggungjawab.

1001 ;serial
Merupaka penomoran terhadap perubahan pada file zona tersebut, ketika kita melakukan perubahan terhadap file zona tersebut maka serial tersebut juga harus dinaikan agar slave(secondary) name server mengenalinya dan melakukan update/backup(zona transfer).

3H ; refresh 3 jam
Agar slave(secondary) mengecek untuk update setiap 3 jam.

15M ; retry 15 menit
Jika master DNS server gagal menjawab request dari slave maka baris diatas memberitahukan jangka waktu untuk mencoba update lagi bagi slave.

1W ; expiry 1 minggu
Jika DNS master tidak berfungsi dalan jangka waktu tertentu, maka baris diatas akan menjadi acuan bagi slave untuk meneruskan menggunakan data yang telah ada sampai expired.

1D ) ; minimum 1 hari
Negatif-caching TTL

IN NS gw
NS nameserver zona feedyourmind.org (gw.feedyourmind.org)

IN MX 10 gw
Prioritas mail exchanger(MX) pada domain, jika mempunyai lebih dari satu mail server pada domain tersebut maka prioritasnya berdasarkan angka terkecil.

gw IN A 192.168.10.1
ubs IN A 192.168.10.7
dp IN A 192.168.10.8
memetakan nama ke IP Address, misal host dp(dp.feedyourmind.org) IP Addressnya 192.168.10.8

www IN CNAME dp
CNAME (canonical name) atau nama alias dari A record, jadi baris diatas menyatakan bahwa www(www.feedyourmind.org) merupakan nama alias dari dp(dp.postix.org). Satu A record bisa mempunyai beberapa nama alias(canonical name).

# pico /chroot/named/conf/db.192.168.10

berikut ini isi dari file tersebut :

$ORIGIN 10.168.192.in-addr.arpa.
$ttl 86400
@ IN SOA gw.feedyourmind.org. root.gw.feedyourmind.org. (
20060706
21600
3600
604800
21600 )

IN NS gw.feedyourmind.org.
1 IN PTR gw.feedyourmind.org.
7 IN PTR ubs.feedyourmind.org.
8 IN PTR dp.feedyourmind.org.

Keterangan:

1 IN PTR gw.feedyourmind.org.
baris(record) diatas menyatakan bahwa IP Address 1(192.168.10.1) bernama gw.feedyourmind.org.

kemudian jangan lupa untuk mengedit file /etc/resolv.conf dengan memasukan IP Address dari nameserver.

# pico /etc/resolv.conf

berikut isi dari file tersebut

#
# /etc/resolv.conf
#
nameserver 192.168.10.1

Seting file permission dan membuat script untuk mejalankan BIND
Mengatur file permission untuk linkungan tempat named di jail

# cd /chroot/named
# chown root:root var/
# chmod u=rwx,og=x var/
# chown root:named var/run/
# chmod u=rwx,og=x var/run/

# chown -R root:named etc/
# chmod u=rw,og=r etc/localtime
# chmod u=rw,og=r etc/*.key
# chmod u=rw,g=r,o= etc/*.conf

# chown root:named conf/
# chown root:named conf/secondaries/
# chmod ug=rwx,o= conf/secondaries/

Untuk mempermudah menjalankan daemon named yang di chroot maka buatlah script dengan nama named.sh di direktori /chroot/.

# pico /chroot/named.sh

berikut isi file tersebut

#!/bin/sh
# Start/Stop/Restart the BIND
# /chroot/named.sh
PIDWD=/chroot/named/var/run

named_start() {
/usr/local/sbin/named -t /chroot/named -u named -c /etc/named.conf
}

named_stop() {
killall named
}

named_restart() {
if [ -r $PIDWD/named.pid ]; then
named_stop
fi
named_start
}

case "$1" in
'start')
echo "Starting: BIND"
named_start
;;
'stop')
echo "Stopping: BIND"
named_stop
;;
'restart')
echo "Restarting: BIND"
named_restart
;;
*)
echo "cara menggunakan # $0 start|stop|restart"
esac

untuk menggunakan cukup dengan perintah

# /chroot/named.sh start
untuk menjalankan service BIND

# chroot/named.sh stop
untuk menghentikan service BIND

# chroot/named.sh restart
untuk merestart service BIND

Sampai pada tahap ini BIND sudah dapat berfungsi dan bisa di ujicoba, untuk mengujinya bisa menggunakan utility dig seperti contoh dibawah ini:

# /chroot/named.sh start
Starting: BIND
# dig www.feedyourmind.org

; <<>> DiG 9.4.1 <<>> www.feedyourmind.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63041
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.feedyourmind.org. IN A

;; ANSWER SECTION:
www.feedyourmind.org. 86400 IN CNAME dp.feedyourmind.org.
dp.feedyourmind.org. 86400 IN A 192.168.10.8

;; AUTHORITY SECTION:
feedyourmind.org. 86400 IN NS gw.feedyourmind.org.

;; ADDITIONAL SECTION:
gw.feedyourmind.org. 86400 IN A 192.168.10.1

;; Query time: 5 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Thu Nov 1 18:48:09 2007
;; MSG SIZE rcvd: 99

Seperti contoh diatas, jika BIND berfungsi dengan baik maka akan memberi jawaban terhadap query kita untuk host www.feedyourmind.org bahwa host tersebut merupakan CNAME (canonical name) dari dp.feedyourmind.org dengan IP Address 192.168.10.8 seperti tertera pada ANSWER SECTION diatas.


CMIIW

referensi
http://id.wikipedia.org/wiki/DNS
http://www.unixwiz.net/

Related Posts by Categories



Relatedpost Widget by Hoctro | Jack Book