IGOS Nusantara dan proxy server squid kompilasi: Perbedaan revisi

Dari IGNwiki
Langsung ke: navigasi, cari
(Konfigurasi squid.conf)
 
(84 revisi antara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
Optimasi squid dapat lebih ditingkatkan dengan melakukan kompilasi dari source squid. Berikut ini kompilasi untuk spesifikasi:
+
Optimasi squid dapat lebih ditingkatkan dengan melakukan kompilasi dari source squid.  
# Sistem Operasi memakai IGOS Nusantara 2010
+
 
# Intel(R) Xeon(TM) CPU 3.00GHz
+
== 1. Spesifikasi Server ==
 +
Berikut ini kompilasi squid untuk spesifikasi:
 +
# Sistem Operasi memakai IGOS Nusantara 2010 (Instal minimal)
 +
# Posesor Intel(R) Xeon(TM) CPU 3.00GHz
 
# RAM 1 GB (yup memori masih kecil, harusnya update ke 4 GB)
 
# RAM 1 GB (yup memori masih kecil, harusnya update ke 4 GB)
 
# Harddisk 2 x 80 GB SCSI
 
# Harddisk 2 x 80 GB SCSI
 +
#* Harddisk1: /dev/sda (untuk menyimpan sistem operasi)
 +
#* Harddisk2: /dev/sdb (untuk menyimpan cache squid)
  
== Instal IGOS Nusantara 2010 untuk Server ==
+
== 2. Prasyarat untuk optimasi squid ==
Sistem Operasi yang akan dipasang di server sebaiknya TIDAK dipasang dari IGN2010 LiveCD. Versi IGN2010 LiveCD ditujukan untuk penggunaan Desktop. Server sebaiknya dipasang program/aplikasi minimal. Instalasi minimal dapat dilakukan dengan:
+
Sebelum melakukan kompilasi squid, beberapa hal sudah selesai dikonfigurasi dan berfungsi denganbaik, yaitu:
# Gunakan IGN2010 versi DVD Installer
+
# Mengetahui skema jaringan, ada di: http://igos-nusantara.or.id/wiki/Skema_Jaringan
# Booting memakai IGN2010 DVD
+
# Instal IGOS Nusantara sebagai server, memakai pilihan minimal/konsol, ada di: http://igos-nusantara.or.id/wiki/Instal_IGOS_Nusantara_minimal-konsol
# Saat awal muncul menu instalasi pilih "Instal IGOS Nusantara Minimal (konsol)" [[http://repo.igos-nusantara.or.id/grafik/2010/dvd/01-ign2010-dvd-boot-menu-75p.jpg]]
+
# Memformat harddisk kedua, ada di: http://igos-nusantara.or.id/wiki/Memformat_harddisk_kedua
 +
# Tuning file sistem, ada di: http://igos-nusantara.or.id/wiki/Tuning_file_sistem
  
== Tahap kompilasi ==
+
== 3. Kompilasi Squid ==
=== Pasang GCC ===
+
=== Pasang paket untuk kompilasi squid ===
  # yum -y install gcc
+
  # yum -y install gcc  
 +
# yum -y install gcc-c++
 +
# yum -y install libxml2-devel libcap-devel
 +
Instal semua dalam satu baris perintah:
 +
# yum -y install gcc gcc-c++ libxml2-devel libcap-devel
  
 
=== Unduh squid-3.1.10.tar.bz2 ===
 
=== Unduh squid-3.1.10.tar.bz2 ===
Baris 22: Baris 32:
 
=== Buat group dan user ===
 
=== Buat group dan user ===
 
Group dan user yang akan dipakai untuk menjalankan squid dibuat dengan cara:
 
Group dan user yang akan dipakai untuk menjalankan squid dibuat dengan cara:
# groupadd _squid
+
  # useradd squid -c "Squid Proxy" -M -d /cache/proxy1 -s /bin/false
  # useradd _squid -c "Squid Proxy" -d /dev/null -s /bin/false -g _squid
+
  
Catatan: tanda "_" di depan squid ditambahkan demi alasan keamanan[1].
+
=== Optimasi Kompilasi ===
 +
Kompilasi agar optimal perlu memakai opsi atau FLAG yang sesuai dengan prosesor. Informasi tentang prosesor ada di /proc/cpuinfo
  
=== Opsi Kompilasi ===
+
  # cat /proc/cpuinfo
  ./configure \
+
 
--enable-gnuregex \
+
  # cat /proc/cpuinfo | grep family
  --enable-async-io=32 \
+
  cpu family : 15
  --with-aufs-threads=32 \
+
  cpu family : 15
  --with-pthreads \
+
 
--with-aio \
+
  [root@intra ~]# cat /proc/cpuinfo |grep model
  --with-dl \
+
  model : 4
  --enable-storeio=aufs \
+
  model name : Intel(R) Xeon(TM) CPU 3.00GHz
  --enable-removal-policies=heap \
+
 
--enable-icmp \
+
Informasi yang diperoleh dari /proc/cpuinfo kemudian disesuaikan dengan flag kompilasi yang ada Gentoo Wiki[1], yaitu diperoleh:
--enable-delay-pools \
+
  CHOST="i686-pc-linux-gnu"
  --disable-wccp \
+
  CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
  --enable-snmp \
+
  CXXFLAGS="${CFLAGS}"
--enable-cache-digests \
+
--enable-default-err-languages=English \
+
--enable-err-languages=English \
+
--enable-linux-netfilter \
+
--disable-ident-lookups \
+
  --disable-hostname-checks \
+
--enable-underscores
+
  
=== Keterangan parameter ===
+
=== Parameter Kompilasi ===
 +
Paramater yang dipakai untuk kompilasi sebagian disesuaikan dengan squid.spec yang ada squid-*-.src.rpm dari Fedora 13 (F13). Info: F13 adalah basis IGOS Nusantara 2010. Berikut penjelasan sebagian parameter yang akan dipakai saat kompilasi:
 
* --enable-async-io untuk mengaktifkan asynchronous I/O dalam proses baca/tulis ke harddisk. Memakai 16 bila memakai satu harddisk jenis lama (buffer hanya 2 MB). Bila memakai harddisk model baru dengan buffer 8 MB, 16 MB atau 32 MB dapat memakai 32.
 
* --enable-async-io untuk mengaktifkan asynchronous I/O dalam proses baca/tulis ke harddisk. Memakai 16 bila memakai satu harddisk jenis lama (buffer hanya 2 MB). Bila memakai harddisk model baru dengan buffer 8 MB, 16 MB atau 32 MB dapat memakai 32.
 
* --enable-useragent-log berguna agar squid mencatat useragent di entri log
 
* --enable-useragent-log berguna agar squid mencatat useragent di entri log
Baris 56: Baris 60:
 
* --enable-storeio="aufs" adalah metoda penyimpanan metode I/O. AUFS adalah Asynchronous, memiliki performa yang optimal di Linux.
 
* --enable-storeio="aufs" adalah metoda penyimpanan metode I/O. AUFS adalah Asynchronous, memiliki performa yang optimal di Linux.
 
* --enable-removal-policies="heap,lru" adalah pilihan opsi untuk removal policies
 
* --enable-removal-policies="heap,lru" adalah pilihan opsi untuk removal policies
* --with-maxfd=16384
+
* --with-maxfd=8192
 
* --enable-poll  
 
* --enable-poll  
 
* --disable-ident-lookups menghentikan squid dari melihat ident di setiap koneksi, bisa juga untuk mencegah serangan DDOS (membuka ribuan koneksi) yang dapat mematikan squid server
 
* --disable-ident-lookups menghentikan squid dari melihat ident di setiap koneksi, bisa juga untuk mencegah serangan DDOS (membuka ribuan koneksi) yang dapat mematikan squid server
Baris 62: Baris 66:
 
* --enable-delay-pools
 
* --enable-delay-pools
  
== Konfigurasi squid ==
+
=== Memulai Kompilasi ===
... buat ...
+
# cd /root/sumber
 +
# tar xjvf squid-3.1.10.tar.bz2
 +
# cd squid-3.1.10
 +
# CHOST="i686-pc-linux-gnu" \
 +
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" \
 +
CXXFLAGS="${CFLAGS}" \
 +
./configure \
 +
--bindir=/usr/bin \
 +
--datadir=/usr/share \
 +
--exec-prefix=/usr \
 +
--includedir=/usr/include \
 +
--infodir=/usr/share/info \
 +
--libexecdir=/usr/libexec \
 +
--localstatedir=/var \
 +
--mandir=/usr/share/man \
 +
--prefix=/usr \
 +
--program-prefix= \
 +
--sbindir=/usr/sbin \
 +
--sharedstatedir=/var/lib \
 +
--sysconfdir=/etc/squid \
 +
--disable-auth \
 +
--disable-basic-auth-helpers \
 +
--disable-dependency-tracking \
 +
--disable-digest-auth-helpers \
 +
--disable-epoll \
 +
--disable-external-acl-helpers \
 +
--disable-hostname-checks \
 +
--disable-htcp \
 +
--disable-ident-lookups \
 +
--disable-ipv6 \
 +
--disable-linux-tproxy \
 +
--disable-negotiate-auth-helpers \
 +
--disable-ntlm-auth-helpers \
 +
--disable-snmp \
 +
--disable-translation \
 +
--disable-wccp \
 +
--disable-wccpv2 \
 +
--enable-arp-acl \
 +
--enable-auth=basic,digest \
 +
--enable-async-io=32 \
 +
--enable-cache-digests \
 +
--enable-cachemgr-hostname=localhost \
 +
--enable-default-err-languages=English \
 +
--enable-delay-pools \
 +
--enable-err-languages=English \
 +
--enable-follow-x-forwarded-for \
 +
--enable-gnuregex \
 +
--enable-icmp \
 +
--enable-linux-transparent \
 +
--enable-linux-netfilter \
 +
--enable-removal-policies=heap,lru \
 +
--enable-storeio=aufs \
 +
--enable-underscores \
 +
--enable-useragent-log \
 +
--enable-zph-qos \
 +
--with-aufs-threads=32 \
 +
--with-default-user=squid \
 +
--with-dl \
 +
--with-filedescriptors=32768 \
 +
--with-large-files \
 +
--with-logdir=/var/log/squid \
 +
--with-maxfd=32768 \
 +
--with-pidfile=/var/run/squid.pid \
 +
--with-pthreads
 +
 
 +
Selanjutnya ketikkan perintah
 +
# make
 +
 
 +
Lanjutkan dengan
 +
# make install
 +
 
 +
Ketik perintah
 +
# ls -l /usr/sbin/squid
 +
-rwxr-xr-x 1 root root 2521209 Jan 29 13:30 /usr/sbin/squid
  
== cache memakai reiserfs ==
+
# strip /usr/sbin/squid
Pada bagian atas tulisan ini ada informasi tentan harddisk yang dipakai. Harddisk kedua masih kosong dan akan di format memakai reiserfs. Harddisk kedua ada di /dev/sdb1. Hardisk kedua (tempat direktori cache) memakai format ReiserFS.
+
  
=== Pasang reiserfs-utils ===
+
# ls -l /usr/sbin/squid
  # yum -y install reiserfs-utils
+
  -rwxr-xr-x 1 root root 2121976 Jan 29 13:31 /usr/sbin/squid
  
=== Format harddisk kedua ===
+
== 4. Konfigurasi ==
Jika unmount /dev/sdb1 lebih dulu:
+
# umount /dev/sdb1
+
  
  # mkfs.reiserfs /dev/sdb1
+
=== Konfigurasi squid.conf ===
  mkfs.reiserfs 3.6.21 (2009 www.namesys.com)
+
  # localhost
 +
acl manager proto cache_object
 +
acl localhost src 127.0.0.1/32
 +
  acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
 
   
 
   
  A pair of credits:
+
  # Jaringan lokal yang boleh mengakses
  Jeremy  Fitzhardinge  wrote  the  teahash.c code  for  V3Colin  Plumb  also
+
  #acl ip-admin src 192.168.228.10/32
  contributed to that.
+
  #acl localnet src 10.0.0.0/8
 +
  #acl localnet src 172.16.0.0/12
 +
  acl localnet src 192.168.228.0/24
 
   
 
   
  Hans Reiser was the project initiatorsource of all funding for the first 5.5
+
  acl SSL_ports port 443 563 # https, snews
  years. He is the architect and official maintainer.
+
acl Safe_ports port 80 81 # http
 +
acl Safe_ports port 21 # ftp
 +
acl Safe_ports port 443 563 # https, snews
 +
acl Safe_ports port 70 # gopher
 +
acl Safe_ports port 210 # wais
 +
acl Safe_ports port 1025-65535 # unregistered ports
 +
acl Safe_ports port 280 # http-mgmt
 +
acl Safe_ports port 488 # gss-http
 +
acl Safe_ports port 591 # filemaker
 +
acl Safe_ports port 631 # cups
 +
acl Safe_ports port 10000 # webmin
 +
acl Safe_ports port 777 # multiling http
 +
acl Safe_ports port 873 # rsync
 +
  acl Safe_ports port 901 # SWAT
 +
  acl CONNECT method CONNECT
 
   
 
   
  Guessing about desired format.. Kernel 2.6.35.6-37.ign5.i686.PAE is running.
+
  # Akses cachemgr hanya boleh dari localhost
  Format 3.6 with standard journal
+
# http_access allow manager ip-admin
  Count of blocks on the device: 17921280
+
http_access allow manager localhost
  Number of blocks consumed by mkreiserfs formatting process: 8758
+
http_access deny manager
  Blocksize: 4096
+
  Hash function used to sort names: "r5"
+
# Tolak permintaan ke Safe_ports
  Journal Size 8193 blocks (first block 18)
+
http_access deny !Safe_ports
  Journal Max transaction length 1024
+
  inode generation number: 0
+
# Tolak CONNECT ke selain SSL ports
  UUID: <no libuuid installed>
+
http_access deny CONNECT !SSL_ports
  ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
+
http_access deny to_localhost
ALL DATA WILL BE LOST ON '/dev/sdb1'!
+
http_access allow localnet
  Continue (y/n):
+
http_access allow localhost
 +
 +
# Terakhir: tolak yang lainnya untuk akses ke proxy
 +
http_access deny all
 +
 +
http_port 3128 transparent
 +
icp_port 3130
 +
 +
max_filedescriptors 32768
 +
dns_nameservers 127.0.0.1
 +
 +
hierarchy_stoplist cgi-bin ? .js .jsp .awt
 +
  acl QUERY urlpath_regex cgi-bin \? localhost
 +
  no_cache deny QUERY
 +
   
 +
  cache_mgr admin
 +
  cache_effective_user squid
 +
  cache_effective_group squid
 +
visible_hostname proxy
 +
 +
memory_replacement_policy heap LFUDA
 +
cache_replacement_policy heap GDSF
 +
 +
# Ukuran 50GB untuk cache_dir (contoh memakai harddisk SCSI)
 +
  # cache_dir aufs /cache/proxy1 50000 102 256
 +
  cache_dir aufs /cache/proxy1 7500 16 256
 +
 +
# cache_mem 256 MB
 +
cache_mem 128 MB
 +
 +
minimum_object_size 0 KB
 +
  maximum_object_size 128 MB
 +
  maximum_object_size_in_memory 64 KB
 +
 +
cache_swap_low 98
 +
cache_swap_high 99
 +
 +
#high_response_time_warning 2000
 +
#high_page_fault_warning 2
 +
#high_memory_warning 1900 MB
 +
 +
mime_table /etc/squid/mime.conf
 +
pid_filename /var/run/squid.pid
 +
# coredump_dir /cache/proxy1/
 +
coredump_dir none
 +
 +
access_log /var/log/squid/access.log
 +
cache_log /var/log/squid/cache.log
 +
cache_store_log /var/log/squid/store.log
 +
 +
#access_log none
 +
#cache_log /dev/null
 +
  #cache_store_log none
 +
 +
emulate_httpd_log off
 +
logfile_rotate 2
 +
log_fqdn off
 +
buffered_logs off
 +
client_netmask 255.255.255.255
 +
strip_query_terms off
 +
 +
refresh_pattern windowsupdate.com/.*\.(cab|exe\dll) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
 +
refresh_pattern download.microsoft.com/.*\.(cab|exe\dll) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
 +
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|psf) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
 +
