Sunday, February 24, 2013

Membuat Proxy Server Sendiri Dengan Menggunakan Squid

Setelah berhasil memanfaatkan komputer tua di rumah sebagai access point berkat tulisan yang sebelumnya -> Membuat WAP, *sekarang semua orang rumah bisa internetan menggunakan Blackberry, Android, leptop dan lain-lain, tapi sangat sayang kalau komputer tua itu hanya dijadikan access point, hardisknya percuma, cpu-nya kurang berguna, ram mubazir, sayang sekali kalau semua itu tidak dimanfaatkan lagi.

setelah berfikir panjang kenapa tidak sekalian membuat proxy server di komputer tua tadi, lumayan bisa banyak berguna dari pada hanya dijadikan access point, bisa untuk cache website supaya browsing lebih lancar, bisa untuk filter situs-situs yang beranonim xxx untuk perbaikan moral, bisa untuk membatasi kecepatan download supaya tidak ada insiden rebutan bandwidth di rumah, semoga niat baik ini terkabul.

Bahas tentang proxy server pikiran langsung tertuju ke aplikasi dengan logo cumi-cumi yang punya nama Squid, kebetulan komputer tua tadi sudah terpasang linux untuk keperluan membuat access point yang kemarin dibahas, jadi hanya tinggal melakukan proses instalasi Squid-nya. Beruntung proses instalasi Squid itu tidak terlalu sulit, bagian terberatnya adalah untuk melakukan konfigurasinya. Kebetulan pernah menulis tentang Squid juga disini, tapi tulisan sebelumnya hanya mencangkup dasarnya saja atau bisa di bilang perkenalan.Nah, untuk kali ini kita akan mencoba membuat proxy server aktif dan semoga bisa berguna untuk semua.


Langkah pertama sudah pasti tahap instalasi, silakan ikuti langkah-langkah dibawah ini untuk melakukan proses instalasi.

# untuk ubuntu
sudo apt-get install squid3

#untuk arch
sudo pacman -S squid

Kita lanjut ke tahapan konfigurasi Squid nya supaya sesuai dengan kebutuhan yang kita perlukan, untuk cara merubah konfigurasi Squid nya cukup mudah karena hanya perlu merubah satu file saja. Editingnya juga hanya menggunakan teks editor apa saja, file yang harus diedit berada pada alamat /etc/squid/squid.conf untuk alamat file konfigrasi squid nya mungkin akan sedikit berbeda di setiap distro linux, tapi kalau sekarang alamatnya seperti tadi, jadi cara mengeditnya tinggal memasukkan perintah berikut:

sudo nano /etc/squid/squid.conf

atau

sudo gedit /etc/squid/squid.conf

atau
sudo kate /etc/squid/squid.conf

Disini saya akan sharing file konfigurasi yang saya gunakan pada komputer yang jadi bahan uji coba di rumah. Konfigurasi Squid ini hanya menggunakan sebagai kecil dari fungsi Squid itu sendiri, karena dia memiliki lebih bnyak lagi fitur-fitur lainnya.
################
#ACCESS CONTROL#
################
### mendifinisikan rule-rule yang akan digunakan, penulisannya :
### acl nama_rule src ip_address
### acl nama_rule port no_port
### diaktifkan dengan cara :
### http_access allow nama_rule atau http_access deny nama_rule

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 10.0.0.0/8    
acl localnet src 172.16.0.0/12    
acl localnet src 192.168.0.0/16    
acl localnet src fc00::/7       
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
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
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
acl CONNECT method CONNECT
acl purge method PURGE
acl connect method CONNECT

##########
#BLOCKING#
##########

acl BLACKLIST url_regex "/etc/squid/BLACKLIST"
#acl SEX dstdomain "/etc/squid/SEX"
http_access deny BLACKLIST
#http_access deny SEX

### filter url yang akan diblokir
### hilangkan '#' untuk mengaktifkan
#acl badurl dstdomain "/etc/squid3/socnet"
#deny_info http://google.co.id badurl

### setting waktu akses
acl pagi time SMTWHFA 10:00-23:00
#acl malam time SMTWHA 23:00-9:00

### setting tolak akses sesuai settingan waktu untuk domain yang ada di file
#/etc/squid/social.network
#http_access deny pagi badurl
#http_access deny sore badurl


# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager

# Only allow purge cache access from localhost
http_access allow purge localhost
http_access deny purge

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

###allow access###
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

#======================#
# DELAY POOL PARAMETERS
#======================#

################
# Filter Download #
################

acl DOWNLOAD url_regex -i .exe .flv .mp3 .rar .wmv .avi .mpeg .mpe .mpg .rm .iso .mkv .wmf .wma .3gp .7z .asf .m4a .m4v .mov .mp4 .mpa .mpe .msi .zip

delay_pools 1
delay_class 1 1
delay_parameters 1 10480/10480
delay_access 1 allow pagi DOWNLOAD
delay_access 1 deny ALL


# Squid normally listens to port 3128
http_port 3128 transparent

