Cara Instal dan Optimasi Squid Proxy Server
Sebenarnya sudah lama ingin menulis tutorial ini, yaa...untuk bahan catatan pribadi jika saya harus install ulang/baru
squid proxy warnet saya.
Mungkin
sebagaian dari anda sudah tahu bagaimana menginstall squid, tetapi
belum melakukan optimasi agar squid berjalan lebih kencang. Berikut
adalah tutorial saya, yang mana sudah pernah saya uji coba dan sukses.
FYI, tutorial ini adalah penggabungan tutorial yang ada di
blog Ghozali,
Last.FM,
Squid Wiki dan dari buku
Squid: The Definitive Guide.
PERSIAPAN
Hardware
Untuk
hardware proxy server saya kali ini menggunakan Prosesor Intel Celeron
430 (Coppermine) 1.80Ghz dengan 2 buah hardisk 80 GB SATA Seagate 7200
RPM & memori Vgen 1.5 GB DDR2. Mengapa 2 hardisk? Performa
read/write Squid akan lebih optimal jika direktori cache diletakkan di
hardisk terpisah. Peletakkan direktori cache di partisi yang berada
dalam satu hardisk dengan system, tidak akan meningkatkan performa
Squid, begitu juga dengan teknik
RAID.
Jika anda memiliki dana lebih, ada baiknya jika anda menggunakan
beberapa hardisk untuk penyimpanan cache squid. Tidak perlu berkapasitas
besar, yang penting memiliki kemampuan read/write yang baik, misalnya
hardisk jenis SCSI, SAS dan sebagainya.
Untuk memori, sebenarnya
squid tidak memerlukan kapasitas yang besar, dengan 512 MB sudah cukup
untuk menjalankannya. Tetapi dalam kasus proxy warnet saya, saya ingin
agar kemampuan penyimpanan cache di memori bisa lebih besar, sehingga
diharapkan squid bisa menghadirkan
TCP_MEM_HIT lebih banyak.
Software
Squid
terlahir atau tercipta hanya untuk Linux seorang :P. Jadi, jangan
sekali-kali pernah berpikir dan berusaha menjalankan Squid di mesin
Mikocok (baca: microsoft), baik itu seri Desktop maupun Server. Gak
nyambung bro!
Squid dapat berjalan sangat baik di hampir semua distro Linux. Saya sendiri pada waktu uji coba menggunakan
Ubuntu Server 8.10 32-bit.
Walaupun anda memiliki komputer yang bisa menjalankan aplikasi 64-bit,
disarankan untuk Squid tetap menggunakan OS 32-bit, karena Squid belum
sepenuhnya teruji di mesin 64-bit.
Untuk meningkatkan performa baca/tulis, disarankan hardisk yang akan anda gunakan untuk menyimpan cache menggunakan format
ReiserFS. Karena, RaiserFS memiliki kemampuan baca/tulis yang lebih baik untuk file-file ukuran kecil ketimbang format ext3.
Pada saat ujicoba, saya menggunakan Squid versi 2.7STABLE5. Untuk list versi lain yang tersedia, silahkan kunjungi
halaman ini.
INSTALASI
Disini
saya tidak akan menerangkan bagaimana cara menginstal Ubuntu Server
8.10 atau distro Linux lainnya ke komputer yang akan anda gunakan untuk
proxy server. Tetapi jika anda membutuhkan tutorialnya, silahkan baca di
HowToForge.
Membuat Partisi Format ReiserFS
Setelah
Server Ubuntu anda siap, ikuti langkah-langkah instalasi berikut. Yang
pertama kita akan membuat hardisk kedua (tempat direktori cache)
memiliki format ReiserFS. Distro Debian sudah mendukung format ReiserFS,
jika anda menggunakan CentOS anda harus mengaktifkan
centosplus repo
dengan men-setting
enable=1
pada
/etc/yum.repos.d/CentOS-Base.repo
kemudian jalankan perintah
yum install reiserfs-utils
Jika
anda menggunakan Ubuntu seperti saya, anda tidak perlu melakukan
setting apapun, karena Ubuntu sudah mendukung format ReiserFS. Yang
perlu anda lakukan adalah menjalankan perintah
mkfs.reiserfs /dev/sdXX
Dimana XX adalah partisi dimana yang akan anda gunakan untuk menyimpan cache. (Untuk melihat list hardisk, gunakan perintah
sudo fdisk -l
.
Pada kasus saya,
mkfs.reiserfs /dev/sdb1
Kemudian tambahkan partisi anda ini ke /etc/fstab
/dev/sdb1 /var/spool/squid reiserfs defaults,notail,noatime 1 2
/var/spool/squid adalah direktori penyimpanan cache.
Compile Squid
Langkah kedua adalah melakukan compile source squid. Download source-nya dengan perintah
sudo wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE5.tar.gz
setelah itu ekstrak dengan perintah
sudo tar -zxvf squid-2.7.STABLE5.tar.gz
kemudian kita masuk ke direktori source squid
cd squid-2.7.STABLE5
Sebelum kita mulai meng-compile, pastikan gcc atau g++ sudah terinstal.
Untuk memulai proses compile, ketikkan perintah
CHOST="i686-pc-linux-gnu" \
CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer" \
./configure \
-prefix=/usr \
-enable-async-io \
-enable-useragent-log \
-enable-snmp \
-enable-cache-digests \
-enable-follow-x-forwarded-for \
-enable-storeio="aufs" \
-enable-removal-policies="heap,lru" \
-with-maxfd=16384 \
-enable-delay-pools \
-enable-poll \
-disable-ident-lookups \
-enable-truncate \
-exec-prefix=/usr \
-bindir=/usr/sbin \
-libexecdir=/usr/lib/squid
Catatan:
Nilai
CHOST dan CFLAGS
berbeda tergantung dari jenis prosesor mesin anda. Ganti opsi ini
sesuai dengan prosesor yang anda gunakan. Untuk mengetahui nilai CHOST
dan CFLAGS ketikkan perintah
cat /proc/cpuinfo
dan cocokkan dengan refensi nilai CHOST CFLAGS di halaman
Gentoo Safe Cflags.
-enable-async-io
:
opsi ini untuk mengaktifkan asynchronous I/O - sangat penting untuk
menghentikan squik melakukan blocking pada baca/tulis ke harddisk.
-enable-useragent-log
berguna agar squid mencatat useragent di entri log - berguna jika anda menggunakan lynx untuk melakukan debug kecepatan squid.
-enable-snmp
aktifkan ini jika anda ingin menampilkan statistik squid dalam bentuk grafik.
-enable-cache-digests
harus diaktifkan jika anda menggunakan cache peer.
-enable-storeio="aufs"
adalah alernatif penyimanan metode I/O. AUFS adalah Asynchronous, memiliki performa yang signifikan ketimbang UFS atau diskd.
-enable-removal-policies="heap,lru"
adalah pilihan opsi untuk removal policies, dan saya memilih menggunakan "heap LFUDA", atau anda juga bisa menggunakan "LRU".
-with-maxfd=16384
digunakan agar squid tidak terblokir apabila dalam keadaan load tinggi.
-enable-poll
untuk meningkatkan performa squid.
-disable-ident-lookups
menghentikan squid dari melihat ident di setiap koneksi, bisa juga
untuk mencegah serangan DOS yang dapat mematikan squid server, yang
biasanya dengan cara membuka ribuan koneksi.
-enable-truncate
memerintahkan squid untuk selalu menggunakan
truncate()
ketimbang
unlink()
ketika menghapus file cache.
enable-delay-pools
jika anda ingin mengatur bandwidth koneksi, gunakan opsi ini.
Setelah
anda menjalankan perintah ./configure diatas dengan sukses, saatnya
kita menuju langkah beriktunya (jika ada error muncul, anda harus
mencari solusinya sebelum masuk ke perintah selanjutnya).
Selanjutnya ketikkan perintah
make
kemudian dilanjutkan dengan
make install
seteleah selesai ketikkan perintah
strip /usr/sbin/squid /usr/lib/squid/*
perintah ini untuk menghapus simbol pada binari squid, agar ukurannya menjadi lebih kecil. Perintah ini bersifat opsional.
Squid.conf
squid.conf
adalah file yang digunakan untuk melakukan konfigurasi squid. Disini
saya tidak akan menampilkan semua konfigurasi squid.conf, tetapi hanya
yang bisa untuk mengoptimalkan kinerja squid. Misal opsi http_port tidak
saya cantumkan, jika anda ingin mengetahui list lengkap dan deskripsi
dari opsi-opsi konfigurasi squid yang ada, silahkan kunjungi
manualnya.
hosts_file /etc/hosts
dns_nameservers 208.67.222.222 208.67.220.220
cache_replacement_policy heap LFUDA
cache_swap_low 90
cache_swap_high 95
maximum_object_size_in_memory 50 KB
cache_dir aufs /var/spool/squid 10000 16 256
cache_mem 64 MB
logfile_rotate 10
memory_pools off
maximum_object_size 50 MB
quick_abort_min 0 KB
quick_abort_max 0 KB
log_icp_queries off
client_db off
buffered_logs on
half_closed_clients off
Apa maksud dari opsi-opsi diatas?
hosts_file /etc/hosts
opsi ini untuk memerintahkan squid untuk melihat entri yang ada di
/etc/hosts, hal ini berguna jika anda ingin memblokir iklan atau situs
jahat dengan memanfaatkan file /etc/hosts (Insya Allah mendatang saya
akan membuat tutorial ini.
dns_nameservers 208.67.222.222 208.67.220.220
Ini Penting! Squid akan mem-pause (menghentikan sementara) koneksi
ketika melakukan DNS lookup. Dengan memasukkan DNS, maka akan mencegah
hal ini. Disini saya menggunakan DNS dari
OpenDNS.
cache_replacement_policy heap LFUDA
ini adalah pilihan replacement policy, dimana saya menggunakan heal
LFUDA. Anda bisa menggunakan pilihan lain, info lengkap perihal
cache_replacement_policy, silahkan baca
disini.
cache_swap_low 90
adalah prosentase dimana squid akan melakukan pembersihan cache, jadi
jika anda memiliki 10 GB , maka squid akan melakukan pembersihan cache
lama pada penggunaan 9 GB.
cache_swap_high 95
secara agresif squid akan menghapus file cache lama dengan menggunakan opsi replacement policy yang disebutkan diatas.
maximum_object_size_in_memory 50 KB
Ini untuk menentukan besaran file yang akan disimpan di memori. Pada
konfigurasi ini saya mengaturnya maksimum hanya 50 KB, ini agar tidak
mengganggu memori. Penyimpanan file yang besar di memori akan memberikan
beban tinggi sehingga mmeori tidak bisa dikontrol dengan baik.
cache_dir aufs /var/spool/squid 10000 16 256
Dianjurkan untuk tidak mengubah opsi AUFS, karena opis ini memiliki
performa yang lebih bagus dari opsi lain. Angka 10000 adalah jumlah
besarnya file cache yang digunakan squid dalam MB.
cache_mem 64 MB
Jangan mengatur cache_mem terlalu besar. Cache_mem menunjukkan jumlah
maksimal RAM yang digunakan oleh squid untuk menyimpan obyek di memori.
Ingat, squid membutuhkan RAM sekitar 100 MB per 1 GB file cache. Jadi,
jika anda memiliki 10 GB file cache, maka squid membutuhkan RAM minimal 1
GB.
memory_pools off
Menghentikan squid menempel di memori ketika tidak ada aktifitas.
maximum_object_size 50 MB
ini adalah jumlah maksimum obyek yang akan disimpan oleh squid. Dianjurkan untuk tidak mengaturnya terlalu besar.
quick_abort_min 0 KB
opsi ini sangat berguna, tetapi dalam kasus tertentu akan membuat squid
tidak optimal. Quick_abort_time akan mengevaluasi berapa banyak sisa
data yang akan ditransfer jika klien membatalkannya. Jika nilainya
berada dalam range quick_abort, maka quid akan melanjutkan download
sampai selesai dan kemudian menyimpannya di cache. Memang terdengar
bagus, namun masalah akan muncul jika klien melakukan beberapa koneksi,
maka squid akan menyelesaikan proses download untuk semua koneksi, dan
akibatnya squid menjadi lambat. Dengan mengaturnya ke angka 0, maka
squid akan menonaktifkan opsi ini.
quick_abort_max 0 KB
fungsi sama dengan quick_abort_min
log_icp_queries off
jika anda menggunakan cache_peer, maka opsi ini akan menghentikan squid
untuk selalu melakukan query ke masing-masing cache_peer.
client_db off
jika diaktifkan maka squid akan menyimpan statistik semua klien, hal ini bisa membebani mmeori, maka sebaiknya dinonaktifkan.
buffered_logs on
melakukan buffering pada penulisan file log, dapat meingkatkan performa squid.
half_closed_clients off
mengirimkan connection-close ke klien sehingga membuka setengah koneksi untuk squid.
Setelah konfigurasi squid.conf dilakukan, kini saatnya menjalankan squid. Ketikkan perintah agar squid membuat swap
/usr/sbin/squid -z
kemudian aktifkan squid
/usr/sbin/squid start
Cek apakah squid sudah berjalan apa belum dengan perintah
sudo netstat -pln | grep squid
bila muncul tampilan seperti dibawah ini, berarti squid sudah berjalan
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 4281/(squid)
udp 0 0 0.0.0.0:3130 0.0.0.0:* 4281/(squid)
udp 0 0 0.0.0.0:50113 0.0.0.0:* 4281/(squid)
udp 0 0 0.0.0.0:3401 0.0.0.0:* 4281/(squid)
Note: Jika anda ingin melakukan pengaturan bandwidth dengan fitur delay_pools, silahkan baca petunjuknya di
blog Ghozali.
Pimp Your Squid!
Ok,
squid sudah kita optimalkan, bagaimana dengan TCP? Pertama, kita akan
melakukan 'modprobe ip_conntrack' dengan menambahkan modul ini di
/etc/modules (debian) atau /etc/modprobe.conf (RHEL/CentOS).
Hal diatas akan menghentikan squid memunculkan pesan
parseHttpRequest: NF getsockopt(SO_ORIGINAL_DST) failed: (92) Protocol not available
Kemudian kita akan melakukan modifikasi pada sysctl. Tambahkan baris berikut pada akhir file
/etc/sysctl.conf
fs.file-max = 65535
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 65536 8388608
net.ipv4.tcp_mem = 4096 4096 4096
net.ipv4.tcp_low_latency = 1
net.core.netdev_max_backlog = 4000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
Kemudian tambahkan entri berikut pada file
/etc/security/limits.conf
* - nofile 65535