refresh_pattern ^ftp: 20160 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
 +
refresh_pattern . 180 95% 120960 reload-into-ims override-lastmod
 +
 +
quick_abort_min 0 KB
 +
quick_abort_max 0 KB
 +
quick_abort_pct 100
 +
negative_ttl 2 minutes
 +
positive_dns_ttl 60 seconds
 +
negative_dns_ttl 30 seconds
 +
store_avg_object_size 16 KB
 +
vary_ignore_expire on
 +
client_lifetime 2 hours
 +
half_closed_clients off
 +
shutdown_lifetime 4 seconds
 +
log_icp_queries off
 +
icp_hit_stale on
 +
query_icmp on
 +
ipcache_size 4096
 +
ipcache_low 90
 +
ipcache_high 95
 +
fqdncache_size 4096
 +
memory_pools off
 +
forwarded_for off
 +
reload_into_ims on
 +
reload_into_ims on
 +
pipeline_prefetch on
  
Konfirmasi dengan mengetik "y" lalu ENTER
+
=== Menyiapkan folder untuk squid ===
  Continue (y/n):y
+
  mkdir -p /var/log/squid
  Initializing journal - 0%....20%....40%....60%....80%....100%
+
  touch /var/log/squid/access.log
  Syncing..ok
+
  chmod 770 /var/log/squid
  ReiserFS is successfully created on /dev/sdb1.
