Optimalisasi Freebsd

download Optimalisasi Freebsd

If you can't read please download the document

description

Custom Kernel di FreeBSD

Transcript of Optimalisasi Freebsd

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.[pre]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[/pre]Ada 3 pokok bahasan utama dalam kasus ini.1. DNS2. DHCP Server3. IPF/IPNATlain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.1. 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 selanjutnya1.1. Cache-Only DNS ServerKonfigurasi 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.1.1.1 Konfigurasi dalam named.conf[pre]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";};[/pre]1.1.2 File-file database1.1.2.1 File localhost.rev:[pre]@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.[/pre]cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.1.1.2.2 File root.servers:File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.1.2. Internal-Root DNS ServerSeperti 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.boxReverse-Network: 1.168.192.in-addr.arpaServer address: 192.168.1.1Server name: my.domain.box1.2.1 Konfigurasi dalam named.conf:1.2.1.1 Konfigurasi awal (Cache-Only DNS Server):[pre]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";};[/pre]1.2.1.2 Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):[pre]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";};[/pre]1.2.2 File-file database1.1.2.1 File localhost.rev:Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.1.1.2.2 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 (#).[pre]@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.1my IN A 192.168.1.1host1 in cname myhost2 IN A 192.168.1.2host3 IN A 192.168.1.3......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.1.1.2.2 File domain.rev: Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24[pre]@TTL 3600@ IN SOA my.domain.box. root.domain.box. ( 3600,900,36000,3600 ) IN NS my.domain.box.1 IN PTR my2 IN PTR host13 IN PTR host2..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.1.1.2.2 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.[pre]@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 rootdomain.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 recordsmy.domain.box. IN A 192.168.1.1;daftar root server selanjutnya sama dengan default di file root.servers..[/pre]1.3. DNS Server in the sand-boxKonfigurasi 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 nonexistent1.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[pre] 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.[/pre]2. DHCP Server2.1. Instalasi dan SetupDengan /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 dhcpdDHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.dUntuk 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 kernelUntuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).3.1.1 Konfigurasi kernelcd /usr/src/sys/i386/confoption 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_CPUcpu I686_CPUmaxusers 32#kostumisasi kernel (lihat juga catatan tambahan)ident AAmakeoptions 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 90x60device vga0 at isa?options VGA_WIDTH90 #90 baris VGAoptions 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 EXT2FSoptions NTFS #NToptions EXT2FS #Linuxoptions 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 0xb0ffb0ffdevice ata0 at isa? port IO_WD1 irq 14 flags 0xb0ffb0ffdevice ata1 at isa? port IO_WD2 irq 15 flags 0xb0ffb0ffoptions SOFTUPDATES #penting untuk meningkatkan performansioptions 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 realtekdevice 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 dipasangpseudo-device bpf #Berkeley packet filter#Buang semua options USB yang hardwarenya tidak adadevice uhci # UHCI PCI->USB interfacedevice ohci # OHCI PCI->USB interfacedevice 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 onlineoptions IPFILTERoptions IPFILTER_LOGoptions IPFILTER_DEFAULT_BLOCK#untuk memperketat firewall bisa ditambahkan options dibawah ini:options IPSTEALTHoptions TCP_DROP_SYNFINoptions TCP_RESTRICT_RSToptions MROUTINGoptions RANDOM_IP_ID#beberapa options lainnya untuk memacu performaoptions NBUF=4096options 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 ]; thenCOPYRIGHT="/* * Copyright (c) $year * FreeBSD Inc. All rights reserved. * */"fi#menjadi violatedTYPE="mbakNunix"REVISION="1.31"BRANCH="BURIX"RELEASE=1.31-BURIXVERSION="${TYPE} ${RELEASE}"COPYRIGHT="/*** aa, [email protected], 1995-$year ***/"2.1.2 KompilasiAkhirnya kita kompile kernel sbb:su (kita harus root)cd /usr/src/sys/i386/confchflags 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>~/err3semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err33.2. Mengkonfigurasi IPF/IPNAT3.2.1. Konfigurasi rc.confKonfigurasi umum seperti biasa dilakukan di rc.conf3.2.2. Konfigurasi syslog.conf3.2.3. Tuning sysctl.confnet.inet.ip.forwarding=1net.inet.ip.fastforwarding=13.2.4. ipnat.rulesRules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPFCatatan:map artinya: remap SOURCE packet's IP addressrdr artinya: redirect DESTINATION of packet's IP addressTambahkan 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/32HTTP 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 tcp3.2.5. ipf.rulesDefault 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 allArtinya 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 fragsuntuk 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 statemeski 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 allKarena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum[pre]#UMUMpass in quick on lo0pass out quick on lo0#NBNSblock return-rst in quick proto tcp all port 136 >< 140block 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 20000pass out quick proto tcp/udp all keep state keep frags group 20000pass out quick proto icmp all keep state keep frags 20000pass 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 40000pass out quick proto tcp/udp all keep state keep frags 40000pass out quick proto icmp all keep state keep frags 40000pass out quick all 40000[/pre]3.2.5.1 Daftar alamat IP popupBerikut 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-compilation3.2.5.2 Daftar alamat IP berbahayaBerikut 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#nimda4.Lain-lainDalam 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 apache4.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 installDengan 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.4.2. Konfigurasi MySQL, PHP dan Apache4.2.1. 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 installTambahkan user mysql dengan ID misalkan = 3036pw add group mysql -g 3036pw 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:mysql4.2.2. PHPSebelumnya 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-ctypemake; make install 4.2.2. Apache/configure \ --enable-module=most \ --enable-shared=max \ --server-uid=www \ --server-gid=www \ --activate-module=src/modules/php4/libphp4.a make; make install 5. PenutupSesuai 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, [email protected]: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122