Berdasarkan pengamatan, ada dua model topologi pada jaringan sederhana yang
menggunakan mesin linux tambahan dengan squid untuk melakuka http cache. Tulisan
ini bermaksud untuk memberikan alternatif topologi dengan memanfaatkan tproxy (A set
of kernel patches reimplementing support for userspace transparent proxies).
1. Squid sejajar dengan klien dan intersepsi port http dilakukan dengan melakukan
dst-nat ataupun /ip proxy parent dengan redirect port (Konfigurasi A).
2. Squid berada setelah router dan menjadi router kedua yang melakukan intersepsi
melalui iptables redirect (Konfigurasi B).
Kedua model ini memiliki kelemahan mendasar sebagai berikut (subyektif);
Hanya satu buah IP Address yang keluar dari Squid ketika menuju baik internet maupun
router, karena telah dilakukan NAT, sebagai akibatnya;
Deskripsi Alternatif
Squid diletakkan sebagai gateway transisi antara klien dan ruter (Squid akan menjadi
gateway bagi klien), Linux melakukan routing tanpa melakukan NAT, dan dengan
menggunakan TProxy (melakukan patch pada Kernel dan IPTables) serta direktif
tcp_outgoing_address pada squid, permintaan pada port 80 akan diteruskan ke ruter
mikrotik yang melakukan shaping, NAT dan firewall. Dengan demikian, pada router
Mikrotik akan ditambahkan static routing yang meneruskan jawaban dari Internet ke
Proxy.
1. Instalasi standar Linux, OS yang digunakan adalah Debian etch, Kernel 2.6.18
2. Melakukan patching kernel cttproxy
3. Melakukan patching userspace iptables TPROXY
4. Instalasi SQUID dari sourcenya, 2.6.STABLE14 dari Source
5. Konfigurasi SQUID
6. Melakukan Routing tanpa NAT dengan bantuan Firehol
7. Static Routing di Mikrotik Router
Disclaimer
1. Instalasi standar Linux, OS yang digunakan adalah Debian etch, Kernel 2.6.18-4
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 14G 1.2G 12G 9% /
tmpfs 253M 0 253M 0% /lib/init/rw
udev 10M 48K 10M 1% /dev
tmpfs 253M 0 253M 0% /dev/shm
/dev/sda2 19G 278M 19G 2% /cache1
/dev/sda3 19G 278M 19G 2% /cache2
/dev/sda6 24G 223M 22G 1% /home
apt-get update
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2
build-essential
Download source kernel, dalam hal ini tetap kernel yang sama, karena kompilasi kernel
bukan untuk melakukan upgrade kernel;
cd /usr/src/
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.4.tar.gz
tar -xzvf linux-2.6.18.4.tar.gz
ln -s linux-2.6.18.4 linux
cd /usr/src/
wget http://www.balabit.com/downloads/files/tproxy/obsolete/linux-
2.6/cttproxy-2.6.18-2.0.6.tar.gz
cd /usr/src/linux
for i in <pathtocttproxy>/patch_tree/0{1,2,3}*.diff; do cat $i | patch
-p1; done
Lakukan kompilasi kernel, aktifkan conntrack, NAT dan TPROXY support (ada di dalam
Netfilter Configuration)
Anda akan masuk ke dalam menu kompilasi kernel, pilih Load an Alternate
Configuration File dan pilih .config
Posisi di menuconfig
-> Networking
---> Networking support
-----> Networking options
-------> Network packet filtering
----------> IP: Netfilter Configuration
Setelah selesai mengaktifkan, ketika keluar dari menuconfig, jawab Yes terhadap
pertanyaan Do you wish to save your new kernel configuration?
Build Kernel
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image
kernel_headers
Tunggu agak lama, (kalau kasus saya sekitar satu jam atau lebih)
Install Kernel baru
cd /usr/src/
ls -l<
linux-headers-2.6.18.4-custom_2.6.18.4-custom-10.00.Custom_i386.deb
linux-image-2.6.18.4-custom_2.6.18.4-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.18.4-custom_2.6.18.4-custom-
10.00.Custom_i386.deb
dpkg -i linux-image-2.6.18.4-custom_2.6.18.4-custom-
10.00.Custom_i386.deb
shutdown -r now
cd /usr/src/
apt-get source iptables
cd /usr/src/iptables-1.3.6.0debian1
cat <pathtocttproxy>/iptables/iptables-1.3-cttproxy.diff | patch -p1
chmod +x extensions/.tproxy-test
make KERNELDIR=/usr/src/linux
cd /usr/src/iptables-1.3.6.0debian1
dpkg-buildpackage -b -rfakeroot
cd /usr/src/
dpkg -i iptables_1.3.6.0debian1-5_i386.deb
Masukkan rule TPROXY untuk melakukan intersepsi terhadap request http (port 80)
Paket squid yang digunakan adalah 2.6.STABLE14, ambil langsung source codenya dari
situs squid-cache karena paket squid dari debian tidak mendukung tproxy.
http://packages.debian.org/changelogs/pool/main/s/squid/squid_2.6.5-6/changelog
cd /usr/src/
wget http://www.squid-cache.org/Versions/v2/2.6/squid-
2.6.STABLE14.tar.gz
tar -xzvf squid-2.6.STABLE14.tar.gz
kompilasi dilakukan sama dengan kompilasi standard debian dengan tambahan opsi
-enable-linux-tproxy, apabila ingin melihat standar kompilasi squid pada
debian silahkan instal terlebih dahulu squid dan jalankan dengan -v.
Instal squid dari source, Jalankan perintah ./configure dalam satu baris.
cd /usr/src/squid-2.6.STABLE14/
./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin
--sbindir=/usr/sbin --libexecdir=/usr/lib/squid --sysconfdir=/etc/squid
--localstatedir=/var/spool/squid --datadir=/usr/share/squid --enable-
linux-netfilter --enable-storeio=ufs,aufs,diskd,null --enable-arp-acl
--enable-removal-policies=lru,heap --enable-snmp --enable-delay-pools
--enable-htcp --enable-poll --enable-cache-digests --enable-underscores
--enable-referer-log --enable-useragent-log --enable-
auth="basic,digest,ntlm" --enable-carp --enable-large-files --enable-
linux-tproxy
make all
make install
cp /usr/src/linux/include/linux/netfilter_ipv4/ip_tproxy.h
/usr/include/linux/netfilter_ipv4
cp /usr/include/linux/capability.h /usr/include/sys
5. Konfigurasi SQUID
route
Destination Gateway Genmask Flags Metric Ref Use Iface
10.40.40.0 * 255.255.255.252 U 0 0 0 eth0
172.16.80.0 * 255.255.255.248 U 0 0 0 eth1
default 10.40.40.1 0.0.0.0 UG 0 0 0 eth0
Default gateway nya adalah 10.40.40.1, sehingga secara default semua paket yang
diambil oleh squid untuk dilanjutkan ke internet akan menggunakan 10.40.40.1 sebagai
routing ke internet. Yang diinginkan adalah agar ketika misalnya ada request dari user
dengan IP Address 172.16.80.4 yang gatewaynya ke 172.16.80.1 (IP Address di eth1) ke
internet pada port 80 (http), yang kemudian dialihkan ke port 3128 (squid) dengan
menggunakan TPROXY iptables, squid akan melakukan binding dengan IP Address
172.16.80.1, yang apabila routingnya sudah diatur (lihat langkah no.6) akan diteruskan ke
10.40.40.1 dengan tetap membawa IP Address user 172.16.80.4 (iptables TPROXY).
Pada squid yang dibutuhkan adalah pengaktifan tproxy, dan memanfaatkan tcp_outgoing
address berdasarkan acl src-address, berikut contoh file konfigurasi saya (sebagian).
Silahkan eksplorasi lebih lanjut untuk konfigurasi performa squid.
##ACLs###
acl client_3dnet_isplasa src 172.16.17.0/255.255.255.248
acl client_3dnet_alwy src 172.16.17.8/255.255.255.248
acl client_3dnet_anis src 172.16.17.16/255.255.255.248
acl client_3dnet_pkstebet src 172.16.17.24/255.255.255.248
acl client_3dnet_pkstebet2 src 172.16.17.32/255.255.255.248
acl client_sonny src 172.16.35.8/255.255.255.248
acl client_christ src 172.16.35.16/255.255.255.248
acl client_shandy src 172.16.35.24/255.255.255.248
acl client_tono src 172.16.35.32/255.255.255.248
…
##TCP_Outgoing_Address###
tcp_outgoing_address 172.16.17.1 client_3dnet_isplasa
tcp_outgoing_address 172.16.17.9 client_3dnet_alwy
tcp_outgoing_address 172.16.17.17 client_3dnet_anis
tcp_outgoing_address 172.16.17.25 client_3dnet_pkstebet
tcp_outgoing_address 172.16.17.33 client_3dnet_pkstebet2
tcp_outgoing_address 172.16.35.9 client_sonny
tcp_outgoing_address 172.16.35.17 client_christ
tcp_outgoing_address 172.16.35.25 client_shandy
tcp_outgoing_address 172.16.35.33 client_tono
…
##Default##
tcp_outgoing_address 10.40.40.2
server_persistent_connections off
Dengan demikian apabila request muncul dari IP Address 172.16.17.4, maka squid akan
berjalan pada 172.16.17.1:3128, sehingga request diteruskan dengan tetap membawa IP
Address user (172.16.17.4) ke Router Mikrotik yang terletak diatasnya. Pastikan bahwa
IP Gateway user merupakan salah satu IP Address yang diassign ke eth1 (local), karena
gateway user adalah ke Gateway Linux Squid.
Pada umumnya, sebuah gateway akan melakukan NAT sebelumnya melanjutkan request
ke internet, namun demikian dengan serangkaian rule iptables (mungkin bisa dengan
pendekatan lain, sayangnya saya belum bisa), routing paket bisa diteruskan ke atas
(Router Mikrotik), dan NAT akan dilakukan oleh Router Mikrotik.
Untuk melakukan hal ini saya menggunakan firehol yang keterangan dan konfigurasi
lengkapnya bisa dilihat di http://firehol.sourceforge.net/, pada contoh ini saya hanya
membuat agar firehol melakukan routing terhadap permintaan dari eth1 (local ke user) ke
eth0 (public ke mikrotik), apabila dibaca lebih lanjut firehol sangat berguna untuk
melakukan konfigurasi firewall apabila tugas firewall ke user ingin dilakukan oleh Linux.
Install Firehol
apt-get install firehol
nano /etc/default/firehol
#Rubah NO menjadi YES
START_FIREHOL=YES
#If you want to have firehol wait for an iface to be up add it here
WAIT_FOR_IFACE=”"
Konfigurasi standar
cat /etc/firehol/firehol.conf
version 5
Menjalankan firehol
/etc/init.d/firehol start
harap diperhatikan bahwa apabila anda melakukan restart pada service firehol, rule
iptables yang ada di luar firehol akan hilang, dalam contoh ini adalah rule iptables
TPROXY. Setelah anda selesai melakukan modifikasi konfigurasi firehol dan merestart
firehol, jalankan kembali rule iptables di luar konfigurasi firehol.
Agar Router mikrotik dapat mengetahui kemana paket permintaan dari user dibelakang
squid diteruskan, harus dilakukan static routing ke Squid Gateway yang
/ip route pr
..
A S 172.16.80.0/24 r 10.40.40.2 local
..
Apabila banyak subnet di belakang squid silahkan diarahkan satu persatu. Contoh di atas
adalah saya memiliki beberapa user dengan blok ip address 172.16.80.0/29,
172.16.80.8/29 dst, di belakang Gateway Squid.
Tambahan, agar supaya Linux bisa berfungsi sebagai DNS, silahkan lakukan instalasi
bind, dan pastikan di /etc/resolv.conf ada Name Server yang valid.