Minggu, 22 Februari 2009

Implementasi djbdns untuk Name resolver (dnscache) dan authoritative server (domain internal)

INTRO

Baru-baru ini saya bebenah jaringan yang saya kelola. IP Private kelas C sudah ga muat lagi. 2 gedung yang kalau ditotal lantainya hampir 20 tingkat, membuat kelas C terasa sesak. Padahal ada juga IP yang di reserve untuk device dan server aplikasi. Akhirnya saya upgrade ke IP private kelas B. Silahkan baca Address Allocation for Private Internets (http://www.ietf.org/rfc/rfc1918.txt) mengenai alokasi IP untuk kebutuhan private.

Sekalian juga gateway yang berfungsi sebagai NAT dan DHCP server nya ikut terkena getah. OS-nya saya ganti dari FreeBSD 6.1 ke OpenBSD 4.3. Woah, kenapa FreeBSD nya diganti? Sederhana sih, Untuk keperluan aplikasi jaringan misalnya bikin Firewall, DHCP server dan NAT, OpenBSD jauh lebih praktis. Ga perlu install dhcp server dulu dan kompile kernel. Lagipula di FreeBSD saya pakai Packet Filter-nya OpenBSD untuk firewalling. Lah, ya sekalian saja hijrah ke OpenBSD. Tapi saya tetap akan pakai FreeBSD untuk keperluan server aplikasi.

Ternyata masalah masih suka muncul. Ada banyak penyebab, salah satunya karena dnscache-nya (http://id.wikipedia.org/wiki/DNS) telkom sering mati. Akhirnya untuk meningkatkan availability dan reliability, saya putuskan untuk membuat dnscache sendiri. Diputuskan juga menggunakan djbdns untuk keperluan software DNS-nya (http://cr.yp.to/djbdns.html). Pertimbangannya karena faktor kemudahan dan keamanan. Untuk OS-nya saya kembali menggunakan OpenBSD 4.3 karena faktor keamanan. Lagipula Dan J Bernstein pembuat djbdns menggunakan OpenBSD juga :) Kira-kira gambaran model jaringan nya seperti dibawah ini:


| |
| |
Koneksi Internet Koneksi Internet
| |
| |
+--------------------------+ +--------------------------------+
| OpenBSD 4.3 (nakula) | | OpenBSD 4.3 (sadewa) |
| - NAT & DHCP server | | - dns name resolver (dnscache) |
| - authoritative server | | menggunakan djbdns |
| untuk domain internal | +--------------------------------+
| menggunakan djbdns | |172.20.0.30
+--------------------------+ |
|172.20.0.1 |
| |
| |
| |
+--------------------------+ |
| Local Area Network | |
| IP: 172.20.0.0 |----------------------+
| Subnet: 255.255.0.0 |
+--------------------------+



INSTALASI DAEMONTOOLS, UCSPI-TCP & DJBDNS

Oke sekarang mari kita mulai instalasi pada mesin sadewa. Diasumsikan mesin sudah terinstall OpenBSD dengan baik dan bisa melakukan koneksi ke internet. Minimal informasi default gateway (/etc/mygate) sudah tersedia. Untuk informasi dns resolver (/etc/resolv.conf) saya kosongin. Nanti jika dnscache-nya sudah terinstall, tinggal melakukan request ke diri sendiri (172.20.0.30).

Instalasi daemontools

Buat direktori /package.
mkdir -p /package
chmod 1755 /package
cd /package

Download daemontools dari http://cr.yp.to/daemontools/daemontools-0.76.tar.gz dan letakkan di folder /package. Ekstrak paket tersebut:
gunzip -d -c daemontools-0.76.tar.gz | tar xvf -
cd admin/daemontools-0.76

Sekarang proses kompilasi dan instalasi:
package/install

Reboot komputer untuk menjalankan svscan. Instalasi daemontools menambahkan sebuah baris di file /etc/rc.local yang mengaktifkan svscan setiap kali komputer di boot. Referensi: http://cr.yp.to/djbdns/install.html.

Instalasi ucspi-tcp

Download ucspi-tcp dari http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz. Ekstrak paket tersebut:
gunzip -d -c ucspi-tcp-0.88.tar.gz | tar xvf -
cd ucspi-tcp-0.88

Sekarang proses kompilasi dan instalasi:
make
make setup check

Referensi: http://cr.yp.to/ucspi-tcp/install.html

Instalasi djbdns

Pastikan daemontools dan ucspi-tcp sudah terinstall dengan benar. Download djbdns dari http://cr.yp.to/djbdns/djbdns-1.05.tar.gz. Ekstrak paket tersebut:
gunzip -d -c djbdns-1.05.tar.gz | tar xvf -
cd djbdns-1.05

Sekarang proses kompilasi dan instalasi:
make
make setup check

Referensi: http://cr.yp.to/djbdns/install.html

SETUP DJBDNS SEBAGAI NAME RESOLVER (DNSCACHE)

Diasumsikan daemontools dan djbdns telah terinstall dan terkoneksi ke internet dengan baik. Opsional, cek apakah komputer yang akan digunakan sebagai dnscache bisa bicara dengan dns server di internet:
dnsq a www.aol.com 192.203.230.10
dnsq a www.aol.com 192.48.79.30

Jika output yang keluar adalah “timed out”, maka komputer belum terkoneksi ke internet dengan benar. Silahkan cek kembali. Jika komputer anda tersembunyi di balik firewall, pastikan untuk meng-allow paket UDP dan TCP dari komputer (dnscache) port 1024-65535 menuju DNS server lain pada port 53.

Buat group Gdnscache dan Gdnslog.

groupadd Gdnscache

groupadd Gdnslog

Tambahkan user Gdnscache dan Gdnslog dengan group dengan nama sama, dan pastikan user tersebut tidak mendapatkan akses login (nologin).

useradd -g Gdnscache -s /sbin/nologin Gdnscache

useradd -g Gdnslog -s /sbin/nologin Gdnslog

Server sadewa (yang akan dijadikan dnscache) mempunyai dua network interface. Satu ke internet, satu lagi ke LAN (172.20.0.0). Sadewa didesain hanya akan menerima request name resolve yang berasal dari LAN. IP lokal server sadewa adalah 172.20.0.30. Sekarang saatnya membuat direktori untuk servis dnscache. Sebagai root ketikkan:

dnscache-conf Gdnscache Gdnslog /etc/dnscache 172.20.0.30

Akan terbentuk direktori /etc/dnscache yang didalamnya terdapat log dan file konfigurasi yang bisa diubah sesuai kebutuhan. Sekarang buat svscan tahu tentang servis dnscache yang baru di-setup, kemudian gunakan svstat untuk mencek jalannya servis yang baru.

ln -s /etc/dnscache /service

sleep 5

svstat /service/dnscache

Coba jalankan perintah “svstat /service/dnscache” beberapa kali:

# svstat /service/dnscache

/service/dnscache: up (pid 17799) 179627 seconds

# svstat /service/dnscache

/service/dnscache: up (pid 17799) 179631 seconds

# svstat /service/dnscache

/service/dnscache: up (pid 17799) 179636 seconds

Jika hasilnya menunjukkan uptime yang terus bertambah seperti diatas (179627, 179631, 179636), maka servis dnscache sudah berjalan dengan baik. Jika ingin membatasi akses IP mana saja yang bisa menggunakan layanan dari dnscache, lakukan:

touch /etc/dnscache/root/ip/172

Kemudian edit file “/etc/dnscache/root/ip/172” dan masukkan daftar IP address yang ingin diberikan akses. Jika file “/etc/dnscache/root/ip/172” dibiarkan kosong maka artinya semua klien LAN yang dengan IP 172.* bisa menggunakan layanan dnscache.

Sedangkan pada komputer klien, masukkan informasi IP dns sesuai dengan OS nya masing-masing. Pada Unix/Linux biasanya pada file /etc/resolv.conf tinggal ditambahkan baris “nameserver 172.20.0.30”.

Referensi: http://cr.yp.to/djbdns/run-cache-x.html

SETUP DJBDNS SEBAGAI AUTHORITATIVE SERVER (INTERNAL)

Berikutnya kita melakukan instalasi djbdns sebagai authoritative server. Instalasi akan dilakukan di mesin nakula. Diasumsikan mesin sudah terinstall OpenBSD dengan baik dan bisa melakukan koneksi ke internet. Minimal informasi default gateway (/etc/mygate) sudah tersedia. Untuk informasi dns resolver (/etc/resolv.conf) sudah bisa diarahkan ke mesin 172.20.0.30. Sedangkan IP address LAN pada mesin nakula adalah 172.20.0.1. Sama pada mesin sadewa, di mesin nakula pun harus diinstall dahulu daemontools, ucspi-tcp dan djbdns. Silahkan lihat bahasan tentang “INSTALASI DAEMONTOOLS, UCSPI-TCP & DJBDNS” di bagian atas.

Sekarang buat group Gtinydns dan Gdnslog.

groupadd Gtinydns

groupadd Gdnslog

Tambahkan user Gtinydns dan Gdnslog dengan group dengan nama sama, dan pastikan user tersebut tidak mendapatkan akses login (nologin).

useradd -g Gtinydns -s /sbin/nologin Gtinydns

useradd -g Gdnslog -s /sbin/nologin Gdnslog

Sekarang buat direktori layanan /etc/tinydns yang dikonfigurasi dengan IP address dari DNS server:
tinydns-conf Gtinydns Gdnslog /etc/tinydns 172.20.0.1

Direktori ini memuat log dan file konfigurasi yang bisa diubah belakangan. Sekarang aktifkan agar svscan mulai menjalankan servis dns server:
ln -s /etc/tinydns /service
sleep 5
svstat /service/tinydns

Karena ini untuk kebutuhan internal, sebagai contoh kita akan menggunakan domain .internal.
cd /service/tinydns/root
./add-ns internal 172.20.0.1
make

Sekarang tambahkan informasi host dan IP nya ke database. Akan dibuat contoh domain untuk nakula (172.20.0.1/gateway.internal) dan sadewa (172.20.0.30/dnscache.internal).
cd /service/tinydns/root
./add-host gateway.internal 172.20.0.1
./add-host dnscache.internal 172.20.0.30
make

Sekarang pada dnscache (mesin sadewa), dibuat agar dnscache mengontak mesin nakula bila ada request name resolver untuk domain .internal.
cd /service/dnscache
echo 172.16.0.1 >> root/servers/internal
chmod 644 root/servers/internal
svc -t .

Referensi:

http://cr.yp.to/djbdns/run-server.html

http://cr.yp.to/djbdns/dot-local.html



Sekarang coba tes ping ke gateway.internal dan dnscache.internal. Selamat mencoba dan semoga berhasil! :D




Tags: unix, openbsd, freebsd, dns, djbdns
5 comments
share

Kapan saya pakai Linux/FreeBSD/OpenBSD ? Aug 21, '08 7:13 PM
for everyone

Jawabnya sederhana. Tergantung kebutuhan. Kalau akan digunakan untuk kebutuhan jaringan dan keamanan (router, dhcp, nat, firewalling, bridging, dll), OpenBSD atau FreeBSD yang akan saya gunakan. Bukan berarti karena *BSD lebih superior daripada Linux, tapi masalah kebiasaan saja. Buat saya *BSD lebih simpel. belakangan OpenBSD jadi pilihan utama ketimbang FreeBSD karena default package yang tersedia dan integrasi yang lebih dalam antara PF dengan OpenBSD.

Untuk server produksi seperti web dan database server, tergantung spek komputernya. Kalau hardware nya lebih generic, biasanya saya pakai FreeBSD karena pertimbangan familiaritas dan kehandalannya dalam meng-handle load tinggi. tapi karena rata2 server yang saya manage adalah server branded segede2 bagong (it means so big), biasanya FreeBSD punya masalah dengan probing hardware. Kalau sudah begini Linux lah yang jadi andalan utama. Pilihannya cuma 2, centos atau OpenSUSE. Sejauh ini selalu centos yang jadi pilihan utama. Tapi tampaknya karena racun dari Bli IMW, saya kudu mempertimbangkan OpenSUSE.

Mungkin ada yang bertanya, kok cuma dua distro tersebut? Karena di rata2 server sekarang, keterangan yang sering muncul: Designed for Windows 2003, RedHat Enterprise, and SUSE Enterprise. Sebenarnya sih bisa saja pakai distro lain, toh pakai kernel yang tidak jauh beda. Distro lain yang pernah (dan sampai sekarang masih berjalan dengan baik) dicoba untuk server branded adalah Slackware dan Debian.


Kalau laptop, Ubuntu belum tergantikan (masih pakai yang 7.10). Desktop dirumah pakai Xubuntu. Anak2 saya pun sudah familiar dengan Xubuntu. Kalau ada tugas komputer dari sekolah yang berkata "... ketikkan dengan Notepad ..." maka anak saya akan bilang, "Bu Guru, dirumah saya pakai Linux, jadi saya ga pakai notepad tapi pakai bla bla ....". :D

Untuk kebutuhan forensik komputer, biasanya tetap pakai Ubuntu tetapi beberapa hal di tuning kembali seperti kemampuan automount di disable. Tapi sejak resign dari sebuah lembaga penegak hukum, ilmu forensik komputer kepake buat menyelamatkan data yang terkena virus. Yah lumayan lah ... :)

Tags: forensik komputer, computer forensics, unix, freebsd, gnu, openbsd
4 comments
share

DHCP server dengan multiple net interface dan multiple subnet di OpenBSD 4.3 Aug 21, '08 6:34 PM
for everyone

Belakangan untuk kebutuhan aplikasi jaringan dan keamanan, saya sering pakai OpenBSD ketimbang FreeBSD. Pertimbangannya sederhana OpenBSD lebih simpel untuk kebutuhan tersebut. Mau DHCP ga usah capek2 install package isc-dhcpd dulu, udah ada tinggal diaktifkan. Tapi yang bikin saya jatuh cinta adalah aplikasi firewall Packet Filter (ie: PF). Jauh lebih mudah daripada IPFW di FreeBSD, apalagi iptables di Linux. Powerfull pula. Bukan berarti iptables lebih jelek, tapi untuk pemula seperti saya, PF lebih simpel.

Beberapa server untuk gateway koneksi ke jardiknas saya gunakan OpenBSD. Biasanya untuk DHCP server, NAT dan Firewall. Biasanya sih, di gateway satu ethernet untuk interface ke jardiknas (Public IP) dan satu ethernet lagi ke lokal/LAN.

Kemarin karena ada acara PPN, muncul kebutuhan menambah satu ethernet (xl2) lagi untuk interface ke access point. Tentu secara logical juga harus merupakan network yang berbeda. Pertama tentu interface yang baru (xl2) harus diberikan IP terlebih dulu. Buat file /etc/hostname.xl2 yang isinya: "inet 192.168.2.254 255.255.255.0 NONE" (tanpa tanda petik).

Berikut saya kudu update baris dhcpd_flags="xl1" menjadi dhcpd_flags="xl1 xl2" di /etc/rc.conf.local. (Well, sebenarnya ini ga perlu2 amat. Cukup dhcpd_flags="" karena pendefinisian interface untuk dhcp didefinisikan di /etc/dhcpd.interfaces).

Sekarang update /etc/dhcpd.interfaces dari "xl1" menjadi "xl1 xl2" (tanpa tanda petik). Karena koneksi dari LAN ke internet menggunakan NAT, maka update juga konfigurasi PF anda untuk NAT. Kira2 begini:

# contoh /etc/pf.conf untuk NAT
# interface with public IP
ext_if="xl0"
# LAN 1
cable_libnet="10.0.0.0/24"
# LAN 2
wireless_ppn="192.168.2.0/24"
nat on $ext_if from $cable_libnet to any -> ($ext_if)
nat on $ext_if from $wireless_ppn to any -> ($ext_if)

Berikutnya dan yang sempat bikin saya bingung adalah update file /etc/dhcpd.conf. Update menjadi begini:

# File konfigurasi /etc/dhcpd.conf
# Untuk 2 interface, masing2 dengan logical network yang berbeda

shared-network LOCAL-NET {
option domain-name "internallib";
option domain-name-servers 202.134.0.155, 192.168.4.254;
subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.254;
range 10.0.0.101 10.0.0.250;
}
}

