PF + Transparent Proxy dengan Squid

Rasanya tidak perlu lagi dijelaskan fungsi maupun kegunaan Squid karena sudah banyak situs-situs lain yang menguraikannya secara gamblang, baik berbahasa Indonesia maupun bahasa asing.Artikel ini terfokus secara teknisnya saja, bagaimana menginstalasi Squid dan mengkonfigurasi Squid sebagai transparent proxy melalui firewall yang sudah ada di server. Berdasarkan pengalaman, metode instalasi dan konfigurasi yang saya gunakan dapat berjalan dengan baik di server dengan sistem operasi Linux maupun BSD.

Karena Squid membutuhkan memory yang cukup besar, maka untuk kebutuhan minimal memory untuk saat ini adalah 256MB. Di samping itu, Squid juga memerlukan tipe penyimpanan (disk) dengan kecepatan tinggi semacam SCSI, namun sebenarnya tipe hard disk IDE pun saat ini juga sudah mempunyai kecepatan tinggi, bahkan ada yang sudah mencapai 7200 rpm, mungkin 10000 rpm.
Di mesin dengan FreeBSD maupun OpenBSD, sebelum menginstalasi Squid sebaiknya me-recompile kernel untuk dukungan diskd dengan options tambahan berikut:
options SYSVMSG # SYSV-style message queues
options MSGMNB=32768 # jumlah maksimal byte yang disimpan di queue
options MSGMNI=164 # jumlah message queue identifiers
options MSGSEG=8196 # jumlah message segments per queue
options MSGSSZ=512 # besarnya sebuah message segment
options MSGTQL=2048 # jumlah maksimal messages pada system.
Pembahasan lebih lengkap options di atas dapat di baca di Squid FAQ
1. Download dan Instalasi Squid
Source Squid dapat diambil secara gratis di http://www.squid-cache.org. Versi stable saat artikel ini ditulis adalah squid-2.6.STABLE4
  • Download dan simpan, misalnya di /home/rp25rb.
  • Buat direktori untuk menyimpan cache dan user owner squid:
    squid# mkdir /cache1
    squid# useradd -d /cache1 -r -s /dev/null squid >/dev/null 2>&1
    Untuk penamaan direktori penyimpanan cache ini bisa apa saja, dan sebaiknya dibuat pada saat proses instalasi sistem dengan membagikan partisi secara terpisah dari filesystem. Umumnya saya membuat lebih dari satu partisi untuk cache tersebut.
  • Ubah kepemilikan dir cache yang sudah kita buat ke squid user yang baru kita buat sebelumnya.
    squid# chown -R squid:squid /cache1
    Gunakan juga command di atas untuk mengubah kepemilikan bila mempunyai lebih dari satu cache directory.
  • Decompress source file:
    squid# tar -jxf squid-2.6.STABLE4.tar.bz2
    squid# cd squid-2.6.STABLE4
  • Anda harus mengubah beberapa baris source code yang terdapat pada filesrc/Makefile.in untuk menyesuaikan direktori log dan cache pada saat kompilasi berikutnya. Baris-baris yang harus diubah adalah:
    DEFAULT_LOG_PREFIX = $(localstatedir)/log/squid
    DEFAULT_CACHE_LOG = $(DEFAULT_LOG_PREFIX)/cache.log
    DEFAULT_ACCESS_LOG = $(DEFAULT_LOG_PREFIX)/access.log
    DEFAULT_STORE_LOG = $(DEFAULT_LOG_PREFIX)/store.log
    DEFAULT_PID_FILE = $(DEFAULT_LOG_PREFIX)/squid.pid
    DEFAULT_SWAP_DIR = /cache1
  • Langkah berikutnya adalah meng-compile source:
    squid# ./configure \
    –prefix=/usr/local/squid \
    –enable-gnuregex \
    –enable-async-io=24 \
    –with-aufs-threads=24 \
    –with-pthreads \
    –with-aio \
    –with-dl \
    –enable-storeio=aufs,diskd \
    –enable-removal-policies=heap \
    –enable-icmp \
    –enable-delay-pools \
    –disable-wccp \
    –enable-snmp \
    –enable-cache-digests \
    –enable-default-err-languages=English \
    –enable-err-languages=English \
    –enable-linux-netfilter \
    –disable-ident-lookups \
    –disable-hostname-checks \
    –enable-underscores

    Keterangan mengenai kegunaan options di atas selengkapnya dapat dibaca di Squid FAQ.
    squid# make && make install
  • Buat direktori log, misalnya di /var/log/squid:
    squid# mkdir -p /var/log/squid
  • Ganti kepemilikan direktori log ke squid:
    squid# chown squid:squid /var/log/squid
  • Ubah permission direktori log dan cache, agar dapat ditulisi oleh user squid.
    squid# chmod 750 /cache1
    Ubah juga permission di semua direktori cache yang lain, apabila lebih dari satu direktori cache.
    squid# chmod 750 /var/log/squid