+
  chown -R squid:root /var/log/squid
 +
 +
touch /var/run/squid.pid
 +
mkdir -p /cache/proxy1
 +
chown -R squid:squid /cache/proxy1
  
== Modifikasi /etc/fstab ==
+
=== Periksa Konfigurasi ===
Lakukan modifikasi:
+
Konfigurasi squid.conf yang dibuat dapat diperiksa dengan:
  /dev/sdb1    /cache1    reiserfs    defaults,notail,noatime 1 2
+
  # squid -k parse
  
Folder /cache1 adalah nama direktori yang akan dipakai untuk menyimpan cache.  
+
2011/01/28 02:43:07| Processing Configuration File: /etc/squid/squid.conf (depth 0)
 +
2011/01/28 02:43:07| Starting Authentication on port [::]:3128
 +
2011/01/28 02:43:07| Disabling Authentication on port [::]:3128 (interception enabled)
 +
2011/01/28 02:43:07| Disabling IPv6 on port [::]:3128 (interception enabled)
 +
2011/01/28 02:43:07| WARNING: use of 'override-expire' in 'refresh_pattern' violates HTTP
 +
2011/01/28 02:43:07| WARNING: use of 'override-lastmod' in 'refresh_pattern' violates HTTP
 +
2011/01/28 02:43:07| WARNING: use of 'reload-into-ims' in 'refresh_pattern' violates HTTP
 +
