Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global

From OnnoCenterWiki
Jump to: navigation, search

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.

  1. DNS
  2. DHCP Server
  3. 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:

  1. jangan lupa menggunakan fasilitas syslog
  2. dalam syslog.conf tambahkan entry sbb:
  3. 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
  1. jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128
  2. 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