15.5.07

FreeBSD 6.1 + PF Transparent Proxy + Squid 2.6

FreeBSD 6.1 + PF Transparent Proxy + Squid 2.6 Print
Tuesday, 27 March 2007

by : godril ( godril@indofreebsd.or.id )This e-mail address is being protected from spam bots, you need JavaScript enabled to view it

Latar Belakang
Seorang teman menginginkan untuk menerapkan transparent proxy untuk semua host yang ada di LAN kantornya, kecuali untuk beberapa host yang memang sangat penting trafiknya untuk tidak dilewatkan ke transparent proxy.
Karena satu hal dan lain sebagainya, susunan jaringan yang berjalan adalah sebagai berikut:

pf transparent proxy

Oke, memang tampak aneh karena seharusnya mikrotik menjadi router utama menjadi gateway ke internet sedangkan seharusnya sebuah cache server tidak berada di sana, di posisi paling depan menghadap ke internet. Ceritanya panjang sekali, but whatever it is, yang jadi permasalahan sekarang adalah bagaimana setting cache server untuk jaringan yang agak unik tersebut.

Asumsi


* OS yang digunakan adalah FreeBSD 6.x

* Langkah-langkah konfigurasi Squid dan PF secara umum tidak akan dibahas di sini, karena bisa didapat dengan search di internet. Yang akan dibahas hanya konfigurasi yang dibahas saja.

* Tidak menggunakan server produksi sebagai percobaan

* Use with your own cautions!

Setup

Yang pertama terpikirkan oleh saya bahwa saya akan menggunakan versi Squid terbaru untuk software proxy yang akan diinstall. Sebuah proxy/cache server memerlukan sebuah mesin yang cukup powerfull. Demikian juga instalasi ini menggunakan mesin yang cukup kuat untuk dijadikan proxy:

shell> dmesg |less
Copyright (c) 1992-2006 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 6.1-RELEASE #0: Fri Jan 12 10:14:59 WIT 2007
root@somewhere:/usr/obj/usr/src/sys/KERNEL-SMP
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Xeon(TM) CPU 2.80GHz (2800.11-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf43 Stepping = 3
Features=0xbfebfbff
E2,SS,HTT,TM,PBE>
Features2=0x641d>
AMD Features=0x20100000
Logical CPUs per core: 2
real memory = 1073152000 (1023 MB)
avail memory = 1041035264 (992 MB)



Setelah saya lihat mesin diatas cukup bagus untuk proxy, saya melanjutkan ke direktori /usr/ports/www/squid dan menjalankan perintah:

shell> make fetch


Perintah tersebut hanya akan mengambil source Squid yang kemudian akan diletakkan di bawah direktori /usr/ports/distfiles. Waktu saya fetch, saya mendapatkan versi squid-2.6.STABLE9.tar.bz2

Setelah itu file tersebut saya pindah kan ke /usr/local/src, yaitu direktori yang sering saya gunakan untuk menaruh semua file source dan melakukan kompilasi dari sana.

shell> cd /usr/ports/distfiles
shell> mv squid-2.6.STABLE9.tar.bz2 /usr/local/src
shell> cd /usr/local/src
shell> tar -zxvf squid-2.6.STABLE9.tar.bz2
shell> cd squid-2.6.STABLE9
shell> ./configure --prefix=/usr/local/squid --enable-pf-transparent
shell> make && make install clean distclean



Catatan:
Option ./configure di atas bisa disesuaikan dengan kebutuhan masing-masing. Contoh di atas akan menempatkan semua base instalasi di bawah direktori /usr/local/squid. Karena bertujuan untuk digunakan sebagai transparent proxy dengan firewall pf, maka di sini ditambahkan opsi --enable-pf-transparent.

squid.conf

Selanjutnya adalah mengkonfigurasi Squid agar dapat menjalankan fungsinya sebagai transparent proxy. Di sini agak berbeda dengan versi sebelum Squid 2.6.x. Versi yang sebelumnya (Squid 2.5.x kebawah) menggunakan konfigurasi yang nampak seperti:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on



Sedangkan pada versi Squid 2.6.x, konfigurasi yang digunakan adalah:

http_port 10.0.0.1:3128 transparent



Baris tersebut mengatakan bahwa daemon Squid dibind ke interface dengan ip address 10.0.0.1 dan port 3128. Jadi jika di scanport di interface lain, port tersebut tidak akan terdeteksi. Sebuah contoh dari konsep Security through obscurity :-P.

Setting PF

Beberapa host di bawah mesin mikrotik sengaja tidak diproxy dengan alasan tertentu, sedangkan selain host-host tersebut, akan dilewatkan proxy. Pada gambar diagram, host-host tersebut dikelompokkan menjadi dua kelompok yaitu Proxied Hosts dan Non-Proxied Hosts (terdiri dari host dengan ip address: 192.168.1.84, 192.168.1.106, dan 192.168.1.100). Jadi konfigurasinya adalah:

table {192.168.1.100,192.168.1.106, 192.168.1.84}
table { 192.168.1.0/16 }
set skip on lo0

rdr pass on $extif proto tcp from ! to ! port {80,8080,3128} \
-> 10.0.0.1 port 3128 #transparent proxy
nat from { 192.168.1.0/16 } to ! -> ($extif)

zte c300 trunk mode

  gpon   profile tcont PPPOE type 4 maximum 9900000   profile tcont 100M type 4 maximum 100000   profile tcont 50M-TRUNK type 4 maximum 5000...