May 1, 2007

Konfigurasi dan Optimasi Squid

Konfigurasi dan Optimasi Squid
-------------------------------
- ekstraklah file squid hasil d/l an
# tar zxvf squid-2.4.STABLE6-src.tar.gz

- squid proxy server tidak dapat berjalan sebagai super user root, oleh karena itu, buatlah user yang akan menjalankan squid:
# useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1
# mkdir /cache/ ---- anda tidak perlu mengetikkan perintah ini jika anda telah membuat partisi /cache pada saat penginstalan linux pertama kali.
# chown -R squid.squid /cache/

- editlah file icons/Makefile.in dengan text editor yang anda suka dan gantilah baris:



DEFAULT_ICON_DIR = $(sysconfdir)/icons
menjadi:
DEFAULT_ICON_DIR= $(libexecdir)/icons

- editlah file src/Makefile.in dengan text editor yang anda suka dan gantilah baris:
DEFAULT_CACHE_LOG = $(localstatedir)/logs/cache.log
menjadi:
DEFAULT_CACHE_LOG = $(localstatedir)/log/squid/cache.log
DEFAULT_ACCESS_LOG = $(localstatedir)/logs/access.log
menjadi:
DEFAULT_ACCESS_LOG = $(localstatedir)/log/squid/access.log
DEFAULT_STORE_LOG = $(localstatedir)/logs/store.log
menjadi:
DEFAULT_STORE_LOG = $(localstatedir)/log/squid/store.log
DEFAULT_PID_FILE = $(localstatedir)/logs/squid.pid
menjadi:
DEFAULT_PID_FILE = $(localstatedir)/run/squid.pid
DEFAULT_SWAP_DIR = $(localstatedir)/cache
menjadi:
DEFAULT_SWAP_DIR = /cache
DEFAULT_ICON_DIR = $(sysconfdir)/icons
menjadi:
DEFAULT_ICON_DIR = $(libexecdir)/icons

Maksud dari pengeditan file di atas adalah untk mengubah lokasi default dari file cache.log, access.log, dan store.log agar ditempatkan di dalam direktori
/var/log/squid, dan meletakkan pid (process identification) squid di direktori /var/run, serta menyimpan direktori icons di /usr/lib/squid/icons.


Menggunakan GNU malloc library untuk meningkatkan cache performance squid
-------------------------------------------------------------------------
- kopikan malloc.tar.gz ke direktori /var/tmp
# cp malloc.tar.gz /var/tmp
- ekstrak dan compile malloc
# cd /var/tmp
# tar zxvf malloc.tar.gz
# cd malloc
# export CC=egcs
# make
- kopikan library hasil kompilasi malloc (libmalloc.a) ke lib direktori linux anda
# cp libmalloc.a /usr/lib/libgnumalloc.a
- kopikan file malloc.h hasil kompilasi malloc ke direktori system include linux anda
# cp malloc.h /usr/include/gnumalloc.h

Kompilasi dan Optimasi Squid
----------------------------
- Masuklah kembali ke direktori di mana terdapat source squid
# cd /var/tmp/squid-2.4.STABLE6

- Ketikkan command berikut di komputer anda:

CC="egcs"
./configure
--prefix=/usr
--exec-prefix=/usr
--bindir=/usr/sbin
--libexecdir=/usr/lib/squid
--localstatedir=/var
--sysconfdir=/etc/squid
--enable-delay-pools
--enable-cache-digests
--enable-poll
--disable-ident-lookups
--enable-truncate
Command-command tersebut di atas akan sangat berarti sekali jika anda membaca help file yang disediakan :) (just type ./configure --help)

- Sekarang kita lakukan kompilasi dan instalasi squid, cukup ketikkan command-command berikut pada linux anda:

# make -f makefile
# make install
# mkdir -p /var/log/squid
# rm -rf /var/logs/
# chown squid.squid /var/log/squid/
# chmod 750 /var/log/squid/
# chmod 750 /cache/
# rm -f /usr/sbin/RunCache
# rm -f /usr/sbin/RunAccel
# strip /usr/sbin/squid
# strip /usr/sbin/client
# strip /usr/lib/squid/unlinkd
# strip /usr/lib/squid/cachemgr.cgi

Menggunakan script-script yang ada pada file floppy.tgz
-------------------------------------------------------
- ekstrak file floppy.tgz (misal ke /var/tmp)
# tar zxvf floppy.tgz

- kopikan script2 yg dibutuhkan oleh squid ke direktori yang sesuai
# cd /var/tmp/floppy
# cp /var/tmp/floppy/Squid/init.d/squid /etc/rc.d/init.d/
# cp /var/tmp/floppy/Squid/logrotate.d/squid /etc/logrotate.d/

Mengedit file konfigurasi squid
-------------------------------
- editlah file squid.conf yg terletak pada direktori /etc/squid/ dengan text editor yg anda suka (misal vi, pico, joe, atau mcedit)
# vi /etc/squid/squid.conf

Pada artikel ini saya tidak akan membahas semua option yang ada pada squid.conf, saya hanya akan membahas option-option yang dirasa penting untuk menjalankan squid dan berpengaruh besar dalam optimasi squid.