2011/01/28 02:43:07| WARNING: use of 'ignore-reload' in 'refresh_pattern' violates HTTP
 +
2011/01/28 02:43:07| WARNING: use of 'ignore-no-cache' in 'refresh_pattern' violates HTTP
 +
2011/01/28 02:43:07| WARNING: use of 'ignore-private' in 'refresh_pattern' violates HTTP
  
== Mengatur Log ==
+
Abaikan warning yang muncul karena refresh_pattern yang dibuat memang diatur untuk mengabaikan beberapa pengaturan HTTP.
mkdir /var/log/squid
+
 
  touch /var/log/squid/access.log
+
=== Buat /etc/init.d/squid ===
  touch /var/run/squid.pid
+
Pada bagian awal skrip /etc/init.d/squid harus memakai "ulimit -n 32768"
  chown -R _squid:_squid /squid/cache/  
+
  # wget http://repo.informatika.lipi.go.id/panduan/wiki/squid -O /etc/init.d/squid
  chown -R _squid:_squid /var/run/pid
+
  # chmod 700 /etc/init.d/squid        
  chown -R _squid:_squid /var/log/squid/access.log
+
 
 +
Buat simbolik link untuk squid
 +
  # chkconfig --add squid
 +
             
 +
Agar squid otomatis jalan saat server dinyalakan, tambahkan service squid dengan chkconfig
 +
