PROXY SERVER
DENGAN SQUID
Muchamad Arifin
apin.prastya@gmail.com
YM : apin_yuuk
genkigama.blogspot.com
Kelompok Linux Arek Surabaya
2009
STAGE 1
SHARING INTERNET SEDERHANA
DAN PENGENALAN PROXY SERVER
Internet di negara kita ini harganya masih tergolong mahal, bahkan bagi perusahaan
besar. Terkait dengan mahalnya harga internet ini maka muncullah bermacam tool ataupun
software yang bisa digunakan untuk mengatur dan membagi koneksi internet yang telah di
beli dari sebuah ISP. Untuk membeli 1 IP public saja harganya sudah berjuta-juta. Dengan
harga yang mahal dan hanya mendapatkan 1 koneksi internet maka muncullah gagasan untuk
mensharing internet yang telah di beli tadi agar bisa dipakai oleh orang banyak. Ada banyak
cara untuk bisa mensharing internet tersebut yaitu salah satunya dengan menggunakan routing
NAT (Network Address Translation) yaitu dengan menggunakan router, dan menggunakan
sebuah proxy server. Dimana pada kesempatan kali ini kita akan membahas tentang
pembuatan proxy server.
Proxy server berfungsi sebagai gateway (jembatan) antara internet dengan intranet
kita. Proxy server adalah sebuah komputer server atau program komputer yang dapat
bertindak sebagai komputer lainnya untuk melakukan request terhadap content dari internet
atau intranet.
Proxy server tidak terlihat oleh komputer klien, artinya seorang pengguna (client) yang
berinteraksi dengan internet melalui sebuah proxy server tidak akan mengetahui bahwa
sebuah proxy server sedang menangani request yang dilakukannya. Web server yang
menerima request dari proxy server akan menginterpretasikan request-request tersebut seolah-
olah request itu datang secara langsung dari komputer klien, bukan dari proxy server.
Proxy server juga dapat digunakan untuk mengamankan jaringan pribadi yang
dihubungkan ke sebuah jaringan publik (seperti halnya internet). Proxy server memiliki lebih
banyak fungsi daripada router yang memiliki fitur paket filtering karena memang proxy server
beroperasi pada level yang lebih tinggi dan memiliki kontrol yang lebih menyeluruh terhadap
akses jaringan. Proxy server yang berfungsi sebagai sebuah "agen keamanan" untuk sebuah
jaringan pribadi, umumnya dikenal sebagai firewall.
Sharing Internet Sederhana
Kita dapat melakukan sharing internet sederhana di linux hanya dengan memanfaatkan
IPTABLES dan ip forwarding. Dimana pada server sharing internet terdapat 2 interface
(ethernet) yang satu menuju ke internet, dan yang satu lagi menuju ke client yang nantinya
akan menikmati internet dari sharingan. Adapun gambar dari jaringan adalah sebagai berikut :
Sisi SERVER :
Dalam contoh ini eth0 (ethernet 1) terkoneksi dengan internet dan eth1 (ethernet 2) terkoneksi
ke client (switch). Pertama kita setting IP pada eth0 dengan perintah ifconfig, dengan format
ifconfig [interface] [ip] [netmask]. Dan memberikan default gateway untuk bisa mengakses
internet.
root@satria-desktop:~# ifconfig eth0 192.168.1.2 netmask 255.255.255.0
root@satria-desktop:~# route add default gw 192.168.1.1
root@satria-desktop:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:F5:53:6F:9D
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0xac00
eth1 Link encap:Ethernet HWaddr 00:90:F5:53:6F:9D
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0xac00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:87 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7171 (7.0 KiB) TX bytes:7171 (7.0 KiB)
Dan jangan lupa untuk memberikan DNS server dengan cara mengedit file di /etc/resolv.conf.
Dan isi dengan DNS server dari ISP Anda, jika Anda menggunakan Telkom maka DNS nya
adalah 202.134.0.155 dan 202.134.1.10, simpan lalu keluar.
root@satria-desktop:~# nano /etc/resolv.conf
Dan pastikan pada server telah bisa mengakses internet dengan cara test ping ke google.com.
root@satria-desktop:~# ping google.com
PING google.com (74.125.45.100) 56(84) bytes of data.
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=1 ttl=235
time=1860 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=3 ttl=235
time=1558 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=4 ttl=235
time=1722 ms
64 bytes from yx-in-f100.google.com (74.125.45.100): icmp_seq=5 ttl=235
time=1197 ms
64 bytes from 74.125.45.100: icmp_seq=6 ttl=235 time=1415 ms
--- google.com ping statistics ---
7 packets transmitted, 5 received, 28% packet loss, time 9798ms
rtt min/avg/max/mdev = 1197.927/1551.228/1860.833/231.721 ms, pipe 2
Jika koneksi internet pada server telah berjalan dengan baik maka selanjutnya kita setting IP
pada pada eth1 (untuk client).
root@satria-desktop:~# ifconfig eth0 192.168.5.1 netmask 255.255.255.0
root@satria-desktop:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:F5:53:6F:9D
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0xac00
eth1 Link encap:Ethernet HWaddr 00:90:F5:53:6F:9D
inet addr:192.168.5.1 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0xac00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:87 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7171 (7.0 KiB) TX bytes:7171 (7.0 KiB)
Setelah itu kita jalankan perintah untuk mensharing internet, yaitu dengan fitur NAT
MASQUERADE, dengan perintah :
root@satria-desktop:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@satria-desktop:~# iptables -t nat -A POSTROUTING -j MASQUERADE
Perintah yang pertama digunakan untuk mengaktifkan ip forwarding. Dan yang kedua
digunakan untuk masquerading (penyamaran). Dengan perintah tersebut maka internet yang
ada pada server telah tersharing.
Sisi CLIENT :
Selanjutnya kita akan setting pada client yaitu cukup mensetting IP satu kelas dengan IP
server (192.168.5.0/255.255.255.0). Dan mensetting default gateway menuju ke alamat IP
server (192.168.5.1). Dan juga mensetting DNS server seperti pada server.
root@satria-desktop:~# ifconfig eth0 192.168.5.2 netmask 255.255.255.0
root@satria-desktop:~# route add default gw 192.168.5.1
root@satria-desktop:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:F5:53:6F:9D
inet addr:192.168.5.2 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:17 Base address:0xac00
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:87 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7171 (7.0 KiB) TX bytes:7171 (7.0 KiB)
Lalu kita test internet dengan test ping.
root@satria-desktop:~# ping indowebster.com
PING indowebster.com (119.110.76.21) 56(84) bytes of data.
64 bytes from 119.110.76.21: icmp_seq=2 ttl=53 time=1864 ms
64 bytes from 119.110.76.21: icmp_seq=3 ttl=53 time=1806 ms
64 bytes from 119.110.76.21: icmp_seq=5 ttl=53 time=1327 ms
64 bytes from 119.110.76.21: icmp_seq=6 ttl=53 time=1910 ms
^C64 bytes from 119.110.76.21: icmp_seq=7 ttl=53 time=959 ms
--- indowebster.com ping statistics ---
7 packets transmitted, 5 received, 28% packet loss, time 15520ms
rtt min/avg/max/mdev = 959.906/1573.877/1910.321/371.487 ms, pipe 2
Dengan demikian maka sharing internet sederhana telah berhasil.
STAGE 2
PENGENALAN SQUID DAN INSTALASI SQUID
PENGENALAN
Squid adalah sebuah software proxy opensource yang sangat terkenal di kalangan para
operator jaringan. Selain yang sifatnya free Squid ini juga bisa jalan di hampir semua sistem
operasi seperti Linux, *BSD, bahkan di platform Windows. Banyak sekali opsi-opsi yang
ditawarkan oleh Squid ini diantaranya mempercepat browsing, pembatasan bandwith,
blocking situs, dan masih banyak sekali kemampuan dari Squid ini. Mengapa proxy Squid
dikatakan dapat menaikkan kecepatan browsing? Ini dikarenakan bila ada sebuah client yang
membuka sebuah web site maka web tersebut akan di simpan di cache Squid yang telah
disediakan, dan jika ada client lagi ingin membuka web yang sama maka Squid tidak akan
mencarinya langsung ke internet, melainkan dia akan mencarinya terlebih dahulu ke dalam
cache, jika web tersebut telah tersimpan dalam cache maka objek yang telah tersimpan tadilah
yang akan di berikan kepada client yang bersangkutan. Namun ada sebuah web site dinamik
dimana setiap kita membuka situs akan terjadi perubahan di dalamnya, nah inilah kehebatan
dari Squid ini, Squid tidak semata-mata melakukan caching dan memberikannya kepada client
lain bila ada yang merequest web yang sama, melainkan dia juga melakukan pengecekan
terhadap server utama dari web yang akan di akses, jika pada server web tersebut terjadi
perubahan maka Squid akan mengganti cache yang lama dengan conten web yang baru.
Dengan Squid ini maka akan membuat kita seakan-akan berinternetan secara lokal.
Secara garis besar Squid berjalan dengan topologi jaringan seperti berikut :
Dimana sebuah proxy server squid diletakkan antara sisi luar (internet) dengan sisi dalam
(LAN intranet). Dengan demikian keamanan jaringan akan lebih terjaga karena jaringan LAN
lokal kita tidak terhubung langsung oleh internet.
INSTALASI SQUID
Sampai saat ini Squid sudah berkembang sampai pada versi yang ke-3 (Squid 3.0). Dan yang
akan dibahas pada workshop kali ini kita akan menggunakan Linux sebagai sistem operasinya
(Ubuntu 8.10). Untuk instalasi Squid ada beberapa cara dalam instalasinya yaitu dengan
kompile dari source code nya, yang kedua yaitu instalasi menggunakan paket yang telah
disediakan oleh sebuah distro Linux. Untuk Ubuntu (Debian Family) tersedia paket dalam
bentuk *.deb, untuk RedHat Family *.rpm dan untuk Slax Family *.tgz
Instalasi dari source code
Untuk instalasi dari source code ini bisa dibilang mudah-mudah susah dan memerlukan waktu
yang relatif lebih lama dari instalasi dari paket. Namun walapun demikian instalasi dengan
cara ini memiliki keuntungan yaitu dalam menginstalnya kita bisa memilih modul apa saja
yang dapat di jalankan oleh Squid, jadi yang tidak diperlukan bisa tidak diinstall.
Pertama untuk instalasi ini kita harus memiliki file instalasinya, dapat di download di …
untuk versi stabil terbaru. Dalam contoh menggunakan Squid 3.0. Berikut langkah-langkah
dalam instalasi.
Pertama kita ekstrak dulu file source squidnya dan masuk ke dalam direktori tempat squid tadi
di ekstrak.
kharisma@satria-desktop:~$ tar -zxvf squid-3.0.STABLE12.tar.gz
kharisma@satria-desktop:~$ cd squid-3.0.STABLE12/
Setelah masuk ke dalam direktori squid, lalu konfigurasi squid yang akan kita install dengan
perintah configure. Untuk parameter-parameter untuk mengkonfigure ketik --help setelah
perintah configure, maka nanti akan keluar parameter apa saja yang bisa di pake untuk
mengkonfigure squid. Setelah konfigurasi instalasi squid selesai lalu kita kompile dengan
perintah make, dan menginstallnya dengan perintah make install.
kharisma@satria-desktop:~/squid-3.0.STABLE12$ ./configure --help
kharisma@satria-desktop:~/squid-3.0.STABLE12$ ./configure
kharisma@satria-desktop:~/squid-3.0.STABLE12$ make
kharisma@satria-desktop:~/squid-3.0.STABLE12$ make install
Setelah menempuh beberapa perintah tadi jika terjadi error dalam perjalanan, maka proses
instalasi squid telah selesai dan siap di pake. Secara default instalasinya maka instalasi squid
akan terletak pada folder /usr/local/squid/, mulai dari binari dan file untuk konfigurasi squid.
Untuk file konfigurasi terletak pada /usr/local/squid/etc/squid.conf, dan untuk file eksekusinya
terletak di /usr/loca/squid/sbin/squid. Untuk melihat opsi-opsi apa saja yang bisa dijalankan
pada squid bisa di lihat dengan menambahkan -h pada saat memanggil file eksekusinya.
kharisma@satria-desktop:~$ sudo /usr/local/squid/sbin/squid -h
[sudo] password for kharisma:
Usage: squid [-cdhvzCDFNRVYX] [-s | -l facility] [-f config-file] [-[au]
port] [-k signal]
-a port Specify HTTP port number (default: 3128).
-d level Write debugging to stderr also.
-f file Use given config-file instead of
/usr/local/squid/etc/squid.conf
-h Print help message.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
Parse configuration file, then send signal to
running copy (except -k parse) and exit.
-s | -l facility
Enable logging to syslog.
-u port Specify ICP port number (default: 3130), disable with 0.
-v Print version.
-z Create swap directories
-C Do not catch fatal signals.
-D Disable initial DNS tests.
-F Don't serve any requests until store is rebuilt.
-N No daemon mode.
-R Do not set REUSEADDR on port.
-S Double-check swap during rebuild.
-X Force full debugging.
-Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
kharisma@satria-desktop:~$
Instalasi dari paket (Repository)
Untuk instalasi yang mode ini bisa dibilang sangat mudah, karena tinggal mengetikkan
sebuah perintah di konsole, trus tunggu sampai selesai. Namun untuk cara ini diperlukan
sebuah koneksi internet. Petama kita edit server repositori yang terdekat dengan koneksi kita,
jika kita menggunakan ISP Telkom maka yang terdekat adalah http://dl2.foss-id.web.id/.
kharisma@satria-desktop:~$ sudo mv /etc/apt/sources.list
/etc/apt/sources.list.asli
kharisma@satria-desktop:~$ sudo nano /etc/apt/sources.list
Lalu masukkan berikut pada file tersebut :
deb http://dl2.foss-id.web.id/ubuntu/ intrepid main restricted universe
multiverse
deb http://dl2.foss-id.web.id/ubuntu/ intrepid-updates main restricted
universe multiverse
deb http://dl2.foss-id.web.id/ubuntu/ intrepid-security main restricted
universe multiverse
Lalu kita keluar dan simpan file tersebut dengan menekan Ctrl+X, lalu Y dan enter.
Setelah itu kita update data repositori dan menginstall squid3.
kharisma@satria-desktop:~$ sudo apt-get update
kharisma@satria-desktop:~$ sudo apt-get install squid3
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
squid3-common
Suggested packages:
squidclient squid3-cgi resolvconf
The following NEW packages will be installed:
squid3 squid3-common
0 upgraded, 2 newly installed, 0 to remove and 253 not upgraded.
Need to get 1098kB of archives.
After this operation, 7266kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Kita tunggu sampai instalasinya selesai. Untuk instalasi dengan cara ini file untuk konfigurasi
squid berada di /etc/squid3/squid.conf.
STAGE 3
CONFIGURASI SQUID
Sisi Server
Sebelum mengkonfigurasi squid pertama kita pastikan pada server telah bisa di pakai untu
internetan. Dengan cara yang sama pada saat konfigurasi sharing internet sederhana pada
stage sebelumnya di atas. Seperti halnya pada sharing internet tadi, server squid juga
membutuhkan 2 interface (ethernet), yang satu menuju ke internet dan yang satu menuju ke
klient.
Squid memiliki banyak sekali opsi-opsi konfigurasinya, dan banyak sekali fitur yang
ditawarkan. Untuk opsi-opsi dalam konfigurasi squid bisa dilihat pada website utamanya
squid di http://www.squid-cache.org/ atau bisa ngopi pada workshop ini kepada pemateri
workshop. Dalam mengkonfigurasi squid kita harus benar-benar teliti karena kesalahan satu
huruf saja bisa membuat squid kita error. Langsung saja kita konfigurasi squid dengan
mengedit file di /etc/squid3/squid.conf. Sebelum mengedit kita pindah dulu file asli dari
squid.conf ke squid.conf.asli.
kharisma@satria-desktop:~$ sudo mv /etc/squid3/squid.conf
/etc/squid3/squid.conf.asli
kharisma@satria-desktop:~$ sudo gedit /etc/squid3/squid.conf
Lalu isikan pada file squid.conf tadi seperti di bawah ini, ini merupakan konfigurasi minimal
dari squid agar bisa berjalan.
http_port 3128
cache_mem 8 MB
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
#cache_dir aufs /cache 6000 14 256
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl warnet src 192.168.5.0/255.255.255.0
acl QUERY urlpath_regex cgi-bin \? localhost telkomspeedy.com
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
cache deny QUERY
http_access allow manager localhost
http_access deny !Safe_ports
http_access allow localhost
http_access allow warnet
http_access deny all
cache_mgr admin@proxy.genkigama.web.id
cache_effective_user proxy
cache_effective_group proxy
Keterangan untuk opsi-opsi di atas adalah sebagai berikut :
Opsi Keterangan
http_port Alamat port dimana squid bekerja (default 3128)
cache_mem Besar memori yang dipakai squid untuk cache
cache_replacement_policy Aturan yang dipakai untuk replace cache jika cache di hardisk
sudah penuh :
LFUDA : mempertahankan file besar dalam cache
GDSF : mempertahankan file kecil dalam cache
memory_replacement_policy Aturan yang di pakai untuk replace cache yang ada di memori
cache_dir Direktori tempat dari cache squid
acl List access yang akan di tangani oleh squid
http_access Digunakan untuk allow/deny dari acl
cache_mgr Yang akan keluar di client bila terjadi error
cache_effective_user User system yang manangani cache
cache_effective_group Group system yang menangani cache
Setelah mengedit file squid.conf lalu kita start squid :
kharisma@satria-desktop:~$ sudo /etc/init.d/squid3 start
Jika tidak terjadi error maka squid telah berjalan dengan baik.
Sisi Client
Yang perlu kita lakukan pada client adalah mensetting IP sesuai dengan klas IP yang berada di
server yang melayani client. Setting ip sama dengan pada setting client pada sharing internet
sederhana pada stage 1, namun disini kita tidak perlu mensetting default gateway dan DNS
server, cukup dengan mensetting IPnya saja.
Namun kita perlu mensetting proxy pada web browser yang ada pada client, setting proxy
dengan alamat IP dari squid proxy. Dengan cara buka firefox, klik di edit -> preference. Lalu
ke tab Advance dan klik di Setting.
Pilih pada Manual Proxy Configuration dan masukkan alamat IP server squid beserta dengan
portnya.
Ngeblok Situs Gak Bener (porno)
Squid memiliki banyak sekali kemampuan salah satunya yaitu ngeblok situs. Lha dari fasilitas
ini bisa kita pakai untuk mengeblok situs-situs yang dianggap bisa merusak moral seperti situs
porno. Caranya sangat mudah sekali, pertama kita buat acl dengan dstdomain (destination
domain), lalu pada http_access kita deny pada acl tersebut. Yang kita perlukan yaitu :
acl warnet 192.168.5.0/24
acl dilarang dstdomain .17tahun.com .porn.com
http_access deny dilarang warnet
http_access allow warnet
Setelah mensetting squid.conf lalu kita reload squid. Selain dengan cara di atas kita bisa
mencatat dulu nama domain-domain yang akan di blok dalam suatu file, lalu kita include kan
ke dalam squid.conf, contoh :
acl warnet 192.168.5.0/24
acl dilarang dstdomain “/etc/squid3/dilarang”
http_access deny dilarang warnet
http_access allow warnet
Dimana daftar domain yang kita blok telah tertulis di /etc/squid3/dilarang. Selanjutnya selain
memakai dstdomain ada satu lagi opsi yang sangat berguna dan ampuh yaitu menggunakan
url_regex. url_regex digunakan untuk memblok alamat url yang ada di address bar dari web
browser. Jadi kita tinggal menaruh kata kunci saja yang akan di blok, tidak perlu di sebutkan
nama domainnya, berikut cara penggunaannya :
acl warnet 192.168.5.0/24
acl haram url_regex -i sex porn
http_access deny haram warnet
http_access allow warnet
Referensi :
http://id.wikipedia.org
http://www.squid-cache.org
http://visolve.com