http_port 3128
Option ini akan menentukan di port berapa squid akan berjalan (biasanya di port 3128 dan 8080)

icp_port 0
Option ini akan menentukan melalui port berapa squid akan mengirimkan dan menerima request ICP dari proxy cache tetangga.

cache_mem 32 MB
Option ini menentukan berapa besar memory yang akan digunakan oleh squid, defaultnya adalah 8 MB yaitu default yang cocok untuk digunakan pada
banyak sistem. Namun jika anda memiliki memory yang berlebih, maka disarankan untuk menaikkannya. Ada yang berpendapat bahwa nilai ini
didapat dari sepertiga memory bebas bagi squid.

cache_dir ufs /cache 1600 4 256
Option pada cache_dir menentukan sistem penyimpanan seperti apa yang akan digunakan (ufs), nama direktori tempat penyimpanan cache (/cache), ukuran
disk dalam megabytes yang digunakan oleh direktori tempat penyimpanan cache (1600 Mbytes), jumlah subdirektori pertama yang akan dibuat di bawah /cache (4),
dan jumlah subdirektori kedua yang akan diciptakan di bawah subdirektori pertama tadi (256).
Nilai2 pada option cache_dir tadi harus disesuaikan dengan sistem yang anda miliki, biasanya yang harus disesuaikan hanyalah tempat penyimpanan cache, ukuran disk,
dan jumlah subdirektori yang akan dibuat. Mengenai angka2 tersebut, dapat kita peroleh dari rumus yang telah disediakan oleh Mas Devshed untuk optimasi sbb:
1. Gunakan 80% atau kurang dari setiap kapasitas cache direktori yang telah kita siapkan. Jika kita mengeset ukuran cache_dir kita melebihi nilai ini,
maka kita akan dapat melihat penurunan performansi squid.
2. Untuk menentukan jumlah subdirektori pertama yang akan dibuat, dapat menggunakan rumus ini:
x=Ukuran cache dir dalam KB (misal 6GB=~6,000,000KB) y=Average object size (gunakan saja 13KB)
z= Jumlah subdirektori pertama = (((x / y) / 256) / 256) * 2 = # direktori
Sebagai contoh, misal saya menggunakan 6 GB dari untuk /cache (setelah disisihkan 80% nya), maka:
6,000,000 / 13 = 461538.5 / 256 = 1802.9 / 256 = 7 * 2 = 14
maka baris cache_dir akan menjadi seperti ini: cache_dir ufs 6000 14 256

cache_store_log none
Option ini akan melog setiap aktivitas dari storage manager. Log ini akan memperlihatkan objek-objek mana saja yang dikeluarkan dari cache, dan objek-objek mana saja yang disimpan dan untuk brp lama objek tersebut disimpan. Karena biasanya tidak ada gunanya untuk menganalisis data ini, maka disarankan untuk didisable.

negative_ttl 2 minutes
Default dari option ini adalah 5 menit, tetapi Mas Moh. J. Kabir menyarankan agar direndahkan menjadi 2 dan jika mungkin menjadi 1 menit. Kenapa settingannya seperti itu? Mas Moh. J. Kabir menjelaskan bahwa kita menginginkan proxy yang kita miliki setransparan mungkin. Jika seorang user mencari halaman web yang dia yakin itu ada, maka kita pasti tidak ingin adanya waktu lag antara URL menuju dunia dan kemampuan user untuk mengaksesnya.

cache_effective_user squid
cache_effective_group squid
Jika squid cache dijalankan oleh root, maka user yang akan menjalankannya akan diubah sesuai UID/GID user yang disebutkan pada option di atas. Pada contoh option di atas jika squid dijalankan oleh root, maka squid cache akan dijalankan dengan UID/GID squid.

maximum_object_size 1024 KB
Dengan option ini, ukuran file maksimum yang disimpan oleh squid cache bisa dibatasi. Dengan kata lain objek yang lebih besar dari bilangan ini tidak akan disaved ke dalam disk yang sudah disisihkan buat cache (misal /cache).

minimum_object_size 4 KB
Dengan option ini maka objek yang lebih kecil dari bilangan yang disebutkan tidak akan disaved ke dalam disk yang sudah disisihkan buat cache. Ada tambahan dari artikel yang ditulis Mas Jay bahwa ukuran file minimum yang dicache bertujuan mengefektifkan filesystem di mana biasanya ext2 diformat dengan 4 KB inode.

ftp_user hari@huhui.com
Dengan option ini, maka ketika klien mengakses situs ftp anonymous, email address di atas akan dikirim sebagai password bagi ftp server anonymous.

reference_age 1 month
Dengan option ini, maka file cache yang tidak pernah diakses lagi selama nilai parameter di atas, akan dihapus secara otomatis oleh squid.

acl PazzNET src 192.168.1.0/255.255.255.0
http_access allow PazzNET
http_access deny all
Option-option tersebut menentukan subnet mana yang boleh mengakses proxy squid. Jika ada beberapa subnet, kita bisa menambahkan definisi acl nya.

