28 Desember 2008

Pengantar Menejemen Bandwidth dengan ALTQ

Dalam sebuah menejemen bandwidth ada 2 Prinsip yang menjadi dasar.
Pertama adalah bagaimana memaksimalkan penggunaan bandwidth yang dimiliki, misalkan mempunyai bandwidth 128Kbit, maka bagaimana dengan bandwidth 128Kb dapat digunakan secara maksimal dengan penggunaan banyak user maupun beberapa user, siang hari atau malam hari. dalam hal ini biasa digunakan pada sisi client misalkan kampus, warnet, MPG, corporate atau pelanggan rumah.
Kedua adalah bagaimana memberikan jaminan bandwidth yang sesuai dengan yang ditetapkan. misalkan bandwidth 128Kbit maka harus benar-benar 128Kbit boleh lebih tapi tidak boleh kurang, atau yang disebut dengan QoS (Quality of Service). dalam hal ini banyak di terapkan oleh provider.
Dalam menejemen bandwidth seperti kebutuhan di atas, ada beberapa teknik yang bisa di terapkan diantaranya adalah :
ALTQ (Alternate Queueing) dan CBQ (Class Base Queue) dengan cara seperti ini akan sangat cocok bila di terapkan pada sisi client, dimana client mempunya beberapa network/service yang masing-masing network/service mempunyai garansi bandwidth tapi memungkinkan untuk meminjam bandwidth network/service lain bila bandwidth network/service tersebut tidak terpakai atau idle.
ALTQ (Alternate Queueing) dan HFSC (Hierarchical Fair Service Curve) dengan cara seperti sebuah network/service akan di garansi dengan sebuah bandwidth dengan mendifinisikan realtime dan option lainnya seperti upperlimit dan linkshare. HFSC akan sangat cocok di terapkan pada sebuah provider agar menjamin bandwidth yang mengalir ke client benar-benar sesuai dengan besarnya bandwidth pelanggan.
disamping kedua teknik di atas dapat ditambah kan options-options sebagai berikut:
RED (Random Early Detection), RIO (RED In Out), dan PRIQ (Prioritas). Prioritas akan mempunyai nilai 1-7 dimana 1 adalah prioritas terbesar. dengan opsi PRIQ seorang admin dapat dengan mudah mendahulukan sebuah network/service untuk memperoleh bandwidth.
ada beberapa hal yang harus di perhatikan jika menggunakan ALTQ:
  1. PF dan ALTQ sudah terintegrasi dengan kernel FreeBSD 5.3 ke atas, untuk shapping masing-masing versi FreeBSD mempunyai sedikit perbedaan script, tapi untuk logging, blocking, forwarding, translating dan passing relatif sama.
  2. Interface yang hadap internet dianggap upstream dan interface yang hadap client dianggap downstream (FreeBSD 5.x) pada FreeBSD 6.x dan FreeBSD 7.x ada sedikit perbedaan.
  3. Beri options quick.
  4. Mesin limiter harus fungsi routing bukan translating.
  5. Beri nilai default minimal, 8Kbit
  6. Mendifinisikan variable akan lebih memudahkan editing dan perubahan struktur scripts.
  7. Urutan file pf adalah variable, options, ALTQ, Translating, Forwarding, Blocking dan Passing. (tidak boleh terbalik)
  8. Beri queue limit lebih panjang, default bernilai 50
  9. Agar memudahkan editing, penulisan script dibuat grouping atau bertingkat.
  10. Gunakan Interface yang mempunyai buffer yang besar seperti Intel (fxp).
  11. Atau menambah buffer interface dengan merubah nilai default buffer sebuah interface, (sysctl -w kern.ipc.maxsockbuf=(integer).
  12. Cek scripts sebelum loading file (pfctl -nf /etc/pf.conf)
  13. jangan lupa "dipantau".


Selengkapnya...

11 Desember 2008

Membangun Firewall dengan IPFW

IPFW atau IP Firewall adalah salah satu service yang dimiliki oleh Operating System FreeBSD untuk membangun sebuah firewall. firewall ini bekerja pada layer 3 lapisan OSI (Open System Interconnection).
salah satu ciri dari firewall dengan IPFW adalah dalam pembacaan rule-nya akan di baca dari atas kebawah, bila ada traffick yang sudah sesuai dengan rule firewall dibagian atas, maka sistem akan mengeksekusi tanpa membaca atau membandingkan dengan rule di baris berikutnya. lalu bagaimana untuk membangun firewall ini ?

Untuk mengaktifkan IPFW tentunya kernel FreeBSD harus support IPFW dengan menambahkan options sebagai berikut:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
options IPDIVERT


tambahkan pada /etc/rc.conf

firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_logging="YES"
natd_enable="YES"
natd_interfaces=""
natd_program="/sbin/natd"

Berikut adalah format IPFW:

CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFULL
  1. CMD = /sbin/ipfw
  2. RULE_NUMBER = 0001, 0002, 0003, 0004 dst
  3. ACTION = pass, permit, allow, accept, deny atau drop
  4. LOGGING = optional
  5. SELECTION= tcp, udp atau icmp (daftar protokol ada di /etc/protocols). from src to dst, port number, in out, via IF.
  6. STATEFULL = optional

Seperti sudah di jelaskan di posting sebelumnya, bahwa fungsi firewall adalah sebagai berikut.

contoh passing

/sbin/ipfw add 0001 pass all from any to any
/sbin/ipfw add 0002 pass icmp from any to any estabilished
/sbin/ipfw add 0003 pass tcp from 192.168.1.0/24 to any 21 keep-state
/sbin/ipfw add 0004 pass tcp from any to me 21 in via fxp0

contoh blocking

/sbin/ipfw add 0001 deny all from any to any
/sbin/ipfw add 0002 deny icmp from any to any estabilished
/sbin/ipfw add 0003 deny tcp from 192.168.1.0/24 to any 21 keep-state
/sbin/ipfw add 0004 deny tcp from any to me in via fxp0

contoh logging, default logging akan di simpan di /var/log/security

contoh translating

/sbin/ipfw add divert natd all from any to any

contoh shaping

/sbin/ipfw add pipe 10 ip from any to 192.168.1.1 via fxp0
/sbin/ipfw pipe 10 config bw 128Kbit/s
/sbin/ipfw add pipe 20 ip from 192.168.1.1 to any via fxp0
/sbin/ipfw pipe 20 config bw 64Kbit/s


Selengkapnya...

09 Desember 2008

Konsep Firewall

Firewall adalah satu seperangkat software dan hardware yang bertugas menyaring paket-paket yang lewat sesuai dengan aturan yang dimilikinya. firewall biasanya terpasang antara jaringan internet dengan jaringan local, atau juga antara jaringan local dengan jaringan local. dalam proses filterisasi, firewall mempunyai dua macam aturan yang dimiliki, yaitu exclusive firewall dan inclusive firewall. exclusive firewall yaitu firewall yang mengizinkan semua paket traffick yang lewat kecuali paket-paket yang sesuai dengan rulenya (default-allow). sedangkan inclusive firewall adalah menolak semua paket traffick yang lewat kecuali paket-paket yang sesuai dengan rulenya (default-deny).

Dalam penerapan sesungguhnya, inclusive firewall jauh lebih aman dari pada exclusive firewall. tapi dalam proses pembuatan aturan juga jauh lebih sulit, karena harus teliti dalam pembuatan rule terutama unregistered port dan proses-proses pasif. firewall dapat dibangun pada layer 3, 5 dan 7 pada lapisan OSI.
Komponen firewall adalah sebagai berikut :
  1. Passing.
  2. Blocking.
  3. Translating.
  4. Shaping.
  5. Forwarding.
  6. Logging.

untuk melaksanakan fungsi di atas firewall selalu membaca beberapa parameter yang menjadi bagian rulenya, adapun parameter tersebut adalah:

  1. Alamat (IP) asal
  2. Alamat (IP) tujuan
  3. Port asal (/etc/services)
  4. Port tujuan (/etc/services)
  5. Interface
  6. Protocol (/etc/protocols)
  7. Options

Pada Operating System FreeBSD, firewall (layer 3) dapat dibangun dengan IPFW (IP Firewall), IPF (IP Filter) dan PF (Paket Filter). IPFW adalah firewall yang merupakan bawaan dari FreeBSD, sedangkan IPF adalah asli bawaan NetBSD dan FP adalah bawaan dari OpenBSD. PF ada dalam kernel FreeBSD mulai FreeBSD 5.3 dan sesudahnya.

Untuk masing-masing firewall diatas, Insya Allah akan dibahas pada posting selanjutnya.

Selengkapnya...

06 Desember 2008

Membuat IP Tunnel

Untuk membuat IP tunnel di FreeBSD pertama yang harus dipastikan adalah kernel yang mendukung ip tunneling. pada module kernel harus ada script "device gif" dan "device tun". IP tunnel bekerja seperti halnya sebuah terowongan pada jalur kendaraan umum.
berikut adalah konfigurasi IP tunneling.

coba lihat gambar berikut.



dari gambar di atas dapat dikonfigurasi sebagai berikut :

Server-1
# vi /etc/rc.local

#!/bin/sh

ifconfig gif0 create

ifconfig gif0 tunnel 10.10.1.2 10.10.2.2

ifconfig gif0 192.168.1.1 192.168.2.1

/sbin/route add -net 192.168.2.0/24 192.168.2.1


server-2
#vi /etc/rc.local

#!/bin/sh

ifconfig gif0 create

ifconfig gif0 tunnel 10.10.2.2 10.10.1.2

ifconfig gif0 192.168.2.1 192.168.1.1

/sbin/route add -net 192.168.1.0/24 192.168.1.1


kemudian, jangan lupa mereboot system dan cek dengan ifconfig

Server-1
#ifconfig
gif0: flags=8051
mtu 1280
tunnel inet 10.10.1.2 --> 10.10.2.2
inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffff00


Server-2
#ifconfig
gif0: flags=8051 mtu 1280
tunnel inet 10.10.2.2 --> 10.10.1.2
inet 192.168.2.1 --> 192.168.1.1 netmask 0xffffff00



Selengkapnya...

03 Desember 2008

Menghitung Kebutuhan Memori pada Squid

Memori besar adalah kebutuhan dasar sebuah mesin yang menjalankan service proxy, (seperti sandang, pangan dan papan) pada manusia. karena akan sangat erat sekali dengan performa dan pengambilan object pada mesin proxy.
Memori pada mesin proxy digunakan sebagai in-transit object, hot object dan negative-cached. in-transit memori adalah object dari internet yang baru masuk ke mesin proxy dengan prioritas tertinggi, hot object adalah object yang paling banyak di ambil di dalam disk cache sedangkan negative-cached adalah error objects. in-transit objects, hot-objects dan negative-cached di letakkan di memori agar mempercepat respon time ketika ada permintaan dari client.
pada squid , pendifinisian penggunakan memori ada pada tag "cache_mem" defaultnya bernilai 8 MB. tapi ingat !!, cache_mem bukanlah jumlah maksimal penggunaan memori dalam sebuah proses squid, tapi cache_mem digunakan sebagai in-transit object, hot object dan negative-cached. tag cache_mem akan berhubungan langsung dengan tag lain seperti "maximum_object_size_in_memory" dan "memory_replacement_policy".
lalu bagaimana dengan kebutuhan memori sesungguhnya dalam proses squid?, berikut adalah penjelasannya.
  1. Setiap 1 GByte cache disk memerlukan 10 MB Memori. besarnya cache disk mengacu tag cache_dir pada squid.conf.
  2. Jumlah cache_mem yang di definisikan di squid.conf
  3. Plus 20 Mb additional overhead
jadi misalakan cache_disk 20 GB, cache_mem 128 MB plus 20 MB additional overhead, maka kebutukan memori untuk proses squid adalah 200 MB + 128 MB + 20 MB = 384 Mb. itu baru untuk proses squid belum kebutuhan sistem operasi dan service yang lain seperti snmp, named dan lain-lain. tentunya membutuhkan memori yang besar bila sebuah mesin dengan service proxy. semua itu bisa di cek dengan "top".

Selengkapnya...

Konsep Parent dan Sibling pada Squid

Pada sebuah organisasi jaringan yang besar dengan menggunakan beberapa buah server proxy dengan squid sebagai softwarenya, tentunya administrator jaringan dapat membangun sebuah hirarki proxy. hirarki proxy tersebut membentuk sebuah jaringan menyerupai sebuah organisasi.
pada hirarki proxy ada 2 buah istilah, yaitu parent dan sibling. apa itu parent apa itu sibling.
  1. Parent adalah type proxy yang mempunyai kewajiban mengambil object dari internet dan menyerahkan ke client apabila object tersebut belum ada pada disk cache, apabila object yang di minta sudah ada dalam memori atau di disk cache, maka object akan langsung di serahkan ke client.
  2. Sibling adalah type proxy yang hanya mempunyai kewajiban menyerahkan object , jika object yang diminta ada dalam memori atau disk cache proxy tersebut.
Hubungan parent dan sibling menggunakan komunikasi tag http_port dan icp_port. default http_port 3128 dan icp_port 3130, tapi kebanyakan para administrator jaringan mengganti http_port 8080 dan icp_port 3130.

pada squid.conf.default, tag ini adalah:
cache_peer hostname type port_http port_icp options

Berikut adalah options-options hirarki proxy
  1. proxy-only = object yang sudah diambil pada parent atau sibling tidak akan di simpan di dalam disk cache.
  2. weight=(numeric) adalah apabila mempunyai beberapa parent atau sibling dan weight digunakan untuk menentukan prioritas, default bernilai 1.
  3. no-query = proxy tidak akan mengirim icp query ke peer.
  4. round-robin = apabila terdiri dari beberapa peer.
  5. no-delay = apabila parent menggunakan delay-pool, dengan options ini delay-pool tidak akan mempengaruhi client.
  6. login=user:password = bila peer parent menggunakan autentikasi.
  7. masih banyak lagi
contoh kasus:

pada gambar diatas masing-masing proxy adalah parent bagi client-cliennya. bila proxy.wetasem.com jadi parent proxy2.wetasem.com, maka konfigurasi squid.conf adalah sebagai berikut :

squid.conf (proxy.wetasem.com)

http_port 8080
icp_port 3130
acl asem src proxy2.wetasem.com
http_access allow asem
http_access deny all
icp_access deny asem
icp_access deny all
miss_access allow asem
miss_access deny all

squid.conf (proxy2.wetasem.com)
cache_peer proxy.wetasem.com parent 8080 3130

tapi bila proxy.wetasem.com sebagai sibling proxy2.wetasem.com, maka konfigurasinya adalah sebagai berikut:

squid.conf (proxy.wetasem.com)
http_port 8080
icp_port 3130
acl asem src proxy2.wetasem.com
http_access allow asem
http_access deny all
icp_access allow asem
icp_access deny all
miss_access deny asem
miss_access deny all

squid.conf (proxy2.wetasem.com)
cache_peer proxy.wetasem.com sibling 8080 3130

selesai, tinggal memantau access.log


Selengkapnya...

Menghitung Disk Cache

Cache disk adalah bagian dari partisi sebuah mesin yang khusus dialokasikan untuk menyimpan cache. biasanya untuk kebutuhannya adalah hardisk dengan ukuran sekitar 20GByte dengan rpm yang besar. performa mesin akan lebih baik menggunakan 3 buah hardisk dengan ukuran kecil daripada 1 hardisk dengan ukuran yang besar. pada squid, cache disk di definisikan dengan tag "cache_dir". adapun format defaultnya adalah : "cache_dir Type Directory-Name Mbyte L1 L2 [options]"
keterangan:
  1. cache_dir adalah tag yang mendefinisikan directory cache.
  2. Type adalah jenis penyimpanan sistem, defaultnya adalah ufs. jika akan menggunakan sistem penyimpanan jenis lain seperti diskd atau aufs maka perlu menambah options --enable-storeio="diskd, aufs" ketika mengkompile squid.
  3. Directory-Name adalah menunjukkan letak directory akan di buat cache misalkan /cache. ingat, owner dan group directory ini harus sesuai dengan user yang menjalankan squid. adalah sebuah larangan squid di jalankan dengan user root.
  4. Mbyte (numeric) adalah pendifinisian besarnya media penyimpanan yang akan di gunakan cache, misalkan yang akan di gunakan adalah 20GB maka pada Mbyte harus tertulis 20000, MByte ini akan berhubungan dengan tag lain yaitu "cache_swap_low 90" dan "cache_swap_high 95".
  5. L1 (numeric) adalah jumlah directory yang akan di buat di dalam directory /cache ketika perintah #/usr/local/sbin/squid -z di eksekusi.
  6. L2 (numeric) adalah jumlah directory yang akan di buat di dalam masing-masing directory L1 ketika perintah #/usr/local/sbin/squid -z di eksekusi.
Lalu bagaimana menentukan L1 ?, berikut adalah rumus yang di pakai.

((( x / y ) / 256 ) / 256 ) * 2 = L1
x = besarnya disk cache yang akan di gunakan, satuannya adalah Kb (20 GB = 20.000.000 KB)
y = jumlah rata-rata object biasanya bernilai 13Kb
misalkan besarnya cache disk adalah 20 GB maka:

(((20.000.000/13)/256)/256)*2 = 46 Maka nilai L1 adalah 46.
biar kinerja cache lebih bagus maka lebih baik gunakan 80% dari cache disk

jadi bila cache disk 20GB maka scrip squidnya adalah sebagai berikut:

cache_dir ufs /cache 20000 46 256


Selengkapnya...

Load Balancing Web Server dengan DNS

Load balancing (pembagian beban) adalah salah satu metode untuk mengurangi beban pada server, karena permintaan dari client akan dibagi ke server lain.
ada beberapa software dan hardware yang mampu menjalankan service ini, tapi pada kesempatan ini akan membahas load balancing web server dengan DNS sebagai load balancernya.

gambar di atas, sebagai contoh konfigurasi load balancing dengan DNS sebagai load balancernya.
misalkan
  1. DNS, mempunyai IP address 10.10.10.2
  2. NS1, mempunyai IP address 10.10.10.3
  3. NS2, mempunyai IP address 10.10.10.4
  4. NS3, mempunyai IP address 10.10.10.5
  5. NS4, mempunyai IP address 10.10.10.6
berikut adalah konfigurasi pada DNS :

DNS IN A 10.10.10.2
NS1 IN A 10.10.10.3
NS2 IN A 10.10.10.4
NS3 IN A 10.10.10.5
NS6 IN A 10.10.10.6

www0 IN CNAME NS1
www1 IN CNAME NS2
www2 IN CNAME NS3
www3 IN CNAME NS4

www IN CNAME www0
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3

jadi ketika client mengetikkan www.namadomain.com, maka permintaan client akan di lempar ke salah satu server tersebut. :)

Selengkapnya...