Transcript
FreeBSD 6.1 + PF Transparent Proxy + Squid 2.6
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. 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> shell> shell> shell> shell> shell> shell> cd /usr/ports/distfiles mv squid-2.6.STABLE9.tar.bz2 /usr/local/src cd /usr/local/src tar -zxvf squid-2.6.STABLE9.tar.bz2 cd squid-2.6.STABLE9 ./configure --prefix=/usr/local/squid --enable-pf-transparent make && make install clean distclean
Catatan: Option ./configure di atas bisa disesuaikan dengan kebutuhan masingmasing. 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) ....dst....