2. Konfigurasi Squid
Sampai pada langkah di atas, proses instalasi Squid sudah berhasil jika sebelumnya tidak terdapat kesalahan. Untuk membuat Squid dapat berfungsi secara optimal, kita harus mengedit file konfigurasi yang disediakan oleh Squid, umumnya file konfigurasi Squid adalahsquid.conf. Bila anda butuh bantuan mengenai optimasi Squid ini, silakan kunjungi Forum Komunitas Linux Indonesia. Teman-teman di forum tersebut akan senang membantu permasalahan anda.
Tutorial ini tidak akan membahas baris per baris keterangan yang terdapat di file squid.conf. Contoh squid.conf yang biasa saya gunakan dapat anda akses di arsip File Konfigurasi Squid
3. Membuat Swap dan Menjalankan Squid
Gunakan command berikut untuk membuat swap:
squid# /usr/local/squid/sbin/squid -z
Bila tidak ada kesalahan pada file konfigurasi, lanjutkan dengan mengaktifkan daemon Squid dengan command:
squid# /usr/local/squid/sbin/squid -D
Selamat, anda sudah berhasil menginstalasi dan mengkonfigurasi Squid sebagai proxy server. Langkah selanjutnya adalah mengkonfigurasi rule firewall untuk memungsikan squid sebagai transparent proxy.
4. Transparent Proxy dengan iptables, pf, dan ipfilter
Bila menggunakan iptables untuk konfigurasi transparent proxy, sebaiknya pada saat kompilasi Squid menyertakan opsi –enable-linux-netfilter.
Pengguna iptables, jalankan command berikut:
squid# iptables -t nat -A PREROUTING -s 192.168.1.0/24 -d 0/0 -p tcp –dport 80 -j REDIRECT –to-ports 3128
squid# iptables-save > /etc/sysconfig/iptables
Pada kebanyakan distro Linux, command kedua berfungsi untuk menyimpan command iptables sebelumnya agar saat booting, konfigurasi transparent proxy tetap aktif. Bagi pengguna Linux yang tidak menyimpan file konfigurasi firewall di direktori /etc/sysconfigsilakan untuk menyesuaikan sendiri.
Bagaimana mengaktifkan transparent proxy di Platform BSD dengan menggunakan PF dan ipfilter?
Sebelum menggunakan PF dan IPF sebagai firewall, anda harus mengkompilasi ulang kernel agar mengaktifkan salah satu modul tersebut.
Bila menggunakan IPF, options yang harus ditambahkan adalah:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_DEFAULT_TO_ACCEPT
Sedangkan options untuk PF adalah:
device pf
device pflog
device pfsync
Catatan: Dari kedua firewall tersebut, pakai salah satu yang sesuai selera Anda. Saya prefer ke PF, maka saya aktifkan modul kernel untuk PF saja.
Agar PF diload saat booting, edit file /etc/rc.conf dan tambahkan baris berikut:
pf_enable=”YES”
pf_rules=”/etc/pf.conf”
pf_flags=”"
pflog_enable=”YES”
pflog_logfile=”/var/log/pflog”
pflog_flags=”"
Selanjutnya edit file /etc/pf.conf dan tambahkan baris berikut:
# saya asumsikan rl1 adalah interface ke LAN anda.
rdr on rl1 proto tcp from 192.168.1.0/24 to any port www -> 192.168.1.100 port 3128
Lalu aktifkan PF dengan command:
squid# pfctl -e
squid# pfctl -N -f /etc/pf.conf
Bila anda ingin menggunakan ipfilter, anda harus menambahkan baris-baris berikut ke dalam file /etc/rc.conf:
ipfilter_enable=”YES”
ipnat_enable=”YES”
ipmon_enable=”YES”
ipfs_enable=”YES”
Kemudian edit file /etc/ipnat.rules dan tambahkan baris berikut:
# saya asumsikan rl1 adalah interface ke LAN anda.
rdr rl1 0/0 port 80 -> 127.0.0.1 port 3128 tcp
5. Done
Demikian tutorial sederhana cara menginstal dan mengkonfigurasi Squid sebagai transparent proxy.

Comments