Friday 3 July 2015

Ubuntu 14.04 + Squid 3.5.5 Untuk Proxy HTTP Dan HTTPS

Ada banyak sekali tutorial dengan berbagai pendekatan berbeda sesuai selera pribadi masing-masing "tukang masak" server proxy squid. Tutorial yang beragam tentu bisa anda dapat cari di google. Sama seperti yang saya racik dengan resep yang saya comot sana-sini. Karena tutorial berikut ini merupakan catatan saya agar tidak lupa, saya tidak berharap anda yang membaca bisa mengerti dengan cepat.

Belajar sendiri, trial dan error alias otodidak tentu lebih memperoleh kepuasan jika berhasil.
Saya juga demikian.

Banyak kombinasi sebetulnya antara OS Server dengan Squid sebagai proxy cache, namun saya lebih suka dengan Ubuntu.

Anda bisa mengunakan tutorial menginstall Ubuntu Server yang menurut anda lebih anda fahami. Videonya juga banyak di Youtube. Kalau saya belajarnya dari : Install Ubuntu Untuk Server Squid.

Sebenarnya pentingkah mencache HTTPS?
Bagi saya : Ya!, sangat penting.
Alasannya : Koneksi ADSL yang masih di bawah 10 Mb dan banyak web saat ini menggunakan port 443 alias SSL untuk transaksi data, termasuk media sosial seperti Facebook dan Twitter. Pada jam-jam sibuk Warnet yang saya kelola akan sangat lemot. Facebook loadingnya lama karena tiap PC mengaksesnya. Padahal jika dipikir-pikir orang yang sama akan mengakses halaman yang sama berulang kali tiap hari dan komputer client meminta data yang sama ke internet tiap hari. Menyia-nyakan bandwidth saja.

Lalu bukankah HTTPS itu diciptakan untuk keamanan?
Pada dasarnya Squid melakukan SSL bump sebagai tindakan pembajakan. Sertifikat asli milik (misalnya) facebook ditimpa dengan milik Squid agar Squid bisa mencache file-file grafis yang menguras bandwith itu ke dalam hardisk server. Terpaksa. Kalau mode HTTP biasa sih normal saja.

Spesifikasi Komputer yang saya gunakan:
Core2Duo 2,0 GHz, RAM 2 GB DDR2, HDD SATA 500 GB
Pembagian Hardisk yang saya gunakan sbb :

Harddisk 500GB (saya pakai kapasitas segini)

 Primary Root (/) 100 GB EXT4  
 Logical Swap 4 GB (2X Jumlah RAM)  
 Logical mount point : /Cache1 50 GB btrfs journaling, mount option noatime+nodiratime  
 Logical mount point : /Cache2 50 GB  btrfs journaling, mount option noatime+nodiratime
 Logical mount point : /Cache3 50 GB  btrfs journaling, mount option noatime+nodiratime
 Logical mount point : /Cache4 50 GB  btrfs journaling, mount option noatime+nodiratime
 Logical mount point : /Cache5 50 GB  btrfs journaling, mount option noatime+nodiratime
Untuk masalah pemasangan Ubuntu di PC Server, diluar pembahasan atau sudah dianggap selesai.

Setelah kita menyelesaikan instalasi Ubuntu, ada beberapa hal yang perlu di seting. Pertama adalah mengeset SSH di Ubuntu agar Putty (Remote Command) bisa login sebagai root (Karena saya capek sudo su mulu).

Kita bekerja selalu di modus Terminal, karena ini server bung! Bukan Desktop dengan GUI.
Langkahnya :

 #nano /etc/ssh/sshd_config [enter]
Carilah baris :

 # Authentication:  
 LoginGraceTime 120  
 PermitRootLogin without-password  
 StrictModes yes  
Ubahlah menjadi :

 # Authentication:  
 LoginGraceTime 120  
 #PermitRootLogin without-password  
 PermitRootLogin yes  
 StrictModes yes  
Simpan dengan tombol ctrl+x lalu y [enter]

 #service ssh restart  [enter]
 #ssh stop/waiting
 #ssh start/running, process 1588
Lalu buat password root yang baru

 #passwd [enter]  
 #masukkanpassword [enter]
 #masukkansekalilagi [enter]  
Selesai.