shared-network LOCAL-NET2 {
option domain-name "internallib2";
option domain-name-servers 202.134.0.155, 192.168.4.254;
subnet 192.168.2.0 netmask 255.255.255.0 {
option routers 192.168.2.254;
range 192.168.2.21 192.168.2.250;
}
}

Berikutnya coba aktifkan semua perubahan. Sebenarnya ada cara untuk itu tanpa harus melakukan reboot. Cuma karena saya belum tahu dan toh network lagi kosong dan booting nya cepet, ya saya pilih saja reboot :D

Selamat mencoba :)
Tags: computer forensics, forensik komputer, freebsd, openbsd
3 comments
share

Data carving dengan Foremost Jun 22, '08 1:43 AM
for everyone

Pada tulisan saya terdahulu, sudah pernah dibahas tentang menginstall dcfldd. dcfldd berguna untuk membuat image dari suatu disk. Tutorial tentang penggunaan dcfldd untuk membuat image disk juga sudah dibahas. Opsional, juga dibahas teknik sanitasi harddisk yang akan digunakan untuk menyimpan disk image (hasil imaging) agar sesuai dengan best practice di dunia forensik komputer. Berikutnya adalah membahas, apa yang bisa kita lakukan dengan disk image yang sudah kita dapat.

Sedikit berbeda dengan tulisan-tulisan terdahulu yang berbasis Ubuntu Linux, percobaan kali ini dilakukan pada distro OpenSUSE 10.3. Saat tulisan ini dibuat (22 Juni 2008), OpenSUSE 11.0 sudah muncul 3 hari yg lalu (19 Juni 2008). Kenapa pakai OpenSUSE? Ya karena laptop utama saya ditinggal dikantor, dan dirumah yg tersedia laptop jadul dengan OpenSUSE. Selain itu juga karena ingin membiasakan diri dengan OpenSUSE agar tidak terlalu tergantung sama Ubuntu. Saat ini ada beberapa distro yg saya gunakan. Paling sering ya Ubuntu untuk kebutuhan Desktop. Untuk server mostly pakai centos. Dan gara-gara racun yang konsisten dari IMW dan teman-teman dari komunitas OpenSUSE Indonesia sekarang lagi intensif kembali menggunakan opensuse untuk desktop.