# chkconfig --level 345 squid on
 +
 
 +
=== Memasang squid di rc.local ===
 +
# echo "# Squid Proxy" >> /etc/rc.local
 +
# echo "/etc/init.d/squid start" >> /etc/rc.local
 +
 
 +
== 5. Buat swap ==
 +
Setelah konfigurasi squid.conf dilakukan, kini saatnya menjalankan squid. Ketikkan perintah agar squid membuat swap
 +
  # /usr/sbin/squid -z
 +
 
 +
== 6. Jalankan squid ==
 +
Pertama kali menjalankan squid sebaiknya mengaktifkan parameter debug, sehingga beberapa kesalahan dapat diketahui. Jalankan dengan cara:
 +
# /usr/sbin/squid -Nd1
 +
 
 +
Buka terminal kedua, lalu periksa apakah squid sudah jalan atau gagal, lakukan:
 +
 
 +
Cek apakah squid sudah berjalan apa belum dengan perintah
 +
  # 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      13109/(squid)     
 +
udp        0      0 0.0.0.0:6628                0.0.0.0:*                              13109/(squid)     
 +
udp        0      0 :::41063                    :::*                                    13109/(squid)     
 +
udp        0      0 :::3401                    :::*                                    13109/(squid)     
 +
udp        0      0 :::3130                    :::*                                    13109/(squid)
 +
 
 +
Setelah squid dijalankan, akses beberapa situs dari PC client, jika squid sudah berfungsi, hentikan squid dengan menekan Ctrl+C. Selanjutnya jalankan squid sebagai daemon. Caranya:
 +
# /etc/init.d/squid start
  
== Modifikasi /etc/sysctl.conf ==
+
== 7. Periksa log ==
Tambahkan baris berikut pada akhir file /etc/sysctl.conf
+
Ada di /var/log/squid/access.log
  fs.file-max = 65535
+
  # tail -f /var/log/squid/access.log
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 
+
  
== Penambahkan entri /etc/security/limits.conf ==
+
Tampilan log ringkas
* - nofile 65535
+
# tail -f /var/log/squid/access.log | awk '{print$3 " " $8 " " $7}'
  
== Boot ulang server ==
+
== 8. Boot ulang server ==
 
Lakukan reboot, kemudian jalankan squid.
 
Lakukan reboot, kemudian jalankan squid.
  
[1] http://forum.linux.or.id/viewtopic.php?f=40&t=20030#p117128
+
Referensi
[x] http://www.scribd.com/doc/47172020/Cara-Instal-dan-Optimasi-Squid-Proxy-Server
+
* [1] http://forum.linux.or.id/viewtopic.php?f=40&t=20030#p117128
 +
