Difference between revisions of "Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global"
Onnowpurbo (talk | contribs) (New page: Sumber: aa, aa.delphi@yahoo.com URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122 Dalam tulisan ini akan dibahas (mudah-mudahan) secara cukup detail, bagaimana mengo...) |
|||
(7 intermediate revisions by the same user not shown) | |||
Line 16: | Line 16: | ||
==Topologi Network== | ==Topologi Network== | ||
− | + | <pre> | |
− | < | ||
=============================================== | =============================================== | ||
Line 41: | Line 40: | ||
__|__ __|__ __|__ __|__ | __|__ __|__ __|__ __|__ | ||
Host1 Host2 Host3 HostN | Host1 Host2 Host3 HostN | ||
− | </ | + | </pre> |
Line 50: | Line 49: | ||
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini. | lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini. | ||
− | |||
==DNS== | ==DNS== | ||
Line 75: | Line 73: | ||
==Konfigurasi dalam named.conf== | ==Konfigurasi dalam named.conf== | ||
− | + | <pre> | |
options { | options { | ||
directory "/etc/namedb"; | directory "/etc/namedb"; | ||
Line 94: | Line 92: | ||
file "root.servers"; | file "root.servers"; | ||
}; | }; | ||
− | + | </pre> | |
==File-file database== | ==File-file database== | ||
Line 127: | Line 125: | ||
==Konfigurasi awal (Cache-Only DNS Server):== | ==Konfigurasi awal (Cache-Only DNS Server):== | ||
− | + | <pre> | |
options { | options { | ||
directory "/etc/namedb"; | directory "/etc/namedb"; | ||
Line 142: | Line 140: | ||
file "localhost.rev"; | file "localhost.rev"; | ||
}; | }; | ||
− | + | </pre> | |
− | |||
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):== | ==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):== | ||
− | + | <pre> | |
forward; | forward; | ||
Line 164: | Line 161: | ||
file "box/root.box"; | file "box/root.box"; | ||
}; | }; | ||
− | + | </pre> | |
==File-file database== | ==File-file database== | ||
Line 176: | Line 173: | ||
Berisi daftar translasi name to address untuk seluruh host yang ada di domain domain.box, hati-hati character comment di sini adalah semi-colon (;) bukan hash (#). | Berisi daftar translasi name to address untuk seluruh host yang ada di domain domain.box, hati-hati character comment di sini adalah semi-colon (;) bukan hash (#). | ||
− | + | <pre> | |
@TTL 3600 | @TTL 3600 | ||
@ IN SOA my.domain.box. root.domain.box. ( | @ IN SOA my.domain.box. root.domain.box. ( | ||
Line 193: | Line 190: | ||
.. | .. | ||
host254 IN A 192.168.1.254 | host254 IN A 192.168.1.254 | ||
− | + | </pre> | |
cat.: Perhatikan bahwa dalam database ini kita perlu menambahkan entri untuk localhost, sehingga setiap rujukan atas localhost, dari manapun juga, akan diarahkan ke loopback masing-masing. | cat.: Perhatikan bahwa dalam database ini kita perlu menambahkan entri untuk localhost, sehingga setiap rujukan atas localhost, dari manapun juga, akan diarahkan ke loopback masing-masing. | ||
Line 199: | Line 196: | ||
==File domain.rev:== | ==File domain.rev:== | ||
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24 | Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24 | ||
− | + | <pre> | |
@TTL 3600 | @TTL 3600 | ||
@ IN SOA my.domain.box. root.domain.box. ( | @ IN SOA my.domain.box. root.domain.box. ( | ||
Line 211: | Line 208: | ||
.. | .. | ||
254 IN PTR host254 | 254 IN PTR host254 | ||
− | + | </pre> | |
cat.: Perhatikan bahwa tidak bisa dilakukan reverse untuk alias atau CNAME (canonical-name). Tidak diperbolehkan terdapat *dua entri yang sama* untuk *satu nomor address*, atau dengan kata lain, satu nomor adress tidak boleh merujuk kepada dua nama yang berbeda. Sebaliknya bisa saja terdapat dua nomor address untuk satu nama, misalnya jika kita memiliki dua atau lebih network card dalam satu host yang masing-masing memiliki IP sendiri. | cat.: Perhatikan bahwa tidak bisa dilakukan reverse untuk alias atau CNAME (canonical-name). Tidak diperbolehkan terdapat *dua entri yang sama* untuk *satu nomor address*, atau dengan kata lain, satu nomor adress tidak boleh merujuk kepada dua nama yang berbeda. Sebaliknya bisa saja terdapat dua nomor address untuk satu nama, misalnya jika kita memiliki dua atau lebih network card dalam satu host yang masing-masing memiliki IP sendiri. | ||
Line 218: | Line 215: | ||
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain. | File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain. | ||
− | + | <pre> | |
@TTL 3600 | @TTL 3600 | ||
@ IN SOA my.domain.box. root.domain.box. ( | @ IN SOA my.domain.box. root.domain.box. ( | ||
Line 236: | Line 233: | ||
;daftar root server selanjutnya sama dengan default di file root.servers | ;daftar root server selanjutnya sama dengan default di file root.servers | ||
.. | .. | ||
− | + | </pre> | |
==DNS Server in the sand-box== | ==DNS Server in the sand-box== | ||
Line 288: | Line 285: | ||
1.3.4 | 1.3.4 | ||
− | + | ||
Hentikan proses named yang saat itu berlangsung (dengan kill, killall atau top), lalu aktifkan kembali named (dengan argumen seperti named_flags diatas), atau reboot server. | Hentikan proses named yang saat itu berlangsung (dengan kill, killall atau top), lalu aktifkan kembali named (dengan argumen seperti named_flags diatas), atau reboot server. | ||
− | |||
2. DHCP Server | 2. DHCP Server | ||
Line 337: | Line 333: | ||
cd /usr/src/sys/i386/conf | cd /usr/src/sys/i386/conf | ||
option tambahan kernel kita dari GENERIC adalah sbb: | option tambahan kernel kita dari GENERIC adalah sbb: | ||
− | + | <pre> | |
#--- start kernel options --- | #--- start kernel options --- | ||
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda | #hapus semua options cpu kecuali model tertinggi sesuai cpu anda | ||
Line 497: | Line 493: | ||
options NBUF=4096 | options NBUF=4096 | ||
options NMBCLUSTERS=8192 | options NMBCLUSTERS=8192 | ||
− | |||
Line 528: | Line 523: | ||
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/ | /*** aa, aa.delphi@yahoo.com, 1995-$year ***/ | ||
" | " | ||
− | + | </pre> | |
2.1.2 Kompilasi | 2.1.2 Kompilasi | ||
Akhirnya kita kompile kernel sbb: | Akhirnya kita kompile kernel sbb: | ||
− | + | <pre> | |
su (kita harus root) | su (kita harus root) | ||
cd /usr/src/sys/i386/conf | cd /usr/src/sys/i386/conf | ||
Line 542: | Line 537: | ||
make 2>~/err2 && \ | make 2>~/err2 && \ | ||
(make install) 2>~/err3 | (make install) 2>~/err3 | ||
− | + | </pre> | |
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3 | semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3 | ||
Line 618: | Line 613: | ||
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum | Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum | ||
− | + | <pre> | |
#UMUM | #UMUM | ||
pass in quick on lo0 | pass in quick on lo0 | ||
Line 730: | Line 725: | ||
pass out quick proto icmp all keep state keep frags 40000 | pass out quick proto icmp all keep state keep frags 40000 | ||
pass out quick all 40000 | pass out quick all 40000 | ||
− | + | </pre> | |
Line 736: | Line 731: | ||
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya. | Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya. | ||
cat.: ganti kata "BLOK" dengan: "block return-rst in log first quick proto tcp from any to", juga nomor group disesuaikan dengan konfigurasi | cat.: ganti kata "BLOK" dengan: "block return-rst in log first quick proto tcp from any to", juga nomor group disesuaikan dengan konfigurasi | ||
− | + | <pre> | |
#HTTP block template | #HTTP block template | ||
Line 809: | Line 804: | ||
24.196.16.168#code_red | 24.196.16.168#code_red | ||
219.8.104.74#nimda | 219.8.104.74#nimda | ||
+ | </pre> | ||
4.Lain-lain | 4.Lain-lain | ||
Line 815: | Line 811: | ||
4.1. Squid | 4.1. Squid | ||
− | /configure --enable-ipf-transparent \ | + | /configure --enable-ipf-transparent \ |
− | #parameter lain yang perlu: | + | #parameter lain yang perlu: |
− | --prefix=/usr/local \ | + | --prefix=/usr/local \ |
− | --bindir=\${prefix}/sbin \ | + | --bindir=\${prefix}/sbin \ |
− | --libexecdir=\${prefix}/libexec \ | + | --libexecdir=\${prefix}/libexec \ |
− | --sysconfdir=\${prefix}/etc/squid \ | + | --sysconfdir=\${prefix}/etc/squid \ |
− | #parameter lain yang mungkin perlu: | + | #parameter lain yang mungkin perlu: |
− | --enable-storeio="ufs diskd null" \ | + | --enable-storeio="ufs diskd null" \ |
− | --enable-removal-policies="lru heap" \ | + | --enable-removal-policies="lru heap" \ |
− | #parameter tambahan: | + | #parameter tambahan: |
− | --localstatedir=\${prefix}/squid \ | + | --localstatedir=\${prefix}/squid \ |
− | --host=i686 \ | + | --host=i686 \ |
− | --disable-ident-lookups \ | + | --disable-ident-lookups \ |
− | --disable-wccp \ | + | --disable-wccp \ |
− | --enable-kill-parent-hack \ | + | --enable-kill-parent-hack \ |
− | --enable-time-hack \ | + | --enable-time-hack \ |
− | --with-pthreads | + | --with-pthreads |
− | make all; make install | + | make all; make install |
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package. | Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package. |
Latest revision as of 11:00, 27 July 2008
Sumber: aa, aa.delphi@yahoo.com URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122
Dalam tulisan ini akan dibahas (mudah-mudahan) secara cukup detail, bagaimana mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global, baik dinamik maupun statik (dial-up PPP, Cable-Modem atau DSL).
Model network seperti ini merupakan model yang sangat umum digunakan oleh warnet serta perusahaan kecil yang berniat untuk memberikan akses internet yang murah meriah bagi para karyawannya.
Teknik yang akan dibahas ini merupakan salah satu (mungkin merupakan yang terbaik) dibandingkan dengan alternatif lainnya seperti menggunakan hardware tertentu (modem dengan kapabilitas internet sharing), kelemahan: jumlah host sangat terbatas, antara 2 - 8, serta fleksibilitasnya sangat rendah, hampir tanpa menggunakan pengamanan dari intruder.
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.
Pilihan OS lainnya seperti Linux, OpenBSD atau Solaris bisa juga diperhitungkan, namun overall performance, kombinasi FreeBSD dan IPF adalah yang terbaik dinilai dari segi keamanan/security, performansi, dukungan resources (software, kompatibilitas, utilitas dan dokumentasi) yang tersedia, serta biaya yang dibutuhkan. Dengan FreeBSD mesin 386 tua milik kita disulap menjadi sebuah server yang powerful, robust dan tahan banting.
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.
Topologi Network
=============================================== _____ | ISP | |_____| DNS: 202.155.0.10, 202.155.0.20 | | 10.20.30.40 ___|___ |FreeBSD|........... |_______| Virtual-Host 192.168.2.1 my.domain.box| Gateway 192.168.1.1 | Firewall - IPF/IPNAT | DNS Server - BIND Network: | HTTP Server - Apache 192.168.1.0 | Proxy Server - Squid 255.255.255.0| SQL Server - MySQL | | _________|____...___ | | | | __|__ __|__ __|__ __|__ Host1 Host2 Host3 HostN
Ada 3 pokok bahasan utama dalam kasus ini.
- DNS
- DHCP Server
- IPF/IPNAT
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.
DNS
Untuk mengaktifkan name server jalankan /stand/sysinstal pilih menu Configure, kemudian Startup, lalu aktifkan (enable) named. Jika anda ingin menjalankan named dalam sandbox, isi named flags dengan argumen seperti dalam uraian butir 1.3.
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di
/etc/rc.conf: named_enable="yes" named_flags="" #lihat uraian selanjutnya
Cache-Only DNS Server
Konfigurasi DNS yang paling sederhana, yang kemungkinan besar akan berjalan lancar adalah menggunakan konfigurasi jenis cache-only DNS Server, artinya server DNS kita TIDAK memiliki otoritas atas satu zone-pun juga kecuali localhost dan loopback network 127.
Kekurangan dari model DNS Server seperti ini adalah, tentu saja, host-host dalam network kita tidak dapat saling mengenal. Hal ini bisa kita uji dengan perintah ping dari satu host terhadap host lainnya.
cat.: Dalam terminologi BIND, zone adalah suatu area network dimana sebuah server DNS memiliki otoritas atas pengaturan nama atas host-host yang ada di dalamnya.
Untuk network yang relatif sederhana seperti pada small-office atau di organisasi kecil, suatu zone umumnya hanya berupa satu domain, sementara di organisasi yang cukup besar, seperti di lingkungan kampus dan terutama di sebuah ISP, biasanya sebuah server DNS akan menangani suatu zone yang terdiri atas lebih dari satu domain.
Konfigurasi dalam named.conf
options { directory "/etc/namedb"; forwarders { // daftar DNS Server ISP kita misalnya: 202.155.0.10; 202.155.0.20; }; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; }; zone "." { type hint; file "root.servers"; };
File-file database
File localhost.rev:
@TTL 3600 @ IN SOA my.domain.box. root.domain.box. ( 3600,900,36000,3600 ) IN NS my.domain.box. 1 IN PTR localhost.domain.box.
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.
File root.servers:
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.
Internal-Root DNS Server
Seperti dapat dilihat pada gambar diatas, network kita termasuk kedalam network kelas C, dengan alamat 192.168.1.0 dan netmask 255.255.255.0. IP address network card pertama (if_1) ditetapkan oleh ISP, sementara if_2 dapat kita tentukan sendiri.
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:
Zone/domain: domain.box Reverse-Network: 1.168.192.in-addr.arpa Server address: 192.168.1.1 Server name: my.domain.box
Konfigurasi dalam named.conf:
Konfigurasi awal (Cache-Only DNS Server):
options { directory "/etc/namedb"; forwarders { // daftar DNS Server ISP: 202.155.0.10; 202.155.0.20; }; version "19.09.1969"; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; };
Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):
forward; zone "domain.box" { type master; file "box/domain.db"; }; zone "1.168.192.in-addr.arpa" { type master; file "box/domain.rev"; }; zone "." { type hint; //file "root.servers"; file "box/root.box"; };
File-file database
File localhost.rev:
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.
File domain.db:
Berisi daftar translasi name to address untuk seluruh host yang ada di domain domain.box, hati-hati character comment di sini adalah semi-colon (;) bukan hash (#).
@TTL 3600 @ IN SOA my.domain.box. root.domain.box. ( 3600,900,36000,3600 ) IN NS my.domain.box. localhost IN A 127.0.0.1 my IN A 192.168.1.1 host1 in cname my host2 IN A 192.168.1.2 host3 IN A 192.168.1.3 .. .. .. host254 IN A 192.168.1.254
cat.: Perhatikan bahwa dalam database ini kita perlu menambahkan entri untuk localhost, sehingga setiap rujukan atas localhost, dari manapun juga, akan diarahkan ke loopback masing-masing.
File domain.rev:
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24
@TTL 3600 @ IN SOA my.domain.box. root.domain.box. ( 3600,900,36000,3600 ) IN NS my.domain.box. 1 IN PTR my 2 IN PTR host1 3 IN PTR host2 .. 254 IN PTR host254
cat.: Perhatikan bahwa tidak bisa dilakukan reverse untuk alias atau CNAME (canonical-name). Tidak diperbolehkan terdapat *dua entri yang sama* untuk *satu nomor address*, atau dengan kata lain, satu nomor adress tidak boleh merujuk kepada dua nama yang berbeda. Sebaliknya bisa saja terdapat dua nomor address untuk satu nama, misalnya jika kita memiliki dua atau lebih network card dalam satu host yang masing-masing memiliki IP sendiri.
File root.box:
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.
@TTL 3600 @ IN SOA my.domain.box. root.domain.box. ( 3600,900,36000,3600 ) IN NS my.domain.box. ;domain "domain.box" didelegasikan langsung dari root domain.box. 9999999 IN NS my.domain.box. ;juga reverse dari class-C network 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box. ;glue records my.domain.box. IN A 192.168.1.1 ;daftar root server selanjutnya sama dengan default di file root.servers ..
DNS Server in the sand-box
Konfigurasi server DNS ini terutama ditujukan untuk memperketat sekuriti sistem network, prinsipnya sederhana, yaitu menjalankan servis DNS (named) oleh non-privilege user, untuk ini biasanya sengaja dibuat satu user khusus, tanpa fasilitas login. Sebenarnya untuk model network kita yang sederhana, ancaman sekuriti yang ada mungkin tidak akan terlalu serius. Konfigurasi ini bisa jadi sebagai opsi yang bisa diambil ataupun tidak.
1.3.1
Buat user baru untuk servis DNS, misalnya dengan nama: bind. User group: bind (default) User home: /usr/local/bind shell: no, nologin atau nonexistent
1.3.2
ganti atau tambahkan entri di /etc/rc.conf: named_flags="-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind"
Penjelasan atas argumen: -u dan -g: user serta group yang menjalankan servis DNS adalah "bind". -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai. -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind sebagai root direktorinya (chroot).
Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:
1.3.2.1
Servis named dan ndc biasanya menampilkan prosess-id-nya dibawah sub-direktori /var/run, karena root-directory-nya berubah, maka kita harus membuat secara manual subdirektori /var/run dibawah /usr/local/bind, jangan lupa ownershipnya harus disesuaikan menjadi bind:bind
1.3.2.1
Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:
[pre]
options { ...
directory "/"; //(atau mudahnya hapus saja option ini) pid-file "named.pid" //named.pid berada di direktori root yang baru
... }
[/pre]
1.3.3
Pindahkan atau salin /etc/namedb ke /usr/local/bind.
cat.: Perhatikan ownership dari /usr/local/bind, jika kita menyalinnya dengan tool atau file-manager seperti midnight- commander, biasanya ownership akan berubah dari bind ke root (atau privileged user pada saat itu), sehingga harus dikembalikan lagi dengan chown -r bind:bind /usr/local/bind.
Penyesuaian ownership ini juga berlaku untuk direktori baru dibawahnya yang kelak digunakan untuk file-file yang meminta akses-tulis seperti log, dump, stat, pid, dsb.
1.3.4
Hentikan proses named yang saat itu berlangsung (dengan kill, killall atau top), lalu aktifkan kembali named (dengan argumen seperti named_flags diatas), atau reboot server.
2. DHCP Server
2.1. Instalasi dan Setup
Dengan /stand/sysinstall, install package isc-dhcpd. Instalasi ini hanya sekedar mengekstrak program dan dokumentasi dhcpd, kita *harus* membuat sebuah file yaitu /var/db/dhcpd.lease secara manual: touch /var/db/dhcpd.leases. Edit file /usr/local/etc/dhcpd.conf dengan editor kesayangan anda, fi-ay :), dan buat alokasi dinamis IP addresses untuk network 192.168.1.0/24 misalnya:
- jangan lupa menggunakan fasilitas syslog
- dalam syslog.conf tambahkan entry sbb:
- local7* /var/log/dhcpd.log #awas: pake TAB, jangan pake spasi!
log-facility local7; authoritative; ddns-update-style ad-hoc;
option domain-name "domain.box";
subnet 192.168.1.0 netmask 255.255.255.0 {
option netbios-name-servers 192.168.1.3; #server NT kita option domain-name-servers 192.168.1.1; option routers 192.168.1.1; pool { range 192.168.1.10 192.168.1.190; }
}
2.2. Menjalankan dhcpd
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)
3.IPF/IPNAT
'Official' firewall dari FreeBSD adalah ipfw/natd, kelebihan ipfw terutama adalah kemampuan untuk mengatur kuota bandwith, sementara kelebihan ipf/ipnat yang paling utama adalah performansi. Juga menurut authornya, ipf benar-benar melakukan kontrol terhadap TCP/IP state, tidak cuma artifisial (sekedar mengecek kombinasi flags tertentu seperti SYN/ACK) seperti yang dilakukan dalam paket firewall lainnya.
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.
3.1. Kompilasi kernel
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).
3.1.1 Konfigurasi kernel
cd /usr/src/sys/i386/conf option tambahan kernel kita dari GENERIC adalah sbb:
#--- start kernel options --- #hapus semua options cpu kecuali model tertinggi sesuai cpu anda #cpu I386_CPU #cpu I486_CPU #cpu I586_CPU cpu I686_CPU maxusers 32 #kostumisasi kernel (lihat juga catatan tambahan) ident AA makeoptions KERNEL=AA #jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf #userconfig_script_load="YES" #kernel="/AA" #verbose_loading="YES" #autoboot_delay="3" #bootfile="AA,aa,kernel" #kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja #options GPL_MATH_EMULATE #Support for x87 emulation #console menggunakan teks mode 90x60 device vga0 at isa? options VGA_WIDTH90 #90 baris VGA options VESA #jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb: #font8x14="cp437-8x14" #font8x16="cp437-8x16" #font8x8="cp437-8x8" #allscreens_flags="VGA_90x60" #hapus splash screen/screen saver. #pseudo-device splash #selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS options NTFS #NT options EXT2FS #Linux options NFS_NOSERVER #Membuang kode NFS #options UNION #UFS bisa digabung #options NULLFS #null #options UMAPFS #UID Map FileSystem #options KERNFS #kernel #options SMBFS #SMB/File Sharing ala Windows #options PROCFS #memetakan Process ID # Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk # untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff device ata0 at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff device ata1 at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff options SOFTUPDATES #penting untuk meningkatkan performansi options ATA_STATIC_ID #Static device numbering #hapus saja tape-drive. #device atapist # ATAPI tape drives # jika menggunakan APM, sebaiknya tidak. #device apm0 at nexus? disable flags 0x20 # Advanced Power Management # PCCARD (PCMCIA) support, buang saja #device card #device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000 #device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable #Buang saja serial 2 dan 3 #device sio2 at isa? disable port IO_COM3 irq 5 #device sio3 at isa? disable port IO_COM4 irq 9 #Buang juga koneksi lewat Parallel port #device plip # TCP/IP over parallel #device ppi # Parallel port interface device #device vpo # Requires scbus and da #Buang semua entri ethernet yang tidak ada #saya cuma punya 3Com 3C509, 3C905 dan realtek device ep # 3Com 3C509 (10 MBps) device xl # 3Com 3c905 (10/100) device rl # RealTek 8129/8139 (10/100) #device de # Realtek lama (10) #Banyak software yang tergantung kepada bpf #(discouraged), tapi sebaiknya tetap dipasang pseudo-device bpf #Berkeley packet filter #Buang semua options USB yang hardwarenya tidak ada device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device usb # USB Bus (required) device ugen # Generic #device uhid # "Human Interface Devices" #device ukbd # Keyboard #device ulpt # Printer #device umass # Disks/Mass storage - Requires scbus and da #device ums # Mouse #device uscanner # Scanners # USB Ethernet, requires mii #device aue # ADMtek USB ethernet #device cue # CATC USB ethernet #device kue # Kawasaki LSI USB ethernet #Soundcard (generik) device pcm #jangan lupa nanti untuk membuat entri2 sound #(audio, mixer, sequencer dll) di /dev: #cd /dev #./MAKEDEV snd #Intel PIIX4 Power Management Unit #device smbus #device intpm #Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :) #Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi #bisa dibuang #options SCSI_DELAY=8000 #Delay (in ms) before probing SCSI # SCSI Controllers #... # SCSI peripherals #... #Jika menggunakan firewall bawaan FreeBSD: #options IPFIREWALL #options IPDIVERT #options IPFIREWALL_VERBOSE #options IPFIREWALL_VERBOSE_LIMIT=32 #options IPFIREWALL_DEFAULT_TO_ACCEPT #Jika anda memasang bandwith quota tambahkan entri dibawah ini #options IPDIVERT #digunakan juga oleh ipfw/natd #options DUMMYNET #options QUOTA #Konfigurasi ipfilter/ipnat ini yang kita pakai #cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan #lagi options IPDIVERT seperti yang terdapat dalam #beberapa dokumentasi online options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK #untuk memperketat firewall bisa ditambahkan options dibawah ini: options IPSTEALTH options TCP_DROP_SYNFIN options TCP_RESTRICT_RST options MROUTING options RANDOM_IP_ID #beberapa options lainnya untuk memacu performa options NBUF=4096 options NMBCLUSTERS=8192 #catatan tambahan: #Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini #di /usr/src/sys/conf/newvers.sh #dari original #TYPE="FreeBSD" #REVISION="4.3" #BRANCH="RELEASE" #RELEASE=4.3-RELEASE #VERSION="${TYPE} ${RELEASE}" if [ X"$COPYRIGHT" = X ]; then COPYRIGHT="/* * Copyright (c) $year * FreeBSD Inc. All rights reserved. * */" fi #menjadi violated TYPE="mbakNunix" REVISION="1.31" BRANCH="BURIX" RELEASE=1.31-BURIX VERSION="${TYPE} ${RELEASE}" COPYRIGHT=" /*** aa, aa.delphi@yahoo.com, 1995-$year ***/ "
2.1.2 Kompilasi
Akhirnya kita kompile kernel sbb:
su (kita harus root) cd /usr/src/sys/i386/conf chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg) /usr/sbin/config -r AA && \ cd ../../compile/$1 && \ (make depend) 2>~/err1 && \ make 2>~/err2 && \ (make install) 2>~/err3
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3
3.2. Mengkonfigurasi IPF/IPNAT
3.2.1. Konfigurasi rc.conf Konfigurasi umum seperti biasa dilakukan di rc.conf
3.2.2. Konfigurasi syslog.conf
3.2.3. Tuning sysctl.conf net.inet.ip.forwarding=1 net.inet.ip.fastforwarding=1
3.2.4. ipnat.rules Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF
Catatan: map artinya: remap SOURCE packet's IP address rdr artinya: redirect DESTINATION of packet's IP address
Tambahkan baris berikut untuk mengemap :) port ftp
map rl1 192.168.1.0/24 -> 0/32 proxy port 21 ftp/tcp map rl1 192.168.1.0/24 -> 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535 map rl1 192.168.1.0/24 -> 0/32
HTTP request di redirect ke server
rdr rl1 0/32 port 80 -> 192.168.1.1 port 80 tcp
- jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128
- rdr rl0 0.0.0.0/0 port 80 -> 192.168.1.1 port 3128 tcp
3.2.5. ipf.rules
Default konfigurasi adalah block in all, block out all artinya dengan konfigurasi seperti ini server kita benar-benar jadi mahluk egois, tidak mau melihat kanan-kiri sedikitpun :)
konfigurasi paling sederhana yang bisa berjalan adalah:
pass in all pass out all
Artinya sama saja dengan tidak memasang firewall.
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:
pass out quick all keep state keep frags
untuk ipf ver 4.32 (FreeBSD 4.5+) rule "keep" tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:
pass out quick proto tcp/udp all keep state keep frags pass out quick proto icmp all keep state keep frags pass out quick all
Dengan menggunakan keep state, kita tinggal membuka port yang kita perlukan saja, lalu-lintas koneksi yang terkait dengan servis/port tsb selanjutnya ditangani oleh ipf, misalnya:
block in quick all pass out quick proto icmp all icmp-type echo keep state
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo. pada protokol tcp/udp lainnya, pembukaan gerbang masuk ini mencakup juga control messages berupa icmp atau bahkan segmen IP dengan nomor port lainnya yang berbeda, yang masih terkait dalam koneksi tersebut.
catatan tambahan: Sebaiknya keep-state jangan terlalu di-obral supaya tidak menghabiskan resources atau bahkan membuka celah security berupa Denial of Service (DoS) Attack, lebih tepat kiranya jika hanya protokol TCP dengan SYN Flag serta port-port tertentu saja yang dipasangi keep-state seperti FTP (21), SSH (22), SMTP (25), DNS (53), DHCP (67/58), serta ICMP echo. Jika hanya permintaan koneksi (ditandai dengan SYN flag) dari servis/port tertentu yang dibuka, jalur masuk semua ditutup (block in all), port FTP mau tidak mau harus diberi keep state karena setelah koneksi terjadi dia akan membuka port/jalur baru (UDP port 20, atau TCP dengan unassigned [high number] port) untuk komunikasi data.
pass out quick proto tcp flags S keep state pass out quick proto udp port = 53 keep state pass out quick proto icmp all icmp-type echo keep state pass out quick all
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum
#UMUM pass in quick on lo0 pass out quick on lo0 #NBNS block return-rst in quick proto tcp all port 136 >< 140 block return-icmp-as-dest(port-unr) in quick all port 136 >< 140 #============================================================ #if_1 adalah eksternal interface (yang terhubung ke internet) #============================================================ #INWARD #------ block in quick on if_1 all head 10000 #Start group 10000 block in quick all with opt lsrr group 10000 #block loose src routing block in quick all with opt ssrr group 10000 #block strict src routing block in quick proto tcp all with frags group 10000 #block no. ip address yang diketahui berbahaya, bervirus dsb. #block in quick proto tcp/udp from Danger_IPs group 10000 #(lihat daftar 3.2.5.2) pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu #Start group 11000 #pass in log first quick proto icmp all icmp-type echo group 11000 pass in quick proto icmp all icmp-type echorep group 11000 pass in quick proto icmp all icmp-type unreach group 11000 pass in quick proto icmp all icmp-type redir group 11000 pass in quick proto icmp all icmp-type timex group 11000 block in return-icmp-as-dest(host-unr) in quick all group 11000 #End group 11000 #__________________________________________________ block return-rst in quick proto tcp all group 10000 block return-icmp-as-dest(port-unr) in quick all group 10000 #End group 10000 #OUTWARD bebas #------------- block out quick on if_1 all head 20000 pass out quick proto tcp/udp all keep state keep frags group 20000 pass out quick proto icmp all keep state keep frags 20000 pass out quick all 20000 #=========================================================== #if_2 adalah internal interface (yang terhubung ke intranet) #=========================================================== #INWARD #------ block in quick on if_2 all head 30000 #Start group 30000 #Test User, tahan uninitialized host block in quick from !192.168.1.1/24 to any head 31000 group 30000 #Start group 31000 #Unknown User, harus daftar dhcp dulu pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000 block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown #HTTP #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya. block in log first quick all port = http head 32000 group 31000 #Start group 32000 #HTTP block template: popups, junker, spammer etc. dilarang! block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS! block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&spy! #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies) #aman... pass in log first quick proto tcp all flags S keep state keep frags group 32000 #HTTP-TCP only, yg lainnya di-blok by default! block return-rst in quick proto tcp all group 32000 #End group 32000 #End group 31000 #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp #Tahan permintaan DNS keluar block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000 pass in log first quick proto tcp/udp all port < 1024 keep state group 30000 #regular ports pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL #__________________________________________________ #lainnya secara default di-blok block return-rst in quick proto tcp all group 30000 block return-icmp-as-dest(port-unr) in quick all group 30000 #End group 30000 #OUTWARD bebas #------------- block out quick on if_2 all head 40000 pass out quick proto tcp/udp all keep state keep frags 40000 pass out quick proto icmp all keep state keep frags 40000 pass out quick all 40000
3.2.5.1 Daftar alamat IP popup
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.
cat.: ganti kata "BLOK" dengan: "block return-rst in log first quick proto tcp from any to", juga nomor group disesuaikan dengan konfigurasi
#HTTP block template #Hall Of Fames - top of sh*ts!- BLOK 64.38.238.0/18 group 42000 #popups.ini BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[] BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com BLOK 207.68.178.251/24 group 42000 #ads.msn.com BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com BLOK 207.68.171.254/24 group 42000 #adobe-spy BLOK 207.68.172.253/24 group 42000 #adobe-spy BLOK 207.68.173.254/22 group 42000 #adobe-spy BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com BLOK 209.225.4.72/24 group 42000 #advertising.com #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih #dangerous! BLOK 66.28.38.3/24 group 42000 # BLOK 209.50.252.100/24 group 42000 #4bigcash.com BLOK 209.5.187.10/24 group 42000 #freepopups.com #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr #End dangerous #from popups.ini BLOK 12.42.235.3/24 group 42000 #popups.ini #...long-list... BLOK 216.95.228.15/24 group 42000 #popups.ini #end-from popups.ini #new compilation #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah BLOK 63.167.204.56/24 group 42000 #7adpower.com #...long-list... BLOK 128.11.42.61/24 group 42000 #burstnet.com #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com #end-new compilation #old compilation BLOK 12.90.179.10/16 group 42000 BLOK 63.215.149.25/24 group 42000 #porno BLOK 192.150.10.120/16 group 42000 #adobe spyier!!! #...long-list... BLOK 216.218.220.42/24 group 42000 #servergold.com - porn #beware! Namezeroes are always peeking our nbns port! BLOK 216.34.13.245 port != 80 group 42000 #end-old-compilation 3.2.5.2 Daftar alamat IP berbahaya Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)). penggunaannya dalam ipf.rules misalnya: block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda 4.47.218.144#code_red #internal INDOSAT NET-10.X.X.X 10.1.8.108#nimda 10.6.2.4#nimda #...long-list... 10.6.18.68#nimda #end: internal INDOSAT NET-10.X.X.X 24.73.201.22#code_red 24.80.172.120#code_red #...long-list... 24.196.16.168#code_red 219.8.104.74#nimda
4.Lain-lain Dalam bagian ini diasumsikan bahwa kita akan menginstal program dari source kodenya, yang diekstrak ke direktori /usr/local/src, mis.: tar -xpvzf apache.tgz -C /usr/local/src. bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv apache-1.1.23pl8 apache
4.1. Squid
/configure --enable-ipf-transparent \
#parameter lain yang perlu: --prefix=/usr/local \ --bindir=\${prefix}/sbin \ --libexecdir=\${prefix}/libexec \ --sysconfdir=\${prefix}/etc/squid \
#parameter lain yang mungkin perlu: --enable-storeio="ufs diskd null" \ --enable-removal-policies="lru heap" \
#parameter tambahan: --localstatedir=\${prefix}/squid \ --host=i686 \ --disable-ident-lookups \ --disable-wccp \ --enable-kill-parent-hack \ --enable-time-hack \ --with-pthreads
make all; make install
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package. Kemudian file logs dan cache di direktori /usr/local/etc/squid di chown nobody:nogroup (atau sesuai dengan usernya jika telah dibuat user untuk squid, seperti user mysql dibawah). Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.
Konfigurasi MySQL, PHP dan Apache
MySQL
/configure \ --localstatedir=/var/db/mysql \ --with-unix-socket-path=/var/run/mysql.sock \ --host=i686 \ --enable-assembler \ --with-libwrap \ --with-berkeley-db \ --with-named-z-lib \ --with-mysqld-ldflags=-all-static \ --with-client-ldflags=-all-static \ --without-debug \ --without-bench \ --without-docs \ --without-readline make; make install
Tambahkan user mysql dengan ID misalkan = 3036
pw add group mysql -g 3036 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c "MySQL"
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql: chown -R /var/db/mysql mysql:mysql
PHP
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan ./configure (plain).
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.
/configure \ --build=i686 \ --prefix=/usr/local \ --with-mysql=/usr/local \ --with-apache=../apache \ --with-pcre-regex=/usr/local \ --with-mcrypt \ --with-zlib \ --with-ftp \ --enable-track-vars \ --enable-ctype
make; make install
Apache
/configure \ --enable-module=most \ --enable-shared=max \ --server-uid=www \ --server-gid=www \ --activate-module=src/modules/php4/libphp4.a
make; make install
Penutup
Sesuai dengan tujuan utama tulisan ini, beberapa sub-sistem mungkin hanya sedikit atau sama sekali tidak dibahas, bagian-bagian tersebut dianggap sesuai dengan instalasi default. Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.
aa, aa.delphi@yahoo.com
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122