# Uncomment and adjust the following to add a disk cache directory.
# recommend -> gunakan maksimal 60% dari partisi fisik cache_dir
# recommend -> jumlah dir cache_dir/500
cache_dir ufs /home/squid/squid 24576 49 256

# memory yang dipakai untuk cache
cache_mem 6 MB

# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid

###LOG-LOG###
access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
logfile_rotate 5
log_ip_on_direct off
log_icp_queries off
buffered_logs off
emulate_httpd_log on

# Add any of your own refresh_pattern entries above these.
# improve HIT
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i \.(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i \.(rpm|cab|deb|exe|msi|msu|zip|tar|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|​sis)$ 10080 90% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i \.(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i \.(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i \.index.(html|htm)$ 0 75% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 1440 90% 10080

##########
#own rule#
##########

# list type yang tidak di cache
acl QUERY urlpath_regex -i cgi-bin \? \.php$ \.asp$ \.shtml$ \.cfm$ \.cfml$ \.phtml$ \.php3$ localhost
no_cache deny QUERY

# besaran max objek yang akan disimpan
maximum_object_size 128000 KB

# besaran min objek yang akan disimpan
minimum_object_size 0 KB

###################
#memory management#
###################

maximum_object_size_in_memory 32 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_swap_low 98
cache_swap_high 99


#########
#TIMEOUT#
#########

forward_timeout 240 second
connect_timeout 30 second
peer_connect_timeout 5 second
read_timeout 600 second
request_timeout 60 second
shutdown_lifetime 10 second

###########################
#ADMINISTRATIVE PARAMETERS#
###########################

cache_mgr kuro.kid@gmail.com    
cache_effective_user proxy
cache_effective_group proxy
httpd_suppress_version_string on
visible_hostname kuro.kid@admin

#############
#DNS OPTIONS#
#############

dns_timeout 10 seconds
# memakai dns di computer server
hosts_file /etc/hosts
# contoh konfigurasi lain
#dns_nameservers 203.130.193.74 202.134.0.155 8.8.8.8 61.247.0.8

Konfigurasi yang digunakan diatas meliputi beberapa fitur yang ada pada Squid, diantaranya sebagai berikut:

  • limit kecepatan download jika mendownload file-file dengan ekstensi tertentu.
  • limit speed hanya berlaku pada jam-jam tertentu.
  • Melakukan blocking beberapa situs.
  • Caching website
  • Access control

Untuk bahan pembelajaran konfigurasi diatas sudah ditambahkan argumen-argumen yang menjelaskan fungsi dari setiap bagian, jadi silakan dipelajari dan digunakan sebaik mungkin, jangan di lihat dari jumlah barisnya kalau di pelajari satu persatu pasti paham.

Disini saya bukannya pelit dan tidak ingin menjelaskan baris per barisnya, tapi akan sangat panjang dan melelahkan kalau file konfigurasi tadi dijelaskan satu per satu, mungkin di lain waktu saya akan menulis lagi tentang Squid ini supaya kita semua bisa menjadi lebih paham.

Disini saya ingin menggunakan Squid sebagai transparent proxy, jadi pada file konfigurasi tadi harus ditambahkan kata-kata "transparent", lebih tepatnya pada baris yang menjelaskan port berapa yang akan digunakan oleh si squid ini.
http_port 3128 transparent

Kalau proses konfigurasi sudah selsesai semua, tinggal mengikuti perintah-perintah dibawah ini supaya squid bisa berjalan.
# membuat tempat swap nya, alamat nya sesuai dengan konfgurasi tadi 
sudo squid -z
# untuk menjalankan squid
sudo /etc/rc.d/squid start

Selesai semua konfigurasinya squid sudah berhasil dijalankan, tapi tugas belum selesai sampai disini, karena kita harus mengatur client-client yang menggunakan access point yang kita buat sebelumnya supaya lewat ke proxy yang kita buat dulu sebelum mereka bisa mengkases internet, kalau tidak jirih payah kita melakukan konfigurasi akan percuma saja.

Nah, untuk proses redirection yang kita butuhin tadi, kita akan membutuhkan sebuah firewall untuk melakukan tugas tadi, berhubung di proses membuat WAP sebelumnya memerlukan firewall juga, jadi kita tidak perlu lagi melakukan instalasi karena firewall sudah terpasang yaitu IPTABLES, tinggal kita buat rule yang bener maka dia akan menangani tugas selanjutnya.

Rule yang kita akan kasih itu seperti berikut:
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128

Ip yang dipakai diatas itu ip komputer tua yang saya gunakan, jadi kalau ingin praktek sendiri sesuaikan ip yang digunakan, untuk wlan0-nya itu adalah interface yang dijadikan access point.Jadi intinya request yang datang dari port 80 yang berasal dari interface wlan0 akan di forwarding ke ip 192.168.0.1 dan melalui port 3128 yang adalah port Squid yang kita gunakan tadi.

:::referensi
Manual pengguna ArchLinux -> squid
Forum tetangga yang membahas proxy
Saingan om albert

2 comments:

  1. jika menggunakan putty, cara mengetahui proxy server & port awal bagaimana?

    ReplyDelete