* [x] http://www.scribd.com/doc/47172020/Cara-Instal-dan-Optimasi-Squid-Proxy-Server
 +
* [x] http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel
 +
* [pf] http://directory.fedoraproject.org/wiki/Performance_Tuning
 +
* [fd] http://www.cyberciti.biz/faq/squid-proxy-server-running-out-filedescriptors/
 +
* http://www.linuxinfo.com.br/squid_tproxy.htm
 +
* https://wiki.archlinux.org/index.php/Reiser4FShowto

Revisi terkini pada 11 Februari 2011 02.15

Optimasi squid dapat lebih ditingkatkan dengan melakukan kompilasi dari source squid.

1. Spesifikasi Server

Berikut ini kompilasi squid untuk spesifikasi:

  1. Sistem Operasi memakai IGOS Nusantara 2010 (Instal minimal)
  2. Posesor Intel(R) Xeon(TM) CPU 3.00GHz
  3. RAM 1 GB (yup memori masih kecil, harusnya update ke 4 GB)
  4. Harddisk 2 x 80 GB SCSI
    • Harddisk1: /dev/sda (untuk menyimpan sistem operasi)
    • Harddisk2: /dev/sdb (untuk menyimpan cache squid)

2. Prasyarat untuk optimasi squid

Sebelum melakukan kompilasi squid, beberapa hal sudah selesai dikonfigurasi dan berfungsi denganbaik, yaitu:

  1. Mengetahui skema jaringan, ada di: http://igos-nusantara.or.id/wiki/Skema_Jaringan
  2. Instal IGOS Nusantara sebagai server, memakai pilihan minimal/konsol, ada di: http://igos-nusantara.or.id/wiki/Instal_IGOS_Nusantara_minimal-konsol
  3. Memformat harddisk kedua, ada di: http://igos-nusantara.or.id/wiki/Memformat_harddisk_kedua
  4. Tuning file sistem, ada di: http://igos-nusantara.or.id/wiki/Tuning_file_sistem

3. Kompilasi Squid

Pasang paket untuk kompilasi squid

# yum -y install gcc 
# yum -y install gcc-c++
# yum -y install libxml2-devel libcap-devel

Instal semua dalam satu baris perintah:

# yum -y install gcc gcc-c++ libxml2-devel libcap-devel

Unduh squid-3.1.10.tar.bz2

# mkdir /root/sumber
# cd /root/sumber
# wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.10.tar.bz2

Buat group dan user

Group dan user yang akan dipakai untuk menjalankan squid dibuat dengan cara:

# useradd squid -c "Squid Proxy" -M -d /cache/proxy1 -s /bin/false

Optimasi Kompilasi

Kompilasi agar optimal perlu memakai opsi atau FLAG yang sesuai dengan prosesor. Informasi tentang prosesor ada di /proc/cpuinfo

# cat /proc/cpuinfo
# cat /proc/cpuinfo | grep family
cpu family	: 15
cpu family	: 15
[root@intra ~]# cat /proc/cpuinfo |grep model
model		: 4
model name	: Intel(R) Xeon(TM) CPU 3.00GHz

Informasi yang diperoleh dari /proc/cpuinfo kemudian disesuaikan dengan flag kompilasi yang ada Gentoo Wiki[1], yaitu diperoleh:

CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

Parameter Kompilasi

Paramater yang dipakai untuk kompilasi sebagian disesuaikan dengan squid.spec yang ada squid-*-.src.rpm dari Fedora 13 (F13). Info: F13 adalah basis IGOS Nusantara 2010. Berikut penjelasan sebagian parameter yang akan dipakai saat kompilasi:

  • --enable-async-io untuk mengaktifkan asynchronous I/O dalam proses baca/tulis ke harddisk. Memakai 16 bila memakai satu harddisk jenis lama (buffer hanya 2 MB). Bila memakai harddisk model baru dengan buffer 8 MB, 16 MB atau 32 MB dapat memakai 32.
  • --enable-useragent-log berguna agar squid mencatat useragent di entri log
  • --enable-snmp aktifkan snmp, misal mencatat statistik squid lalu ditampilkan dalam bentuk grafik.
  • --enable-cache-digests harus diaktifkan jika memakai cache peer.
  • --enable-storeio="aufs" adalah metoda penyimpanan metode I/O. AUFS adalah Asynchronous, memiliki performa yang optimal di Linux.
  • --enable-removal-policies="heap,lru" adalah pilihan opsi untuk removal policies
  • --with-maxfd=8192
  • --enable-poll
  • --disable-ident-lookups menghentikan squid dari melihat ident di setiap koneksi, bisa juga untuk mencegah serangan DDOS (membuka ribuan koneksi) yang dapat mematikan squid server
  • --enable-truncate memerintahkan squid untuk selalu menggunakan truncate() ketimbang unlink() ketika menghapus file cache.
  • --enable-delay-pools

