Professional Documents
Culture Documents
Galih Satriaji
supported by:
Net Centric Computing Laboratory
Informatics - ITS
Proxy Server dan Web Server
Squid akan memeriksa setiap request yang datang dengan ACL yang ada pada
konfigurasi dan mencocokannya dengan aturan yang ada. Pencocokan ini bisa
berakibat diizinkan atau ditolaknya suatu koneksi dari user, pemberian bandwidth
yang sesuai dengan aturan, dan sebagainya.
Delay Pool
Delay Pool adalah suatu cara untuk menurunkan kecepatan akses untuk suatu alamat
website dari ACL tertentu. Squid tidak hanya mendukung delay pool hanya untuk
subnet saja, namun untuk semua ACL yang telah dibahas di atas.
Ada beberapa alasan kenapa kita memakai reverse proxy server, diantaranya adalah;
• Alasan keamanan: Proxy server adalah lapisan keamanan tambahan sebelum masuk
lapisan webserver.
• Enkripsi/SSL accelerator: Ketika website yang aman dibentuk, enkripsi SSL mungkin
tidak dikerjakan oleh webserver untuk mengurangi beban kerja webserver, tetapi
dilakukan oleh proxy server yang dilengkapi dengan hardware acceleration untuk
SSL.
• Load distribution: Reverse proxy dapat mendistribusikan beban ke beberapa
webserver, sehingga masing-masing webserver hanya bekerja di areanya sendiri-
sendiri.
• Caching content yang statis. Reverse proxy dapat meng-cache content-content yang
statis seperti image, sehingga memperingan beban kerja webserver.
Transparent Caching
Ketika kita menggunakan squid untuk melakukan caching dari web traffic, browser
harus dikonfigurasi agar menggunakan squid sebagai proxy. Transparent caching
adalah metode agar browser tidak perlu dikonfigurasi menggunakan proxy, namun
secara otomatis telah menggunakan proxy. Web traffic yang menuju ke port 80
diarahkan menuju ke port yang didengarkan oleh squid, sehingga squid bertindak
sebagai layaknya standar web server untuk browser.
Cara Kerja:
Dengan menggunakan iptables atau ipchain, kita “rampok” request ke port 80
membelok ke arah port yang didengarkan oleh squid, misalnya port 3128 (port default
Squid). Kemudian squid kita konfigurasi untuk menerima request HTTP disamping
request proxy biasa seperti layaknya webserver. Dalam file konfigurasi squid, ada
empat parameter yang perlu dikonfigurasi untuk menjadikan transparent proxy, yaitu:
httpd_accel_host,
httpd_accel_port,
httpd_accell_with_proxy, dan
httpd_accel_uses_host_header
acl port
Definisi port yang dituju oleh client
acl proto
Protokol yang digunakan oleh client, misalnya FTP, HTTP
acl method
Method yang digunakan oleh client, misalnya GET, POST
acl maxconn
ACL untuk maksimum koneksi yang digunakan oleh satu host yang melakukan
koneksi ke internet lewat proxy server.
icp_port
Port yang digunakan Squid untuk melakukan kerjasama dengan Squid yang lain. Secara
default, Squid bekerjasama pada port 3130
cache_mem
Memory fisik ideal yang digunakan Squid untuk menangani objek-objek In-Transit, Hot
Object, dan Negative Cache Object
maximum_object_size
Besar maksimum objek yang disimpan dalam cache. Dalam bytes
cache_dir
Directory yang digunakan Squid sebagai tempat penyimpanan objek-objek. Defaultnya
berada di directory /var/spool/squid
auth_param
Parameter yang digunakan untuk autentikasi. Untuk menjalankan autentikasi di Squid,
ACL proxy_auth REQUIRED harus didefinisikan dan diberi hak akses pada http_access.
Ada 3 mode parameter yang digunakan dalam autentikasi, yaitu basic, digest, dan
NCSA.
http_access
Http Access adalah parameter untuk mengizinkan atau menolak akses dari ACL-ACL
yang telah didefinisikan. Di sini hany ada dua opsi yaitu allow untuk mengizinkan
akses ACL dan deny untuk menolak akses dari ACL terhadap Squid.
reply_header_max_size
Opsi ini digunakan untuk membatasi jumlah ukuran file yang diizinkan untuk
didownload. Parameter allow menunjukkan bahwa suatu ACL dibatasi jumlah
maksimum download-nya. Request yang terlalu besar akan menyebabkan Squid
mengirimkan pesan “the request or reply is too large”.
delay_pools
Opsi ini untuk menspesifikasi berapa jumlah pool yang digunakan untuk membatasi
jumlah bandwidth dari ACL. Opsi ini akan dirangkaikan bersama opsi delay_class dan
delay_parameters yang akan dibahas di bawah ini.
delay_class
Opsi ini menspesifikasikan kelompok dari masing-masing pool yang telah didefinisikan
pada opsi delay-pools. Ada tiga class yang didukung Squid, antara lain:
– class 1: Semua akses dibatasi dengan single bucket, artinya hanya bisa
mendefinisikan overall bandwidth untuk suatu ACL saja, tidak bisa mendefinisikan
bandwidth dengan lebih mendetail
– class 2: Semua akses dibatasi dengan single agregate dengan dua parameter
bandwidth. Parameter pertama mendefinisikan berapa bandwidth maksimal yang
didapatkan ACL, parameter kedua mendefinisikan berapa bandwidth overall untuk
ACL yang spesifik yang ada pada network tersebut.
– class 3: Kelompok yang definisi bandwidth-nya paling mendetail. Parameter pertama
mendefinisikan berapa bandwidth maksimal yang didapatkan ACL, parameter
kedua mendefinisikan berapa bandwidth normal yang didapatkan ACL secara
umum, dan parameter yang ketiga adalah mendefinisikan bandwidth yang
didapatkan ACL jika mengakses ACL-ACL tertentu yang spesifik, misalnya file mp3.
delay_parameters
Opsi ini menspesifikasikan rumus bandwidth yang akan didapatkan oleh ACL yang
akan memasuki delay_pool. Misalnya ada entry berikut ini pada delay_parameters:
delay_parameters 1 -1/-1 2100/4000
delay_access
Opsi ini mendefinisikan siapa-siapa ACL yang akan dimasukkan ke pool tertentu untuk
mendapatkan “perlambatan” bandwidth. Bentuk umumnya adalah seperti ini:
delay_access 1 allow labprog
Opsi di atas berarti kita memasukkan ACL labprog ke dalam pool 1.
TimeOut
Menunjukkan berapa lama waktu pengiriman dan penerimaan request diizinkan.
Defaultnya adalah 300 detik
MaxClients
Menunjukkan berapa jumlah maksimal client yang diperbolehkan untuk mengadakan
koneksi dengan Apache secara simultan. Defaultnya adalah sebanyak 150
Port
Menunjukkan di port berapa Apache akan mendengarkan request. Sebagai webserver
biasa, biasanya Apache akan dikonfigurasi di port 80, yaitu port HTTP, namun jika
keadaan khusus, Apache bisa dikonfigurasi di port yang lain sesuai kebutuhan dengan
parameter ini.
ServerAdmin
Menspesifikasi alamat email yang harus dihubungi ketika server mengalami gangguan.
Biasanya alamat dari ServerAdmin ini ditampilkan pada halaman error ketika server
terjadi kesalahan atau masalah.
DocumentRoot
Opsi ini menspesifikasi dimana letak dokumen-dokumen HTML yang akan
ditampilkan pada halaman web diletakkan. Tanpa menggunakan virtual host, Apache
akan meload dokumen-dokumenyang diminta browser. Defaultnya terletak di /
var/www. Jika opsi DocumentRoot berubah, maka opsi pada tag <Directory /
var/www> juga harus diubah sesuai dengan path yang ditunjukkan di opsi
DocumentRoot
<IfModule mod_userdir.c>
Tag ini mendefinisikan dimana directory public dari user jika browser meminta URL
yang mengarah ke user directory – di Apache menggunakan tanda '~' (baca: tilde bukan
dibaca cacing).
<IfModule mod_dir.c>
Tag ini mendefinisikan dokumen-dokumen yang menjadi pre-written directory index atau
halaman depan dari suatu halaman web dimana user tidak perlu mengetikkan nama
dokumen yang direquest. Dokumen-dokumen yang umum menjadi index adalah
index.htm, index.html, index.shtml, default.htm (halaman HTML), index.cgi (dokumen CGI),
index.asp (dokumen ASP), index.php (dokumen PHP), dll.
AccessFileName .htaccess
Nama file yang digunakan untuk mencari directory-directory yang memerlukan
autentikasi untuk dapat dibuka
<IfModule mod_alias.c>
Tag ini mendefinisikan nama-nama alias didefinisikan seperti misalnya directory alias
dsb.
NameVirtualHost <ipAddress>
Tag ini harus di-uncomment jika server dikonfigurasi untuk meng-host Virtual Host –
minimal satu IP Address harus didefinisikan dan biasanya yang disebutkan di situ
adalah server yang menangani virtual host. Jika tag ini tidak didefinisikan, maka virtual
host tidak akan berjalan dengan sempurna
<VirtualHost ip.address.of.host.some_domain.com>
<VirtualHost ip.address.of.host.some_domain.com>
ServerAdmin webmaster@host.some_domain.com
DocumentRoot /www/docs/host.some_domain.com
ServerName host.some_domain.com
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common
</VirtualHost>
Baris di atas mendefinisikan virtual host dari domain tertentu. Ada beberapa tag yang
harus diisi yaitu IP Address dari domain, email dari administrator server, letak
dokumen yang akan ditampilkan, nama domain dari server virtual, error log, dan
custom log. Selain itu, semua opsi-opsi dan tag-tag yang ada pada httpd.conf bisa di-
override menurut kebutuhan dari virtual host.
Workshop
Kita akan mencoba mempraktikkan segala teori di atas dalam UML yang telah kita
bangun (Lihat modul 1 (Subnetting dan Desain Jaringan) dan 2 (DNS dan Iptables).
Map dari network kita tercantum di bawah ini:
Problem 1: Setting Proxy Server
Perusahaan PT. Tata Surya memutuskan berlangganan internet ke
PT. AJK.Net dengan bandwith 512 Kbps. Dengan demikian diperlukan
pengaturan atau manajemen bandwith di dalam jaringan PT. TataSurya.
Setelah dilakukan rapat direksi. Diputuskan bahwa :
a. Semua workstation yang terhubung dengan internet, baik selama jam
kerja saja maupun tidak, harus melewati proxy, dan diputuskan
workstation tidak perlu menambah konfigurasi apapun. ( transparent
proxy ). Proxy tersebut mempunyai rule sbb :
- Maksimum download dibatasi 2 MB
- Maksimum koneksi per host/workstation dibatasi 8 koneksi simultan.
- Batas kecepatan koneksi overall adalah 256 Kbps. per-network
adalah 64 kbps. Sedangkan per-user/host dibatasi 2 Kbps jika
digunakan untuk download file bertipe exe, mp3, vqf, tar.gz, gz,
rpm, zip, rar, avi, mpeg, mpe, mpg, qt, ram, rm, iso, raw, dan
wav. Jika tidak, maka koneksi perhost HANYA mengikuti aturan per-
Network saja.
- Diputuskan juga para user TIDAK BOLEH membuka situs situs
terlarang.
Jenis situs2 terlarang tsb diantaranya : situs porno, situs spam,
dan situs situs lain yang ditentukan oleh direksi (baca:asisten)
tips ( gunakan regular expresion file shg bisa ditambah atau
dikurangi )
- semua workstation subnet Uranus tidak dapat menggunakan akses
proxy.
- Proxy PT. Tata Surya di sibling kan dengan proxy nya ISP PT. AJK
dengan ip 10.126.13.220 HTTP port 3128, ICP port 3130.
Penyelesaian:
Kita akan memasang Squid yang bertindak sebagai transparent proxy pada bridge,
karena posisi bridge berada di bawah gateway matahari sehingga semua request yang
keluar pasti akan melewati bridge.
Semua workstation yang terhubung dengan internet, baik selama jam kerja
saja maupun tidak, harus melewati proxy, dan diputuskan workstation
tidak perlu menambah konfigurasi apapun. ( transparent proxy )
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Kita buat dulu ACL untuk mendefinisikan file-file di atas dengan menggunakan regular
expression. Kemudian kita mendefinisikan 2 delay pool untuk menampung bandwidth.
Satu pool masuk dalam kategori class 2 untuk mendefinisikan aturan overall 256 Kbs
dan per-network 64 Kbps. Satu pool lainnya masuk kategori class 3 untuk
mendefinisikan aturan tambahan jika user mendownload file-file yang didefinisikan
dalam ACL url_regex dengan bandwidth maksimal 2 Kbps.
delay_pools 2
delay_class 1 3
delay_parameters 1 32000/32000 8000/8000 250/250
delay_access 1 allow lokal filegede
delay_access 1 deny all
delay_class 2 2
delay_parameters 2 32000/32000 8000/8000
delay_access 2 allow lokal
delay_access 2 deny all
Diputuskan juga para user TIDAK BOLEH membuka situs situs terlarang.
Jenis situs2 terlarang tsb diantaranya : situs porno, situs spam,
dan situs situs lain yang ditentukan oleh direksi (baca:asisten)
tips (gunakan regular expresion file shg bisa ditambah atau dikurangi)
Karena jumlah web-web terlarang (termasuk web-web porno) sangat banyak, maka
tidak akan praktis jika kita mendefinisikannya dengan cara seperti kita mendefinisikan
file-file yang akan didownload. Untuk itu kita mendefinisikan web terlarang tersebut di
file /etc/squid/webterlarang. Beberapa baris teratas dari isi file tersebut adalah seperti
di bawah ini:
www.justmarriedsex.com
freeadultvideo
www.sexitalia.com
www.bikinidesk.com
russiankiss
breatneyspears
0km
amateur
amateurs
amateurpages
Setelah itu kita tinggal melakukan denying pada http_access untuk ACL ini.
Proxy PT. Tata Surya di sibling kan dengan proxy nya ISP PT. AJK dengan
ip 10.126.13.220 HTTP port 3128, ICP port 3130.
Penyelesaian:
Langkah Pertama: Setting DNS Server di Bridge
Untuk menyelesaikan soal ini, kita perlu menambahkan beberapa entry domain di DNS
Server yang telah kita buat (Baca Modul 2: Sekilas DNS Server dan Iptables) yang berisi
domain-doman yang telah disebutkan dalam soal yaitu: www.klp17.com, klp17.com,
marketing.klp17.com, accounting.klp17.com, riset.klp17.com. Setting DNS-nya
dilakukan di file database DNS, dalam hal ini di /etc/bind/klp17.com pada host bridge
yang merupakan Primary DNS Server untuk zona klp17.com
;
; BIND data file for klp17.com
;
@ IN SOA bridge.klp17.com. galih.klp17.com (
200504233 ; Serial
7200 ; Refresh
3600 ; Retry
604800 ; Expire
86410 ) ; Negative Cache TTL
IN NS bridge.klp17.com.
IN NS pluto.klp17.com.
IN A 10.17.42.146
;; tempat secondary name server
;
;; anggota-anggota klp17.com
venus IN A 10.17.42.130
matahari IN A 10.17.42.131
reverse IN CNAME matahari
bridge IN A 10.17.42.133
proxy IN CNAME bridge
titan IN A 10.17.42.134
#sub IN CNAME titan
mars IN A 10.17.42.143
saturnus IN A 10.17.42.146
www IN CNAME saturnus
marketing IN CNAME saturnus
accounting IN CNAME saturnus
riset IN CNAME saturnus
neptunus IN A 10.17.42.147
uranus IN A 10.17.42.162
metis IN A 10.17.42.170
asteroid IN A 10.17.42.171
bumi IN A 10.17.42.167
pluto IN A 10.17.42.140
sub IN NS titan.klp17.com.
suryo IN NS titan.klp17.com.
demo IN NS pluto.klp17.com.
merkurius IN A 10.17.42.178
jupiter IN A 10.17.42.190
Perhatikan entry yang dicetak tebal. Entry pada SOA yang berbunyi:
IN A 10.17.42.146
kita mendefinisikan saturnus sebagai pemilik IP Address dari 10.17.42.146. Sub www
merupakan canonical name dari host Saturnus. Entry ini perlu dimasukkan agar alamat
http://www.klp17.com dapat diakses seperti halnya alamat http://klp17.com.
Kemudian subdomain lainnya seperti marketing, accounting, dan riset juga merupakan
canonical name dari saturnus karena letak webserver mereka juga berada di host
saturnus yang akan kita set untuk menangani semua domain tersebut dengan cara
menerpakan virtual host pada Apache.
<VirtualHost 10.17.42.146:80>
ServerName marketing.klp17.com
ServerAlias www.marketing.klp17.com
DocumentRoot /var/www/marketing.klp17.com/
</VirtualHost>
<VirtualHost 10.17.42.146:80>
ServerName riset.klp17.com
ServerAlias www.riset.klp17.com
DocumentRoot /var/www/riset.klp17.com/
</VirtualHost>
Demikian setting yang diperlukan untuk membuat host saturnus menjadi sebuah
webserver yang dapat meng-host beberapa domain sekaligus. Selamat mencoba! :D
Problem 3: Setting Reverse Proxy untuk Webserver Saturnus di host Matahari
Untuk memperingan kerja webserver saturunus serta supaya website
internal bisa diakses dari internet ( AJK ). settinglah Matahari
sebagai reverse proxy server (http accelerator) dari webserver
saturunus.
Penyelesaian:
Reverse Proxy Server pada Matahari menyebabkan Saturnus yang memiliki IP Address
private dapat diakses dari dunia luar lewat host matahari yang memiliki IP Address
public. Berikut adalah konfigurasinya:
http_port 80
Kita harus mengubah port default Squid (3128) menjadi 80 agar semua request HTTP ke
port 80 akan dilayani oleh Squid.
Kita mendefinisikan ACL agar request yang bertujuan ke web saturnus (10.17.42.146)
dengan port 80 diperbolehkan dan diteruskan oleh Squid
httpd_accel_single_host on
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header off
httpd_accel_host 10.17.42.146
Baris di atas adalah baris yang membuat Squid berubah tugas menjadi sebuah httpd
accelerator atau reverse proxy server untuk web saturnus (10.17.42.146). Cara terbaik
untuk memeriksa konfigurasi ini adalah dengan mengakses web saturnus lewat dunia
luar (tentu saja yang satu network dengan IP Live dari Matahari – dalam kasus ini
adalah network lab NCC yang memiliki address 10.126.13.x). Jika Squid pada Matahari
dihidupkan, maka reply-nya adalah isi web dari saturnus dan jika Squid pada Matahari
dimatikan maka tidak akan ada reply atau muncul pesan error bahwa tidak ada layanan
yang bisa memproses request.
Penutup
Pada modul ini kita telah belajar bagaimana membangun proxy server dan webserver
pada sebuah jaringan dengan menggunakan Squid dan Apache serta bagaimana
membuat Squid dan Apache bisa saling bekerja sama. Kesulitan yang ada mungkin
terletak pada bagaimana melakukan pemeriksaan dan testing karena pada beberapa
kasus seperti delay pool memerlukan keadaan yang sebenarnya, bukan hanya simulasi
pada UML saja. Selebihnya tidak ada masalah yang serius.
Ucapan Terimakasih
Ucapan terima kasih yang sebesar-besarnya saya ucapkan kepada:
– Allah SWT, Tuhan Semesta Alam
– Mas Cukris (Ahmad Kristiono), asisten pembimbing modul 3, yang dengan sabar
dan senang hati membimbing dan menuruti permintaan saya untuk melakukan
penundaan demo praktikum
– Mas Kamas Muhammad (http://www.sokam.or.id), yang telah membimbing sejak
awal, membuatkan UML tempat latihan di host Triana (alm.) (10.100.1.42), yang
dengan sabar melayani pertanyaan-pertanyaan yang kadang-kadang nyleneh. ^_^.
– Host triana.its.ac.id (alm). Kepergianmu telah membawa kesedihan yang mendalam
buatku. Sedikit kebersamaan denganmu telah banyak membuka pengetahuan
buatku.
– Host yudowati, tempat simulasi UML dilakukan
– Dan tentu saja, nirmaladewi.its.ac.id dan eliza, dua kekasihku tercinta...
Daftar Pustaka
– Tentu saja, Mbah Google (http://www.google.com)
– http://www.squid-cache.org/
– http://squid-docs.sourceforge.net/latest/html/book1.html
– http://www.faqs.org/docs/securing/chap28sec231.html