cache_mgr hari@huhui.com
Email-address dari local cache manager yang akan menerima email jika cache mati.Email ini pulalah yang akan muncul pada browser klien jika terjadi suatu kesalahan ketika mengakses suatu web via proxy squid.

visible_hostname hari.huhui.com
Informasi ini dikirim sebagai footer pada saat pesan error tampil di layar browser klien.

half_closed_clients off
Beberapa klien dapat membatalkan koneksi TCP nya, dengan membiarkan bagian penerimaaannya terbuka. Kadang-kadang squid tidak dapat membedakan antara koneksi TCP yang half-closed dan full-closed. Defaultnya, koneksi half-closed tetap terbuka sampai pembacaan dan penulisan pada soket memunculkan pesan error. Ubahlah nilai ini ke off, maka squid dengan serta merta akan menutup koneksi client jika tidak ada data yang dibaca lagi.

Saran Mas Devshed yang lain untuk meningkatkan performance:
cache_swap_high 100%
cache_swap_low 80%

Setelah semua selesai dilakukan, cobalah start squid anda dan rasakanlah perbedaannya :)
# /etc/rc.d/init.d/squid start

Jika ada error, jangan panik, carilah letak kesalahan dengan selalu memonitor log
# tail -f /var/log/messages

Jika masih ada error, berdo'alah, dan tanyakan pada forum2 linux di kota2 anda atau di #indolinux tentunya :)~

Pengembangan lebih lanjut untuk optimasi squid :
- Gunakan filesystem ReiserFS pada partisi cache direktori
- Gunakan 7200 RPM UDMA 66 drives atau fast (7200 atau 10k RPM) SCSI drives.Tweak dengan patch Andre Hedrick's Unified IDE patch.
- Besarkan RAM







KOnfigurasi Transparant Squid

6. Konfigurasi squid. Edit filenya di /etc/squid/squid.conf. Konfirgurasi squid ini cukup panjang, kamu bisa melihatnya sendiri dengan bantuan keterangan yang ada di dalamnya dan sesuaikan dengan kebutuhan network kamu. Namun intinya untuk mendukung Transparent proxy, kamu harus mengedit line berikut ini menjadi:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

7a. Edit file /etc/firewall/gShield.rc utk mendukung transparent proxy.
cari baris yang berisikan:

# Transparent proxy stuff -- since it's part of the NAT munch
# we add it here
if [ "$ENABLE_TRANSPROXY" = "YES" -o "$ENABLE_TRANSPROXY" = "yes" ]; then
if [ "X$PROXY_HOST" != "X" ]
then
$IPTABLES -t nat -A PREROUTING -i $INTERNAL -p tcp -s ! $PROXY_HOST --dport 80 -j DNAT --to $PROXY_HOST:$PROXY_PORT
$IPTABLES -t nat -A PREROUTING -i $INTERNAL -p udp -s ! $PROXY_HOST --dport 80 -j DNAT --to $PROXY_HOST:$PROXY_PORT

dan tambahkan command berikut ini di baris selanjutnya:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

sehingga sekarang menjadi:

if [ "$ENABLE_TRANSPROXY" = "YES" -o "$ENABLE_TRANSPROXY" = "yes" ]; then
if [ "X$PROXY_HOST" != "X" ]
then
$IPTABLES -t nat -A PREROUTING -i $INTERNAL -p tcp -s ! $PROXY_HOST --dport 80 -j DNAT --to $PROXY_HOST:$PROXY_PORT
$IPTABLES -t nat -A PREROUTING -i $INTERNAL -p udp -s ! $PROXY_HOST --dport 80 -j DNAT --to $PROXY_HOST:$PROXY_PORT
$IPTABLES -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

7b. Test konfigurasi:
pppd call dod
buka browser misalnya ke www.yahoo.com. koneksi terjadi. script firewall dijalankan otomatis.
iptables -L -t nat

harus muncul REDIRECT di situ:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- !nama.server.kamu anywhere tcp dpt:http to:192.168.0.77:3128
DNAT udp -- !nama server.kamu anywhere udp dpt:http to:192.168.0.77:3128
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 3128

8. Test konfigurasi transparent proxy di squid dengan memantau aktivitas di file /etc/var/log/squid/access.log dan /etc/var/log/squid/store.log. Lakukan test dengan browsing-browsing di internet. Tandanya bahwa transparent proxy telah jalan adalah dengan adanya aktivitas di dalam file log tersebut.

tail -f /var/log/squid/acces.log
tail -f /var/log/squid/store.log

Demikianlah artikel yang singkat dan belum sempurna ini. Semoga dapat bermanfaat. Akhir kata, terima kasih banyak kepada xenogears yang telah memberikan penjelasan mengenai penggunaan wvdial untuk dial on demand dengan pppd, dan oom-oom di channel #indolinux DALNET, terutama oom kuit yang telah menerangkan kesalahan saya di dalam setting Transparent proxy di iptables. Terima kasih kepada istri tersayang yang telah merelakan saya untuk begadang sampai pagi djavascript:void(0)
Publishan belum mandi sampai jam 12 siang ini. :)


Whatsapp Button works on Mobile Device only

Start typing and press Enter to search