Memulai Kompilasi

# cd /root/sumber
# tar xjvf squid-3.1.10.tar.bz2
# cd squid-3.1.10
# CHOST="i686-pc-linux-gnu" \
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" \
CXXFLAGS="${CFLAGS}" \
./configure \
--bindir=/usr/bin \
--datadir=/usr/share \
--exec-prefix=/usr \
--includedir=/usr/include \
--infodir=/usr/share/info \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--mandir=/usr/share/man \
--prefix=/usr \
--program-prefix= \
--sbindir=/usr/sbin \
--sharedstatedir=/var/lib \
--sysconfdir=/etc/squid \
--disable-auth \
--disable-basic-auth-helpers \
--disable-dependency-tracking \
--disable-digest-auth-helpers \
--disable-epoll \
--disable-external-acl-helpers \
--disable-hostname-checks \
--disable-htcp \
--disable-ident-lookups \
--disable-ipv6 \
--disable-linux-tproxy \
--disable-negotiate-auth-helpers \
--disable-ntlm-auth-helpers \
--disable-snmp \
--disable-translation \
--disable-wccp \
--disable-wccpv2 \
--enable-arp-acl \
--enable-auth=basic,digest \
--enable-async-io=32 \
--enable-cache-digests \
--enable-cachemgr-hostname=localhost \
--enable-default-err-languages=English \
--enable-delay-pools \
--enable-err-languages=English \
--enable-follow-x-forwarded-for \
--enable-gnuregex \
--enable-icmp \
--enable-linux-transparent \
--enable-linux-netfilter \
--enable-removal-policies=heap,lru \
--enable-storeio=aufs \
--enable-underscores \
--enable-useragent-log \
--enable-zph-qos \
--with-aufs-threads=32 \
--with-default-user=squid \
--with-dl \
--with-filedescriptors=32768 \
--with-large-files \
--with-logdir=/var/log/squid \
--with-maxfd=32768 \
--with-pidfile=/var/run/squid.pid \
--with-pthreads 

Selanjutnya ketikkan perintah

# make

Lanjutkan dengan

# make install

Ketik perintah

# ls -l /usr/sbin/squid
-rwxr-xr-x 1 root root 2521209 Jan 29 13:30 /usr/sbin/squid
# strip /usr/sbin/squid
# ls -l /usr/sbin/squid
-rwxr-xr-x 1 root root 2121976 Jan 29 13:31 /usr/sbin/squid

4. Konfigurasi

Konfigurasi squid.conf

# localhost
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

# Jaringan lokal yang boleh mengakses
#acl ip-admin src 192.168.228.10/32
#acl localnet src 10.0.0.0/8
#acl localnet src 172.16.0.0/12
acl localnet src 192.168.228.0/24

acl SSL_ports port 443 563 # https, snews
acl Safe_ports port 80 81 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 631 # cups
acl Safe_ports port 10000 # webmin
acl Safe_ports port 777 # multiling http
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl CONNECT method CONNECT

# Akses cachemgr hanya boleh dari localhost
# http_access allow manager ip-admin
http_access allow manager localhost
http_access deny manager

# Tolak permintaan ke Safe_ports
http_access deny !Safe_ports

# Tolak CONNECT ke selain SSL ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow localnet
http_access allow localhost

# Terakhir: tolak yang lainnya untuk akses ke proxy
http_access deny all

http_port 3128 transparent
icp_port 3130

max_filedescriptors 32768
dns_nameservers 127.0.0.1

hierarchy_stoplist cgi-bin ? .js .jsp .awt 
acl QUERY urlpath_regex cgi-bin \? localhost
no_cache deny QUERY

cache_mgr admin
cache_effective_user squid
cache_effective_group squid
visible_hostname proxy

memory_replacement_policy heap LFUDA
cache_replacement_policy heap GDSF

# Ukuran 50GB untuk cache_dir (contoh memakai harddisk SCSI)
# cache_dir aufs /cache/proxy1 50000 102 256
cache_dir aufs /cache/proxy1 7500 16 256

# cache_mem 256 MB
cache_mem 128 MB

minimum_object_size 0 KB
maximum_object_size 128 MB
maximum_object_size_in_memory 64 KB

cache_swap_low 98
cache_swap_high 99

#high_response_time_warning 2000
#high_page_fault_warning 2
#high_memory_warning 1900 MB

mime_table /etc/squid/mime.conf
pid_filename /var/run/squid.pid
# coredump_dir /cache/proxy1/
coredump_dir none

access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

#access_log none
#cache_log /dev/null
#cache_store_log none