Sedikit berbeda dengan proses disk imaging pada Ubuntu, di OpenSUSE ada sedikit perbedaan:

1. flashdisk (1GB dengan satu partisi fat32) yg saya coba bikin image nya, di Ubuntu ke detect sdb dan sdb1 sedangkan di OpenSUSE akan ke detect sdb saja. Sehingga perintah proses physical imaging nya jadi sedikit berbeda. Dari "dcfldd if=/dev/sdb1 of=/home/hendro/evidence/flashdisk.img hash=md5, md5log=/home/hendro/evidence/flashdisk.md5sum" menjadi "dcfldd if=/dev/sdb of=/home/hendro/evidence/flashdisk.img hash=md5, md5log=/home/hendro/evidence/flashdisk.md5sum". Buat saya pribadi, saya lebih suka yang dilakukan oleh OpenSUSE. Kenapa? Karena jadi lebih gampang ngebedain apakah ini physical imaging atau logical imaging.

2. Untuk melakukan proses imaging, akses terhadap device sdb, di OpenSUSE hanya bisa dilakukan oleh root, sedangkan di Ubuntu bisa device bisa diakses oleh user biasa tanpa harus menjadi root.

oke, sekarang image telah dibuat dan diberinama flashdisk.img. Untuk bisa browsing melihat isi pada image, bisa dengan di restore terlebih dahulu atau mengakses langsung setelah di mount. Males banget kalau musti pakai metode restore. Ribet! Paling enak image nya langsung di mount dan di baca seolah sudah direstore. Untuk melakukannya:

1. Buat direktori /media/image yang menjadi titik mount untuk image yang akan di mount.

shell> mkdir /media/image

2. Lakukan proses mount image. Gunakan device loop dan akses image secara read-only.

shell> mount -o ro,loop /home/hendro/evidence/flashdisk.img /media/image/


Sudah selesai? belum lah. Berikutnya kita coba gunakan suatu tool command-line yang powerful, foremost. foremost tool untuk:
Foremost is a console program to recover files based on their headers, footers, and internal data structures. This process is commonly referred to as data carving. Foremost can work on image files, such as those generated by dd, Safeback, Encase, etc, or directly on a drive.

Gampang begini deh. foremost tool untuk recovery file berdasarkan header, footer dan struktur data internal. Karena nya foremost bisa digunakan untuk mencari file-file yang sudah terhapus (disengaja atau tidak). Bahkan sudah di format sekalipun. Kok bisa? Ya panjang ceritanya. Karena ketika file dihapus atau bahkan dibersihkan dari recycle bin sekalipun, biasanya file-nya tetap ada. yang dihapus hanyalah catatan dimana file tersebut berada (file allocation unit). Bahkan diformat sekalipun, sama saja. Yang bisa menghilangkan file bersih ya cuma dengan teknik sanitasi. Enaknya, foremost bisa melakukan file recovery langsung dari media disk atau image tanpa harus di mount terlebih dahulu.

