Rabu, 12 Desember 2012

SERVER PROXY UBUNTU 11.04 : I


Berikut ini adalah langkah-langkah installasi Operating System Ubuntu Server 11.04 Natty 32/64 Bit yang akan kita pergunakan sebagai Proxy Server :
Hidupkan PC Calon Proxy Server
Masukkan ‘CD Ubuntu Server’ Ke CDROM
Booting dari CDROM
Pilih language English, Enter
Pilih Install Ubuntu Server, Enter
Tekan enter pada ‘Choose Language’ English
Pilih United States
‘Detect Keyboard Layout Pilih ‘No’
Pada Ubuntu ‘Installer Main Menu’ pilih USA
Pada ‘Keyboard Layout’ Pilih USA
Pilih ‘Continue’ pada ‘Configure The Network’
Pilih ‘Configure Network Manually’
Isi IP Address dengan 192.168.11.11 pilih ‘Continue’, lalu tekan Enter
Netmask 255.255.255.0 pilih ‘Continue’, lalu Enter
Pada Gateway sudah terdapat angka ‘192.168.11.1’, biarkan saja terus Tab Pilih ‘Continue’
Pada Name Server Addresses sudah terdapat angka ‘192.168.11.1’ abaikan dan Tab pilih ‘Continue’, lalu enter
Hotsname diisi dengan : anjelanet (terserah anda) terus pilih continue enter
Domain Name: kosongkan saja, pilih ‘Continue’ dan tekan enter
Pada pilihan ‘Configure The Clock’ pilih ‘Select From Worldwide List’ terus cari Jakarta, lalu tekan Enter
Pada menu ‘Partition Disk’ pilih ‘Manually’
(Penulis menggunakan 2 Harddisk 250 GB & 500 GB 7200 RPM, RAM 2 GB PC6400, HDD 500 GB dipersiapkan untuk men-cache Video Streaming & MP3. Jika HDD & RAM anda berbeda sesuaikan dengan kebutuhan, Pola Partition Nomor 1 & 3 tutorial ini mohon tidak di ubah, cukup penyesuaian pada option RAM saja)
Selanjutnya Jika menggunakan Harddisk bekas pakai, Langkahnya kita hapus partisi yang ada terlebih dahulu. Pilih Directory Partition yang akan dihapus, tekan enter dan pilih Delete The Partition (ULANGI PERINTAH INI UNTUK SEMUA PARTISI YG TERSISA).
Jika telah selesai pilih ‘Guided Partitioning’, kemudian pilih ‘Manually’ arahkan pada FREE SPACE. (UNTUK HARDDISK KOSONG LANGSUNG KE LANGKAH INI).

Arahkan ke FREE SPACE HDD1 Pilih Create New Partition, Enter
Besar Partition I adalah 256 MB, Jadikan sebesar itu. Pilih Continue, Enter (Usahakan untuk tidak merubah besaran Partisi Harddisk ini)
Pilih Primary, Enter
Pilih Beginning, Enter
Pada pilihan ‘Use As’ = Ext4, Enter
Jika muncul option ‘Format The Partition’ tekan enter untuk memilih ‘Yes, Format it’
Mount point = /boot
Mount options pilih ‘Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard
Bootable flag = on
Pilih ‘Done Setting Up The Partition’

Arahkan ke FREE SPACE HDD1 Pilih Create New Partition, Enter
Besar Partition II adalah 30 GB (Sesuaikan kapasitas HDD anda, minimal 10 GB)
Pilih Primary, Enter
Pilih Beginning, Enter
Pada pilihan ‘Use As’ = Ext4
Jika muncul option ‘Format The Partition’ tekan enter untuk memilih ‘Yes, Format it’
Mount point = /
Mount options pilih ‘Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard
Pilih ‘Done Setting Up The Partition’

Arahkan ke FREE SPACE HDD1 Pilih Create New Partition, Enter
Besaran Partisi III adalah 4 GB (RAM 2 GB) (Untuk RAM 1 GB Isikan Partisi III sebesar 2 GB. Rumus = RAM x 2 = Besar Partisi SWAP AREA)
Pilih Primary, Enter
Pilih Beginning, Enter
Pada pilihan ‘Use As’ = Swap Area
Pilih ‘Done Setting Up The Partition’