Kita akan pindah ke PC Windows (Kita tidak lagi main langsung di PC Server)
Download aplikasi Putty dari : Putty download untuk akses remote terminal dan WinSCP di WinSCP download untuk Remote File Managernya. Silahkan rujuk masing-masing program bagaimana cara pakainya.

Saya anggap anda sudah faham menggunakan kedua program tersebut dan sudah berada di terminal Putty dan login sebagai root.
Update dulu Ubuntunya

 #apt-get update [enter]  
Lalu Install Aplikasi pendukung Squidnya

 # apt-get install devscripts build-essential openssl libssl-dev fakeroot libcppunit-dev libsasl2-dev cdbs ccze libfile-readbackwards-perl libcap2 libcap-dev libcap2-dev -y [enter]  

  # apt-get install sysv-rc-conf -y [enter]  
Setelah selesai, kita masuk ke proses download master source Squidnya.

# cd [enter]  
# wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.5.tar.gz [enter]  

 # tar xzvf squid-3.5.5.tar.gz  [enter]

 # cd squid-3.5.5  [enter]
Copas kode di bawah ke terminal tanpa kurang atau lebih

./configure \
--prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/lib/squid \
--sysconfdir=/etc/squid \
--localstatedir=/var \
--libdir=/usr/lib \
--includedir=/usr/include \
--datadir=/usr/share/squid \
--infodir=/usr/share/info \
--mandir=/usr/share/man \
--disable-dependency-tracking \
--disable-strict-error-checking \
--enable-async-io=32 \
--with-aufs-threads=32 \
--with-pthreads \
--enable-storeio=ufs,aufs,diskd \
--enable-removal-policies=lru,heap \
--with-aio \
--with-dl \
--enable-icmp \
--enable-esi \
--enable-icap-client \
--disable-wccp \
--disable-wccpv2 \
--enable-kill-parent-hack \
--enable-cache-digests \
--disable-select \
--enable-http-violations \
--enable-linux-netfilter \
--enable-follow-x-forwarded-for \
--disable-ident-lookups \
--enable-x-accelerator-vary \
--enable-zph-qos \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid \
--with-swapdir=/var/spool/squid \
--with-large-files \
--with-openssl \
--enable-ltdl-convenience \
--with-filedescriptors=65536 \
--enable-ssl \
--enable-ssl-crtd \
--disable-auth

Lalu tekan Enter.

Kemudian kita mulai compile...

 #make && make install && make install-pinger [enter]  
Proses ini mungkin akan memakan waktu 10 sampai 30 menit, santai saja.
Setelah proses ini selesai, silahkan download file squid.zip lalu ekstrak ke folder komputer anda.
Akan ada 3 file yang diperlukan : squid, squid.conf dan store-id.pl
Jalankan WinSCP dan login sebagai root

Copy file squid ke direktori /etc/init.d/
Copy file squid.conf dan store-id.pl ke /etc/squid/

Kembali ke Terminal Putty dan ketikkan perintah berikut

 #chmod 755 /etc/init.d/squid [enter]  
 #update-rc.d squid defaults [enter]  
 #/etc/init.d/squid stop [enter]  
Pastikan direktori-direktori yang diperlukan sudah ada
Misalnya direktori /var/log/squid.
Jika belum ada, buat dengan perintah : md nama_direktori

Ubah owner direktori /var/log/squid

 # chown -R proxy:proxy /var/log/squid [enter]  
Masuk ke direktori /var/log/squid

 # cd /var/log/squid [enter]  
Ciptakan dua buah file baru untuk log

 # touch access.log [enter]  
 # touch cache.log [enter]  
Kembali ke direktori root

 # cd [enter]  
Ubah owner dua file yang diciptakan tadi

 Ketik # chown -R proxy:proxy /var/log/squid/access.log [enter]  
 Ketik # chown -R proxy:proxy /var/log/squid/cache.log [enter]  
Ubah owner partisi mount point cache yang kita buat saat install server Ubuntu

 # chown -R proxy:proxy /cache1 [enter]
 # chown -R proxy:proxy /cache2 [enter]
 # chown -R proxy:proxy /cache3 [enter]
 # chown -R proxy:proxy /cache4 [enter]
 # chown -R proxy:proxy /cache5 [enter]
