You are on page 1of 10

tajid.

yakub: Judul Lengkap Squid Cache, TProxy, dan Mikrotik (Alternatif Perpaduan Untuk Jaringan Sederhana) Juga dipost di blog saya; :D, silahkan infonya bagi yang telah berhasil melakukan percobaan. Ada satu tutorial lagi yang dapat dijadikan acuan mengenai penggunaan TProxy pada bridge; 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. Konfigurasi Alternatif

Alur data (http) menjadi. Klien (172.16.17.4) --> eth1(172.16.17.1) (intersepsi port 80) --> port 3128 (squid) dengan tcp_outgoing_address menggunakan 172.16.17.1 (gateway klien) ----> routing (tanpa NAT) --> Mikrotik (shaping + NAT) --> Router lain --> Internet --> Kembali ke Mikrotik --> Static Routing ke Gateway Squid --> Intersepsi port 80 --> User Berikut Langkah secara umumnya; 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. Sudah dites dalam network berjalan. 2. Tulisan ini tidak menerangkan mengenai optimalisasi performa Squid 3. Belum tentu benar (namanya juga percobaan), meskipun sudah dites. 4. Yang paling penting, I'm a Linux and Networking N00bs. tajid.yakub: xget = doubleuget, ntah kenapa kalau diketik langsung gak bisa dipost

Langkah secara lebih mendetil;

1. Instalasi standar Linux, OS yang digunakan adalah Debian etch, Kernel 2.6.18-4 Lakukan instalasi biasa (base), dapatkan ISO Debian Etch-netinstall di mirror-mirror lokal yang banyak terdapat, salah satunya,.Atur skema partisi HDD sesuai selera anda, berikut skema partisi saya;

2. Melakukan Patching Kernel cttproxy baca informasi untuk melakukan kompilasi kernel debian di howtoforge, saya menggunakan metoda pertama (Building A Kernel .deb Package) yang kurang lebih langkahnya sebagai berikut (mohon dimaafkan kalau ada kesalahan-kesalahan, karena kompilasi kernel saya lakukan 2 minggu yang lalu, untuk pastinya silahkan baca link di atas); Instal paket-paket yang diperlukan untuk kompilasi kernel; Code: apt-get update apt-get install kernel-package libncurses5-dev fakeroot get bzip2 build-essential Download source kernel, dalam hal ini tetap kernel yang sama, karena kompilasi kernel bukan untuk melakukan upgrade kernel; Code: cd /usr/src/ xget 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

Download dan Apply patch dari cttproxy Keterangan mengenai tata cara melakukan patching ada di dalam paket cttproxy Code: cd /usr/src/ xget http://www.balabit.com/downloads/files/tproxy/obsolete/linux-2.6/cttproxy-2.6.182.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 edit

for i in /<path-to-cttproxy>/patch_tree/0{1,2,3}*.patch; do cat $i | patch -p1; done

Lakukan kompilasi kernel, aktifkan conntrack, NAT dan TPROXY support (ada di dalam Netfilter Configuration) Code: make clean && make mrproper cp /boot/config-`uname -r` ./.config Anda akan masuk ke dalam menu kompilasi kernel, pilih Load an Alternate Configuration File dan pilih .config Code: 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 Code: 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 Code: cd /usr/src/ ls -l

akan terlihat kedua file berikut; Code:

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

lakukan instalasi file deb tersebut; Code: 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

konfigurasi GRUB bootloader di /boot/grub/menu.lst telah dimodifikasi secara otomatis, anda tinggal melakukan restart sistem, dan pilihan booting default menjadi kernel yang baru kita modifikasi. Code: shutdown -r now tajid.yakub: 3. Melakukan patching userspace iptables TPROXY Ambil source iptables Code: cd /usr/src/ apt-get source iptables

patch iptables (informasi lengkap ada di README cttproxy) Code: 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

buat paket debnya dan lakukan instalasi Code:

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) Code: iptables -t tproxy -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --on-port 3128

Pada debian, letakkan perintah ini di /etc/rc.local agar terload ketika sistem di restart, asumsinya user terhubung melalui eth1 (interface Local). 4. Install Squid dari Source (Ambil binary Squid 2.6.STABLE14) 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/p ... /changelog Code: squid (2.6.5-2) unstable; urgency=low * debian/rules - Remove mispelled configure option enablig TPROXY support (TPROXY support is NOT enabled since it needs kernel patches which are not in the kernel sources distributed by debian) cd /usr/src/ xget 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 -enablelinux-tproxy, apabila ingin melihat standar kompilasi squid pada debian silahkan instal terlebih dahulu squid dan jalankan dengan -v. Code: apt-get install squid squid -v

Instal squid dari source, Jalankan perintah ./configure dalam satu baris. Code:

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 --enablearp-acl --enable-removal-policies=lru,heap --enable-snmp --enable-delay-pools --enable-htcp -enable-poll --enable-cache-digests --enable-underscores --enable-referer-log --enable-useragentlog --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 tajid.yakub: 5. Konfigurasi SQUID Pada prinsipnya squid membutuhkan routing untuk meneruskan permintaan ke internet, routing akan tergantung pada aturan routing yang ada di linux anda, pada contoh ini, apabila kita melihat table routing yang ada; Code: 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. Code: http_port 3128 tproxy transparent ##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.

6. Melakukan Routing tanpa NAT dengan bantuan Firehol 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.

Code: Install Firehol apt-get install firehol

Agar firehol berjalan ketika sistem di boot Code: 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 Code: cat /etc/firehol/firehol.conf version 5 interface eth0 tomt policy accept interface eth1 toclient policy accept ## agar dari eth1 bisa melakukan routing ke eth0 ## router localpublic inface eth1 outface eth0 route all accept ## agar dari eth0 bisa melakukan routing ke eth1 ## router publiclocal inface eth0 outface eth1 route all accept ## agar paling tidak sesama user local dapat melakukan ping ## router locallocal inface eth1 outface eth1 route all accept 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. 7. Static Routing di Mikrotik Router Agar Router mikrotik dapat mengetahui kemana paket permintaan dari user dibelakang squid diteruskan, harus dilakukan static routing ke Squid Gateway yang berada di interface local mikrotik.

Code: /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. Code: apt-get install bind cat /etc/resolv.conf nameserver 10.40.40.1

Demikian sedikit tulisan ini dibuat, semoga ada gunanya dan mohon ditambahkan, disempurnakan, dicek apabila ada kesalahan special thanks to;

Code: Om Logan, Om Rizal dari LintasWave

Om Baba, Om Maulana terutama Om Google

You might also like