Proxy dan Squid Dari : 1. 2. 3. 4.
www.ilmu-komputer.web.id/2010/09/apa-itu-proxy.html. Wikipedia bahasa Indonesia, ensiklopedia bebas. devilzc0de.org/forum/thread-4930.html. ubuntu-indonesia.com
Proxy Apa itu Proxy? Proxy adalah aplikasi yang menjadi perantara antara client dengan web server. Salah satu fungsi proxy adalah menyimpan cache. Dalam jaringan LAN, apabila client mengakses URL web maka browser akan mengirim request tersebut ke proxy server. Apabila tidak tersedia, maka proxy server akan menangani langsung permintaan ke web server. Untuk kasus ini, akan mempercepat proses browsing.
Sumber: http://www.ilmu-komputer.web.id/2010/09/apa-itu-proxy.html
Ilustrasi gambar di atas. Proxy dan proxy server adalah dua hal yang berbeda. Proxy merupakan layanan yang dimiliki proxy server, sedangkan proxy server bertugas melayani permintaan dari client. Bila mengakses halaman tertentu, IP Anda akan dicek dan disimpan apakah diperbolehkan menerima hasil request atau tidak. Apabila ingin mengakses web yang melarang IP selain negaranya atau hanya memperbolehkan dari negara tertentu, kita dapat memanfaatkan proxy. IP merupakan identitas dalam dunia maya. Seperti halnya sebuah KTP, IP yang diberikan Internet Service Provider (ISP) bersifat unik. Tidak sulit untuk menemukan di mana lokasi seseorang dan layanan internet yang digunakan dari IP yang dimilikinya. Fakta ini menjadi keresahan bagi cracker yang berusaha men-deface atau memasuki celah keamanan suatu website. Karena hal tersebut, peran proxy sangatlah membantu penyamaran. Proxy mampu menyembunyikan identitas pemilik IP. Ilmu komputer mengambil contoh seorang cracker yang berusaha merusak web http://target.com. Apabila ia berhasil merusaknya, sang admin akan melihat log IP yang pernah atau terakhir kali mengakses web-nya. Seperti yang tadi telah disinggung, IP merupakan KTP. Seperti halnya penjahat di dunia nyata, sang cracker tidak ingin meninggalkan jejaknya begitu saja. Begitu banyak web yang menyediakan proxy. Untuk menyamarkannya, cukup dengan mengakses URL http://target.com melalui http://proxy.net (contoh). Sehingga seolah-olah yang terdata pernah mengakses http://target.com adalah http://proxy.net. Sedangkan IP sang cracker hanya ter-log di http://proxy.net. Meskipun lebih aman, imbasnya adalah koneksi semakin lambat. Cara seperti di atas
masih dimungkinkan untuk dilacak. Namun, berbeda bila menggunakan proxychain atau menggunakan proxy untuk mengakses proxy. Squid adalah sebuah daemon yang digunakan sebagai proxy server dan web cache. Squid memiliki banyak jenis penggunaan, mulai dari mempercepat server web dengan melakukan caching permintaan yang berulang-ulang, caching DNS, caching situs web, dan caching pencarian komputer di dalam jaringan untuk sekelompok komputer yang menggunakan sumber daya jaringan yang sama, sehingga pada membantu keamanan dengan cara melakukan penyaringan (filter) lalu lintas data. Meskipun seringnya digunakan untuk protokol HTTP dan FTP, Squid juga menawarkan dukungan terbatas untuk beberapa protokol lainnya termasuk Transport Layer Security (TLS), Secure Socket Layer (SSL), Internet Gopher, dan HTTPS. Versi Squid 3.1 mencakup dukungan protokol IPv6 dan Internet Content Adaptation Protocol (ICAP). Squid adalah High-Performance Proxy Caching Server yang menyimpan Meta data dan terutama Hot-object yang di simpan di RAM, menyimpan DNS lookups, mendukung non-Blocking DNS Lookups, dan Implementasi Negative-Caching jika permintaan gagal. Dengan menggunakan lightweight Internet Cache Protokol, Squid Cache dapat dibuat dalam suatu Hirarki atau Mesh untuk meningkatkan Penghematan Bandwidth. Dengan kata lain, Squid bekerja sebagai Internet Object caching dimana metode untuk menyimpan hasil permintaan internet-object. (seperti, data yang ada dari HTTP, FTP, dan ghoper protokol) untuk membuat sistem lebih dekat melayani permintaan daripada harus ke sumber aslinya. Web browser dapat menggunakan lokal squid cache sebagai proxy HTTP server, ini akan mengurangi waktu akses. Squid pada awalnya dikembangkan oleh Duane Wessels sebagai "Harvest object cache", yang merupakan bagian dari proyek Harvest yang dikembangkan di University of Colorado at Boulder. Pekerjaan selanjutnya dilakukan hingga selesai di University of California, San Diego dan didanai melalui National Science Foundation. Squid kini hampir secara eksklusif dikembangkan dengan cara usaha sukarela. Squid umumnya didesain untuk berjalan di atas sistem operasi mirip UNIX, meski Squid juga bisa berjalan di atas sistem operasi Windows. Karena dirilis di bawah lisensi GNU General Public License, maka Squid merupakan perangkat lunak bebas.
Option-option di Squid Apa itu ACL di Squid # # # # # # # # # # # # #
TAG: acl Mendefinisikan Access List acl namaacl tipeacl string1 ... acl namaacl tipeacl "berkas" ... ketika menggunakan "berkas", di dalam berkas tersebut harus berisikan satu item per baris tipeacl adalah salah satu dari tipe-tipe yang dijelaskan di bawah Secara default, regular expression diset CASE-SENSITIVE untuk membuatnya case-insensitive, gunakan opsi -i acl namaacl src alamat-ip/netmask ... (alamat IP klien)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
acl namaacl src alamat1-alamat2/netmask ... (rentang dari alamat-alamat) acl namaacl dst alamat-ip/netmask ... (alamat IP dari targer URL) acl namaacl myip alamat-ip/netmask ... (alamat IP untuk local socket) acl namaacl arp alamat-mac ... (format penulisannya xx:xx:xx:xx:xx:xx ) ACL arp memerlukan opsi khusus saat mengkonfigurasi --enable-arp-acl. Lebih jauh lagi, ACL arp tidak berlaku untuk semua sistem operasi. Berfungsi di Linux, Solaris, FreeBSD dan beberapa varian *BSD. CATATAN: Squid hanya bisa mendeteksi alamat MAC dari klien yang ada di subnet yang sama. Jika klien berada di subnet yang berbeda, maka Squid tidak bisa mengetahui alamat MAC nya. acl namaacl srcdomain .fulan.com ... # reverse lookup, IP klien acl namaacl dstdomain .fulan.com ... # server tujuan dari URL acl namaacl srcdom_regex [-i] xxx ... # regex yang cocok dengan nama klien acl namaacl dstdom_regex [-i] xxx ... regex yang cocok dengan server Untuk dstdomain dan dstdom_regex reverse lookup dicoba jika URL berbasiskan IP yang digunakan tidak ada yang cocok. Nama "none" digunakan jika reverse lookup gagal. acl namaacl time [day-abbrevs] [h1:m1-h2:m2] day-abbrevs: S – Sunday (Minggu) M – Monday (Senin T – Tuesday (Selasa) W – Wednesday (Rabu) H – Thursday (Kamis) F – Friday (Jumat) A – Saturday (Sabtu) h1:m1 harus kurang dari h2:m2 acl namaacl url_regex [-i] ^http:// ... # regex yang cocok di URL secara keseluruhan acl namaacl urlpath_regex [-i] \.gif$ ... # regex yang cocok pada bagian path URL acl namaacl urllogin [-i] [^a-zA-Z0-9] ... # regex yang cocok pada bagian login URL acl namaacl port 80 70 21 ... acl namaacl port 0-1024 ... # rentang diperbolehkan acl namaacl myport 3128 ... # (local socket TCP port) acl namaacl proto HTTP FTP ... acl namaacl method GET POST ... acl namaacl browser [-i] regexp ... pola yang cocok pada header User-Agent (lihat juga req_header di bawah) acl namaacl referer_regex [-i] regexp ... pola yang cocok pada header Referer Referer sangatlah tidak reliable, jadi gunakan dengan hati-hati acl namaacl ident namauser ... acl namaacl ident_regex [-i] pattern ... string yang cocok pada keluaran ident. gunakan REQUIRED untuk menerima semua ident yang tidak kosong. acl namaacl src_as angka ... acl namaacl dst_as angka ... Kecuali untuk access control, AS number bisa digunakan untuk mengarahkan request ke cache tertentu. Sebagai contoh untuk mengarahkan
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
semua request untuk AS#1241 dan hanya itu saja ke cachesaya.domainsaya.net: acl ascontoh dst_as 1241 cache_peer_access cachesaya.domainsaya.net allow ascontoh cache_peer_access cachesaya.domainsaya.net deny all acl namaacl proxy_auth [-i] namauser ... acl namaacl proxy_auth_regex [-i] pattern ... daftar dari namauser yang valid gunakan REQUIRED untuk menerima semua username yang valid. CATATAN: ketika header Proxy-Authentication dikirim tetapi dia tidak diperlukan pada saat pengecekan ACL, maka username TIDAK akan dicatat di access.log. CATATAN: proxy_auth memerlukan program autentikasi EXTERNAL untuk memeriksa kombinasi username/password (lihat direktif auth_param). CATATAN: proxy_auth tidak bisa digunakan di transparent proxy karena peramban perlu dikonfigurasi menggunakan proxy agar bisa merespon pada proses autentikasi proxy. acl namaacl snmp_community string ... String community untuk membatasai akses ke agen SNMP Anda. Contoh: acl snmppublic snmp_community public acl namaacl maxconn angka Ini akan cocok ketika alamat IP dari klien memiliki jumlah koneksi HTTP yang tersambung melebihi dari
acl namaacl max_user_ip [-s] angka Ini akan cocok ketika user mencoba login melebihi dari alamat ip yang berbeda. Parameter authenticate_ip_ttl mengontrol nilai timeout pada entri-entri ip. Jika dituliskan -s maka pembatasannya ketat, browsing akan ditolak dari alamat IP lainnya sampai nilai ttl expire. Tanpa -s Squid hanya akan membuat user kesel dengan "secara acak" menolak akses. (pencatatan akan di reset setiap kali batasan tercapai dan request akan ditolak) CATATAN: pada mode akselerasi atau ketika disana ada banyak anak proxy, klien mungkin akan terlihat datang dari beberapa alamat saat mereka memasuki peternakan proxy, jadi pembatasan hanya 1 akan menyebabkan problem ke user. acl namaacl req_mime_type mime-type1 ... regex yang cocok dengan mime type dari request yang digenerate oleh Klien Dapat digunakan untuk mendeteksi berkas upload atau beberapa tipe Request HTTP tunneling. CATATAN: Ini TIDAK akan cocok dengan reply. Anda tidak bisa Menggunakan ini untuk mencocokkan dengan tipe berkas yang dikembalikan. acl namaacl req_header header-name [-i] any\.regex\.here regex yang cocok dengan request header apa saja yang sudah dikenali. Mungkin bisa dianggap sebagai superset dari ACL-ACL "browser", "referer" dan
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
"mime-type". acl namaacl rep_mime_type mime-type1 ... regex yang cocok dengan mime type dari reply yang diterima oleh squid. Dapat digunakan untuk mendeteksi berkas yang didownload atau beberapa tipe dari request HTTP tunneling. CATATAN: Ini tidak akan berpengaruh pada aturan http_access. Ini hanya akan berpengaruh pada aturan yang mempengaruhi reply data stream seperti misalnya http_reply_access. acl namaacl rep_header nama-header [-i] regex\.apa\.saja\.disini regex yang cocok dengan reply header apa saja yang sudah dikenali. Mungkin bisa dianggap sebagai superset dari ACL-ACL "browser", "referer" dan "mime-type". Contoh: acl banyak_spasi rep_header Content-Disposition -i [[:space:]]{3,} acl nama_acl external nama_class [arguments...] ACL external yang melakukan pencarian melalui class bantu yang didefinisikan oleh direktif external_acl_type. acl urlgroup group1 ... cocok dengan urlgroup seperti yang diindikasikan oleh redirector. acl namaacl user_cert atribut nilai... cocok dengan atribut-atribut dari user sertifikat SSL atributnya adalah salah satu dari DN/C/O/CN/L/ST acl namaacl ca_cert attribut nilai... cocok dengan atribut-atribut dari user-user yang menerbitkan sertifikat CA SSL atributnya adalah salah satu dari DN/C/O/CN/L/ST acl namaacl ext_user namauser ... acl namaacl ext_user_regex [-i] pola ... string yang cocok dengan namauser yang diberikan oleh pembantu acl external gunakan REQUIRED untuk menerima namauser apa saja yang tidak-kosong.
ACL yang paling umum digunakan Dari sekian banyak tipe acl yang bisa digunakan, menurut pengalaman saya hanya beberapa saja yang umum digunakan. Tentunya memang semua itu tergantung kebutuhannya. Walau tidak umum digunakan, tapi kalau memerlkukannya, mungkin saja digunakan dan sebaliknya. Biasanya yang paling umum diguanakan adalah, src, dst, dstdomain, port. ACL lainnya yang mungkin sering ditemui adalah url_regex, proxy_auth, maxconn, max_user_ip, time. Untuk lebih memahami cara penggunaan acl ini, saya akan coba berikan beberapa contoh penggunaan acl.
Contoh 1: Membatasi akses internet dari IP tertentu Misal, dalam satu jaringan kantor, semua diperbolehkan mengakses internet via proxy. Kecuali beberapa komputer di meja penerima tamu atau front office. acl acl acl acl
jaringan_kantor src 192.168.1.0/24 front_office src 192.168.1.21 # komputer1 di front office front_office src 192.168.1.22 # komputer2 di front office front_office src 192.168.1.23 # komputer3 di front office
http_access deny front_office http_access allow jaringan_kantor
Sekalian untuk format penulisan acl di atas, Anda bisa juga menuliskannya seperti di bawah ini. Format inline, jadi IP dituliskan ke samping, tanpa menekan enter atau penanda baris baru. acl jaringan_kantor src 192.168.1.0/24 acl front_office src 192.168.1.21 192.168.1.22 192.168.1.23 http_access deny front_office http_access allow jaringan_kantor
Format rentang, karena kebetulan IP si komputer front office berurutan. acl jaringan_kantor src 192.168.1.0/24 acl front_office src 192.168.1.21-192.168.1.23/32 http_access deny front_office http_access allow jaringan_kantor
Silakan dilihat lagi di blok ACL yang sudah saya terjemahkan di atas.
Contoh 2: Membatasi akses ke situs tertentu Anda ingin memblock beberapa situs porno yang paling sering dikunjungi oleh user Anda. Tentu saja ini cara paling sederhana, dan mungkin tidak cocok untuk memblock situs porno secara keseluruhan. Tapi ini hanya sekedar contoh saja. Pertama, pastikan rules untuk membatasi akses ke situs porno itu muncul lebih dahulu, dibandingkan rules lain yang membolehkan akses internet. Lihat contoh dibawah ini. Kita akan menggunakan tipeacl dstdomain, yang bisa digunakan untuk menandai domain tujuan yang akan diakses. acl situs_porno dstdomain .playboy.com acl situs_porno dstdomain .porno.com http_access deny situs_porno acl jaringan_kantor 192.168.1.0/24 http_access allow jaringan_kantor
Contoh penempatan yang salah ada di bawah ini # Contoh penempatan yang salah acl jaringan_kantor 192.168.1.0/24 http_access allow jaringan_kantor # rules di bawah ini tidak akan pernah dijalankan, karena akses sudah # diperbolehkan di baris sebelumnya acl situs_porno dstdomain .playboy.com acl situs_porno dstdomain .porno.com http_access deny situs_porno
Jadi perlu Anda ingat, posisi menentukan prestasi. Atau posisi rules yang Anda buat di squid.conf sangat menentukan apakah rules tersebut akan digunakan atau tidak.
Contoh 3: Membatasi akses internet di jam kerja # Senin s.d Kamis jam 08:00 s.d Jam 12:00 acl jam_kerja time MTWH 08:00-12:00 # Jumat 08:00-11:30 WIB acl jam_kerja time F 08:00-11:30 # Senin s.d Jumat jam 13:00 s.d 16:00 acl jam_kerja time MTWHF 13:00-16:00 acl jaringan_kantor src 192.168.1.0/24 # Buka akses internet, diluar jam kerja http_access allow jaringan_kantor !jam_kerja
Lihat tanda seru (!) di depan acl. Yang berarti tanda negasi, atau NOT (bukan). Jadi artinya kita hanya membuka akses internet untuk jaringan_kantor dan waktunya bukan di jam kerja.
Contoh 4: Membatasi akses internet di jam kerja, kecuali manager dan bos # Senin s.d Kamis jam 08:00 s.d Jam 12:00 acl jam_kerja time MTWH 08:00-12:00 # Jumat 08:00-11:30 WIB acl jam_kerja time F 08:00-11:30 # Senin s.d Jumat jam 13:00 s.d 16:00 acl jam_kerja time MTWHF 13:00-16:00 # jaringan kantor acl jaringan_kantor src 192.168.1.0/24 # manager dan boss acl manager src 192.168.1.51
# manager keuangan
acl manager src 192.168.1.52 acl manager src 192.168.1.53 acl boss src 192.168.1.68
# manager marketing # general manager # si boss besar
# Buka akses internet untuk manager dan boss, tanpa batasan waktu http_access allow manager http_access allow boss # Untuk karyawan lainnya, buka akses internet diluar jam kerja http_access allow jaringan_kantor !jam_kerja
Sekilas tentang Refresh Pattern # TAG: refresh_pattern # usage: refresh_pattern [-i] regex min percent max [options] # contoh: refresh_pattern . 0 20% 4320 # # # # # # #
Basically a cached object is: FRESH if expires < now, else STALE STALE if age > max FRESH if lm-factor < percent, else STALE FRESH if age < min else STALE
Peran Squid yg pada dasarnya bersifat 'shared' obyek lokal dalam konteks 1 domain. Secara garis besar mekanisme kerjanya mirip dg 'temporary cache' lokal web browser itu tadi cuma bedanya dipakai bersama dg user yg lain. Yg membedakan dalam kaitannya dg refresh_pattern adl Squid tidak tidak akan 'bertanya' validitas obyek jika ternyata 'umur'nya masih dalam durasi refresh_pattern-nya (default minimum Squid 120 menit atau 2 jam, kalau tidak salah). Jadi jika 'umur' obyek sejak di'lahir'kan belum mencapai 2 jam (utk contoh) maka Squid tidak akan mengakses server asal/sumber utk mengambil info 'umur'nya, dg kata lain obyek akan dianggap masih valid selama durasi waktu tadi (2 jam, misalnya), alias penghematan bw dan peningkatan responsivitas akses. Kapan menguji atau mengambil langsung dari server asal obyek 'tak berumur' ini, toh validitasnya tidak bisa diuji? Persentase dan nilai maksimum-lah yg akan menentukan (percentage max). Obyek tanpa umur ini tadi akan dianggap valid oleh Squid selama umur minimumnya 50% dari umur maksimumnya, misalnya. Utk contoh 50% 120 akan berarti obyek tanpa umur valid selama 'umur'nya masih kurang dari 1 jam (50% dari 120 menit). Menurut pengalaman perubahan obyek2 HTTP di internet itu relatif 'lamban', maka kebiasaan gw pribadi demi Squid yg 'agresif' adalah antara 80% s/d 95% dg nilai maksimum hingga 1 bulan (berapa menit ya, sori lupa) dan utk FTP krn semakin jarang berubah bisa lebih lama lagi bisa hingga 3 bulan atau 6 bulan. Tentunya ini tergantung profil pengguna internet anda lho, hanya contoh ekstrim saja. Jadi saat 'umum' maksimum yg sudah didefinisikan di refresh_pattern tercapai, jelas Squid akan 'menjenguk' obyek tsb ke asal servernya. Dg asumsi obyek masih sama maka Squid akan mengambil dari loka cache swap-nya. Jika ternyata obyek sudah berbeda, misalnya dari ukuran file atau saat file obyek tsb berbeda, maka Squid akan mengambil dari server tsb. Opsi override-lastmod dan reload-into-ims kepanjangannya adalah 'override last modification' dan 'reload into if-modified-since'. Override-lastmod akan meng'override' perubahan yg terjadi di server asal obyek dg mengabaikan validitasnya hingga minimum refresh_pattern-nya tercapai. Efeknya obyek di
lokal Squid bisa berbeda dg obyek yg di server asal. Tapi opsi ini masih mengijinkan si user 'memaksa' menguji validitasnya dg menekan tomboh 'reload' atau 'refresh' di web browser. Opsi ini, kalau gw memandangnya 'agak menipu sedikit', he he he ... Sbg contoh di atas, gw yakin obyek di ujung server sudah berubah walaupun terakhir gw akses baru 10 menit yg lalu (min refresh_pattern=120 menit, misalnya), maka dg menekan tombol 'reload' di browser gw akan bisa menguji validitas obyek tsb dg yg di server asal, dan jika ternyata ya benar obyek tsb sudah berubah, jelas Squid akan langsung mengambil obyek lebih baru dari server asal. Jika gw biarkan saja akses ke obyek tsb tanpa menekan tombol 'reload' di browser maka mekanisme uji validitas mempergunakan min refresh_pattern akan berlaku biasa. Opsi reload-into-ims akan mengubah atau memodifikasi 'umur' obyek sehingga seakan-akan 'dilahirkan' kembali atau 'direset'. Misalnya gw pernah mengakses suatu obyek suatu obyek 1,5 jam yg lalu, dan gw akses lagi obyek yg sama sekarang, maka 'umur' obyek yg sama ini akan dianggap 'fresh' atau obyek baru dan sudah tidak berumur 1,5 jam yg lalu. Keuntungan opsi ini adalah mekanisme 'penyegaran' umur obyek populer sehingga tidak pernah mjd 'tua' hingga nilai percentage dan maksimumnya tercapai, sekali lagi 'agak menipu', he he he ... Kendali penuh tetap di user utk menekan tombol 'reload' atau 'refresh' jika tidak yakin obyek 'fresh'. Refresh_pattern itu sebenarnya buat ngukur seberapa lama sih object itu tersimpan di cache squid kita, krg lebih artinya umur objectnya gitu deh, krn pada dasarnya beberapa object kadang selalu terupdate di server websitenya. Umumnya penulisan refresh_pattern tercantum min percent max (seperti: 720 100% 4320), tentunya ada opsi2 lain dibelakangnya. min dan max itu nilainya menit. Min itu batas minimum object harus direfresh (diupdate dr server), sedangkan max itu batas maximal object harus direfresh, kalo persennya itu utk perhitungan jika umur object berada di antara min dan max. Jadi begini, sewaktu kita akan merequest atau membuka kembali sebuah object yg sudah tersimpan di cache, maka squid akan menilai umur object berdasarkan refresh patternnya. kalo umur object masih berada di bawah nilai min, maka object itu dianggap masih bs dipake kembali tanpa perlu ngecek ke server. Artinya, 'ah.. ni object masih seger lah baru td disimpen kok, gak usah ngecek ke server websitenya deh, ambil aja langsung trus tempel di halaman web'. Tapi klo umur object berada di atas nilai max, maka squid akan melakukan pengecekan ke server dan meminta object agar diupdate (refresh). Nah, bagaimana kalo object yg sedang diminta itu umurnya berada di antara min dan max. Di sinilah nilai persentase itu dipake, persentase itu maksudnya adalah persentase umur object di cache dibandingkan dengan umur object di servernya.
ada sebuah objek, refresh_pattern nya 20 75% 300 object ini dibikin di servernya jam 1:00 object pertama kali direquest dan tersimpan dalam cache jam 1:30 object direquest kembali jam 1:45 Nah berarti umur object di cachenya adalah 15 menit (1:45-1:30) squid belum bisa menentukan object ini kadaluarsa apa belum karen berada di antara batas min (10) dan max (300). Nah kali ini pake persentase, jd perhitungannya ya hrs pake persen jg (bkn menit). mari kita hitung persentase umur object: umur object di cache: 15 menit (1:45-1:30) umur object di server: 45 menit (1:45-1:30) brarti persennya: 15/45 = 33% Kesimpulannya, object dianggap masih fresh krn masih berada di bawah 75%.