Ubah owner file store-id.pl

 # chown -R proxy:proxy /etc/squid/store-id.pl [enter]  
Ubah mode direktori cache

 # chmod 777 /cache1 [enter]
 # chmod 777 /cache2 [enter]
 # chmod 777 /cache3 [enter]
 # chmod 777 /cache4 [enter]
 # chmod 777 /cache5 [enter]
Ubah mode file store-id.pl

 # chmod 777 /etc/squid/store-id.pl [enter]  
Masuk direktori squid

 # cd /etc/squid [enter]  
Buat direktori sertificate

 # mkdir ssl_cert [enter]  

 # cd ssl_cert [enter]  
Di sinilah rahasia mengapa Squid 3.5 bisa mencache file terenkripsi alias mode port https.

 # openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout myCA.pem -out myCA.pem [enter]  
File hasil generate ini nantinya akan kita import ke dalam browser misalnya Mozilla Firefox atau Chrome. Squid https tidak akan bisa berkomunikasi dengan browser menggunakan port https jika sertifikat keamanan milik squid tidak dikenali.
Cara import sertifikat ke dalam browser boleh ikuti langkah di Youtube ini

 # openssl x509 -in myCA.pem -outform DER -out myCA.der [enter]  

  # cd [enter]  

  # mkdir /var/squid [enter]  

 # cd /var/squid [enter]  

 # mkdir ssl_db [enter]  

 # cd [enter]  

 # chown -R nobody /var/squid/ssl_db/ [enter]  
Mengaitkan library ke sertifikat database

 # /usr/lib/squid/ssl_crtd -c -s /var/squid/ssl_db/certs [enter]  

 # chown -R proxy:proxy /var/squid/ssl_db/ [enter]  
Selanjutnya kita periksa apakah semua proses di atas sudah benar, lalu kita parsing konfigurasi squid

 # squid -k parse [enter]  
Jika semua aman maka kita lanjut membuat direktori squid dalam partisi cache (yang lima buah tadi),
mengikuti pengaturan konfigurasi squid.conf

 # squid -z [enter]  
Kemudian restart service squidnya

 # /etc/init.d/squid restart [enter]  
Terakhir adalah mengatur mangle di IP Table milik Ubuntu, untuk mengarahkan permintaan client ke port yang benar.

Buka WinSCP lalu buka file /etc/rc.local
Copy lalu paste semua script di bawah ini di atas baris "exit.0" dalam file rc.local

 modprobe xt_TPROXY  
 modprobe xt_socket  
 modprobe nf_tproxy_core  
 modprobe xt_mark  
 modprobe nf_nat  
 modprobe nf_conntrack_ipv4  
 modprobe nf_conntrack  
 modprobe nf_defrag_ipv4  
 modprobe ipt_REDIRECT  
 modprobe iptable_nat  
 iptables -t mangle -F  
 iptables -t mangle -X  
 iptables -t mangle -N DIVERT  
 iptables -t mangle -A DIVERT -j MARK --set-mark 1  
 iptables -t mangle -A DIVERT -j ACCEPT  
 iptables -t mangle -A INPUT -j ACCEPT  
 iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT  
 iptables -t mangle -A PREROUTING ! -d 192.168.0.50/24 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129  
 iptables -t mangle -A PREROUTING ! -d 192.168.0.50/24 -p tcp --dport 443 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3127  
 /sbin/ip rule add fwmark 1 lookup 100  
 /sbin/ip route add local 0.0.0.0/0 dev lo table 100  
 echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter  
 echo 1 > /proc/sys/net/ipv4/ip_forward  

Informasi : alamat IP yang berwarna merah, sesuaikan dengan IP PC Server Ubuntu+Squid anda.

Restart PC Server

 # reboot [enter]  
Lalu coba uji apakah ada muncul kesalahan

 # squid –k reconfigure [enter]  
Error yang mungkin muncul terkait dengan store-id.pl
Coba atasi dengan menghapus atau menimpa store-id.pl yang ada di /etc/squid/ dengan yang baru (hasil download). Lakukan lagi chown seperti proses di atas khusus untuk file store-id.pl saja.
Dan lakukan perintah di bawah kembali

 # squid –k reconfigure [enter]  

Sumber utama tutorial : Cara-instalasi-squid-3x