Arahkan ke FREE SPACE HDD1 Pilih Create New Partition, Enter
Besar Partition IV adalah  keseluruhan sisa HDD 1 yang masih FREE SPACE (dalam hal ini Free Space HDD 1 saya 215,8 GB)
Pilih Primary, Enter
Jika muncul option ‘Format The Partition’ tekan enter untuk memilih ‘Yes, Format it’
Pada pilihan ‘Use As’ untuk Ubuntu Server 32/Bit = ReiserFS,  untuk Ubuntu Server 64/Bit Pada pilihan ‘Use As’ = BtrFS
Pada Mount point = Enter dan pilih Manually, ‘/home ubah menjadi /cache1’
Mount options untuk Ubuntu Server 32/Bit pilih ‘Notail & Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard,, untuk Ubuntu Server 64/Bit Mount options pilih ‘Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard.
Pilih ‘Done Setting Up The Partition’

(PERHATIAN : JIKA MENGGUNAKAN 1 HARDDISK, ABAIKAN LANGKAH 5 & 6 BERIKUT INI)

Arahkan ke FREE SPACE HDD2 Create New Partition, Enter
Besar Partition V adalah 300 GB (Sesuaikan kapasitas HDD anda)
Pilih Primary, Enter
Pada pilihan ‘Use As’ untuk Ubuntu Server 32/Bit = ReiserFS,  untuk Ubuntu Server 64/Bit Pada pilihan ‘Use As’ = BtrFS
Jika muncul option ‘Format The Partition’ tekan enter untuk memilih ‘Yes, Format it’
Pada Mount point = Enter dan pilih Manually, ‘/home ubah menjadi /cache2’
Mount options untuk Ubuntu Server 32/Bit pilih ‘Notail &Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard, untuk Ubuntu Server 64/Bit Mount options pilih ‘Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard.
Pilih ‘Done Setting Up The Partition’

Arahkan ke FREE SPACE HDD2 Create New Partition, Enter
Besar Partition V adalah 200 GB (Sesuaikan kapasitas HDD anda)
Pilih Primary, Enter
Pada pilihan ‘Use As’ untuk Ubuntu Server 32/Bit = ReiserFS,  untuk Ubuntu Server 64/Bit Pada pilihan ‘Use As’ = BtrFS
Jika muncul option ‘Format The Partition’ tekan enter untuk memilih ‘Yes, Format it’
Pada Mount point = Enter dan pilih Manually, ‘/home ubah menjadi /cache3’
Mount options untuk Ubuntu Server 32/Bit pilih ‘Notail &Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard, untuk Ubuntu Server 64/Bit Mount options pilih ‘Noatime’ dengan menekan tombol ‘SPACE’ pada keyboard.
Pilih ‘Done Setting Up The Partition’

Pilih Finish Partitioning And Write Changes To Disk, tekan Enter
Pada pilihan Write The Changes To Disk pilih Yes, tekan Enter
Pada Full Name For The New User isi dg anjelanet, pilih continue & tekan Enter
Pada Username For Your Account isi dg anjelanet, terus continue & tekan Enter
Pada a password For The New User isi dg anjelanet, terus continue & tekan Enter
Pada Re-Enter Password To Verify isi dg anjelanet, terus continue & tekan Enter
Jika muncul pilihan Use Weak Password pilih Yes, tekan Enter
Pada pilihan Encrypt Your Home Directory pilih ‘No’, tekan Enter
Pada pilihan HTTP Proxy Information dikosongkan saja, pilih Continues, tekan Enter
Pada saat ‘Configuration apt’ mencapai 23% tekan enter, juga pada 72% tekan Enter
Pada saat pilihan updating pilih  ‘No Automatic Update’
Pada Choose Software To Install pilih ‘OpenSSH Server’ dengan menekan tombol ‘SPACE’ pada keyboard, selanjutnya pilih Continues, tekan Enter
Pada Pilihan ‘Install GRUB Loader’ pilih Yes
Pada saat ‘Ejecting CD Ubuntu Server Installer’ ambil CD-nya tutup kembali CDROM dan pilih Continues

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.FMSquid 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 teknikRAID. 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 mengaktifkancentosplus 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 halamanGentoo 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() ketimbangunlink() 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

Lakukan reboot, kemudian jalankan squid. Beres dah! :)