emulate_httpd_log off
logfile_rotate 2
log_fqdn off
buffered_logs off
client_netmask 255.255.255.255
strip_query_terms off

refresh_pattern windowsupdate.com/.*\.(cab|exe\dll) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern download.microsoft.com/.*\.(cab|exe\dll) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|psf) 259200 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern ^ftp: 20160 95% 259200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern . 180 95% 120960 reload-into-ims override-lastmod

quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
negative_ttl 2 minutes
positive_dns_ttl 60 seconds
negative_dns_ttl 30 seconds
store_avg_object_size 16 KB
vary_ignore_expire on
client_lifetime 2 hours
half_closed_clients off
shutdown_lifetime 4 seconds
log_icp_queries off
icp_hit_stale on
query_icmp on
ipcache_size 4096
ipcache_low 90
ipcache_high 95
fqdncache_size 4096
memory_pools off
forwarded_for off
reload_into_ims on
reload_into_ims on
pipeline_prefetch on

Menyiapkan folder untuk squid

mkdir -p /var/log/squid
touch /var/log/squid/access.log
chmod 770 /var/log/squid
chown -R squid:root /var/log/squid

touch /var/run/squid.pid
mkdir -p /cache/proxy1
chown -R squid:squid /cache/proxy1

Periksa Konfigurasi

Konfigurasi squid.conf yang dibuat dapat diperiksa dengan:

# squid -k parse
2011/01/28 02:43:07| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2011/01/28 02:43:07| Starting Authentication on port [::]:3128
2011/01/28 02:43:07| Disabling Authentication on port [::]:3128 (interception enabled)
2011/01/28 02:43:07| Disabling IPv6 on port [::]:3128 (interception enabled)
2011/01/28 02:43:07| WARNING: use of 'override-expire' in 'refresh_pattern' violates HTTP
2011/01/28 02:43:07| WARNING: use of 'override-lastmod' in 'refresh_pattern' violates HTTP
2011/01/28 02:43:07| WARNING: use of 'reload-into-ims' in 'refresh_pattern' violates HTTP
2011/01/28 02:43:07| WARNING: use of 'ignore-reload' in 'refresh_pattern' violates HTTP
2011/01/28 02:43:07| WARNING: use of 'ignore-no-cache' in 'refresh_pattern' violates HTTP
2011/01/28 02:43:07| WARNING: use of 'ignore-private' in 'refresh_pattern' violates HTTP

Abaikan warning yang muncul karena refresh_pattern yang dibuat memang diatur untuk mengabaikan beberapa pengaturan HTTP.

Buat /etc/init.d/squid

Pada bagian awal skrip /etc/init.d/squid harus memakai "ulimit -n 32768"

# wget http://repo.informatika.lipi.go.id/panduan/wiki/squid -O /etc/init.d/squid
# chmod 700 /etc/init.d/squid          

Buat simbolik link untuk squid

# chkconfig --add squid
              

Agar squid otomatis jalan saat server dinyalakan, tambahkan service squid dengan chkconfig

# chkconfig --level 345 squid on

Memasang squid di rc.local

# echo "# Squid Proxy" >> /etc/rc.local
# echo "/etc/init.d/squid start" >> /etc/rc.local

5. Buat swap

Setelah konfigurasi squid.conf dilakukan, kini saatnya menjalankan squid. Ketikkan perintah agar squid membuat swap

# /usr/sbin/squid -z

6. Jalankan squid

Pertama kali menjalankan squid sebaiknya mengaktifkan parameter debug, sehingga beberapa kesalahan dapat diketahui. Jalankan dengan cara:

# /usr/sbin/squid -Nd1

Buka terminal kedua, lalu periksa apakah squid sudah jalan atau gagal, lakukan:

Cek apakah squid sudah berjalan apa belum dengan perintah

# 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      13109/(squid)       
udp        0      0 0.0.0.0:6628                0.0.0.0:*                               13109/(squid)       
udp        0      0 :::41063                    :::*                                    13109/(squid)       
udp        0      0 :::3401                     :::*                                    13109/(squid)       
udp        0      0 :::3130                     :::*                                    13109/(squid)

Setelah squid dijalankan, akses beberapa situs dari PC client, jika squid sudah berfungsi, hentikan squid dengan menekan Ctrl+C. Selanjutnya jalankan squid sebagai daemon. Caranya:

# /etc/init.d/squid start

7. Periksa log

Ada di /var/log/squid/access.log

# tail -f /var/log/squid/access.log

Tampilan log ringkas

# tail -f /var/log/squid/access.log | awk '{print$3 " " $8 " " $7}'

8. Boot ulang server

Lakukan reboot, kemudian jalankan squid.

Referensi