Untuk instalasinya, download foremost, kemudian extrak. configure, compile dan install.

Tapi sebelumnya karena tehnik instalasi nya agak sedikit berbeda dari rata-rata software opensource, ada beberapa hal yang harus di-patch dan dilakukan manual. Sebagai root, buat direktori /usr/local/foremost-1.5.4 dan buat symlink ke /usr/local/foremost.

shell # mkdir -p /usr/local/foremost-1.5.4/bin
shell # mkdir -p /usr/local/foremost-1.5.4/etc
shell # mkdir -p /usr/local/foremost-1.5.4/man/man1
shell # ln -s /usr/local/foremost-1.5.4 /usr/local/foremost

Kembali sebagai user biasa.

shell>gunzip -d -c foremost-1.5.4.tar.gz | tar xvf -
shell> cd foremost-1.5.4/

Kemudian buka file Makefile dengan editor teks. Cari baris:

BIN = /usr/local/bin
MAN = /usr/local/man/man1
CONF= /usr/local/etc

dan ubah menjadi

BIN = /usr/local/foremost-1.5.4/bin/
MAN = /usr/local/foremost-1.5.4/man/man1/
CONF= /usr/local/foremost-1.5.4/etc/

lakukan proses kompilasi:

shell> make

kemudian sebagai root, lakukan:

shell # make install

Sekarang buat symlink ke binary foremost, manual, dan file konfigurasi:

shell # ln -s /usr/local/foremost/bin/foremost /usr/local/bin/foremost
shell # mkdir -p /usr/local/etc (lakukan langkah ini jika belum ada folder /usr/local/etc)
shell # ln -s /usr/local/foremost/etc/foremost.conf /usr/local/etc/foremost.conf
shell # ln -s /usr/local/foremost/man/man1/foremost.1 /usr/local/man/man1/foremost.1

Foremost adalah aplikasi yang bisa dikonfigurasikan dengan mudah untuk menambahkan kemampuannya mengenai file-file yang kita definisikan sendiri. By-default, built-in didalamnya foremost sudah mengenali file-file jpg, gif, png, bmp, avi, exe, mpg, wav, riff, wmv, mov pdf, ole (powerpoint, excel, word, access, starwriter), zip, rar, htm, dan masih banyak lagi. Silahkan baca manual untuk tahu lebih detail.

Sekarang kita mulai melakukan proses file recovery (data carving). Buat satu direktori yang akan menampung file-file hasil proses carving.

shell> mkdir /home/hendro/evidence/output

Kemudian lakukan proses carving:

shell> foremost -v -i /home/hendro/evidence/flashdisk.img -o /home/hendro/evidence/output

File hasil recovery nanti akan diletakkan di folder yang sesuai dengan jenis nya. Selamat mencoba!







Tags: computer forensics, forensik komputer, ubuntu, unix

Tidak ada komentar:

Posting Komentar