Jumat, 28 Januari 2011

Proxy Server dengan Squid


Proxy server tersebut menggunakan squid versi 2.6-12 pada distro Fedora Core 6 yang saya fungsinya sebagai:

  1. Menyimpan halaman web di proxy untuk mempercepat akses Internet.

  2. Akses kontrol Internet berdasarkan IP Address. Menggunakan 2 network yang berbeda (saya fungsikan juga sebagai router – dengan IP Forwarding), untuk ini, saya menggunakan 3 NIC pada 1 server.

  3. Blacklist daftar situs terlarang secara manual.

  4. Membatasi ukuran download File dengan ekstension tertentu dan hanya berlaku pada jam tertentu.

  5. Pesan Error dalam format Bahasa Indonesia.

  6. Rule untuk memperbolehkan akses Internet hanya protokol tertentu saja.

  • Langkah-langkah yang dilakukan:

    - Instal aplikasi squid
    - Edit file konfigurasi squid
    - Buat direktori dan file blacklist untuk blacklist secara manual
    - Buat direktori dan file untuk pesan error dalam bahasa indonesia
    - Check konfigurasi firewall yang diterapkan di proxy
    - Jalankan servicenya
    - Test konfigurasi di proxy dan client
    - File konfigurasi squid: /etc/squid/squid.conf (versi saya)

    #SQUID 2.6.STABLE12
    #Author by: http://fxekobudi.net

    # OPTION JARINGAN
    # —————————————————————————–
    http_port 3128
    icp_port 0

    # OPTION UKURAN CACHE
    # ——————————————————————-
    cache_mem 256 MB
    cache_swap_low 94
    cache_swap_high 96
    maximum_object_size 16384 KB
    minimum_object_size 4 KB
    maximum_object_size_in_memory 2048 KB
    fqdncache_size 1024
    cache_replacement_policy heap GDSF
    memory_replacement_policy heap GDSF

    # DIREKTORI LOG DAN CACHE
    # ——————————————————————
    cache_dir aufs /var/spool/squid 9000 16 256
    access_log /var/log/squid/access.log squid
    cache_log /var/log/squid/cache.log
    cache_store_log none

    # TUNING CACHE PROXY
    # ——————————————————————
    refresh_pattern ^ftp: 1440 20% 10080
    refresh_pattern ^gopher: 1440 0% 1440
    refresh_pattern . 0 20% 4320
    negative_ttl 1 minutes

    # TIMEOUT
    # —————————————————————–
    half_closed_clients off
    # ————————————-
    # Memblok situs terlarang (blacklist)secara manual
    # ————————————-
    acl noblacklist dstdomain “/etc/squid/blacklist/no-blacklist.txt”
    acl katablacklist url_regex -i “/etc/squid/blacklist/kata-blacklist.txt”
    acl domainblacklist dstdomain “/etc/squid/blacklist/domain-blacklist.txt”
    acl ipblacklist dst “/etc/squid/blacklist/ip-blacklist.txt”

    acl tdkbebasdownload time 08:00-13:00

    # AKSES KONTROL
    # ——————————————————————
    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 to_localhost dst 127.0.0.0/8
    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
    # ————————————-
    # Daftar IP address
    # ————————————-
    acl lab1 src 192.168.254.1-192.168.254.40/255.255.255.255
    acl staf-it src 192.168.254.41-192.168.254.42/255.255.255.255
    acl lab2 src 192.168.254.43-192.168.254.44/255.255.255.255
    acl ruang1 src 192.168.1.1-192.168.1.8/255.255.255.255
    acl ruang2 src 192.168.1.11-192.168.1.17/255.255.255.255

    # ————————————-
    # Memblok situs terlarang secara manual
    # ————————————-
    http_access allow noblacklist
    http_access deny katablacklist
    http_access deny domainblacklist
    http_access deny ipblacklist

    http_access allow manager localhost
    http_access deny manager
    # ————————————-
    # Rule yang saya terapkan
    # ————————————-
    http_access allow lab1
    http_access allow staf-it
    http_access allow lab2
    http_access allow ruang1
    http_access allow ruang2

    acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .tar.bz2 .bz2 .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .raw .wav .iso

    # Cancel download if file is bigger than 2 MB = 2000×1024 byte = 2048000 byte
    reply_body_max_size 2048000 allow magic_words2 tdkbebasdownload

    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost
    http_access deny all
    http_reply_access allow all
    icp_access allow all

    # PARAMETER ADMINISTRATOR
    # —————————————————————–
    cache_mgr fxekobudi@gmail.com
    cache_effective_user squid
    cache_effective_group squid
    visible_hostname proxy.fxekobudi.local

    # PESAN ERROR DALAM BAHASA INDONESIA
    # ——————————————————————–
    error_directory /usr/share/squid/errors/Indonesian

    Agar fungsi blacklist manual itu dapat digunakan, buat direktori berisi file-file disebutkan dalam blacklist manual:

    # mkdir /etc/squid/blacklist
    # cd /etc/squid/blacklist/
    # vim no-blacklist.txt
    # vim kata-blacklist.txt
    # vim domain-blacklist.txt
    # vim ip-blacklist.txt

    Minimal dimasukkan satu item untuk masing-masing file tersebut, karena jika tidak, maka saat kita melihat error log squid sesaat setelah service dijalankan, akan ada pesan error tidak menemukan item pada file tersebut.

    Selain itu, sertakan konfigurasi untuk pesan Error dari Proxy squid dalam bentuk bahasa indonesia, agar user di tempat kerja saya lebih mudah memahami maksudnya. Ide pesan error ini kemudian menjadi inspirasi saya saat mengkonfigurasi redirect SquidGuard untuk mengarah kepada file yang sengaja saya buat di root direktori web server proxy.
    Untuk melakukannya, tinggal copykan saja pesan Error dalam bahasa Inggris ke direktori lokasi pesan error berbahasa Indonesia.

    # cp /usr/share/squid/errors/English /usr/share/squid/errors/Indonesian

    trus terjemahkan file-filenya

    Untuk menjalankan servicenya, gunakan saja perintah:

    # /sbin/service squid start

    Diperlukan menambahkan di konfigurasi Firewall menggunakan Iptable agar client diperbolehkan mengakses Internet ini melalui proxy, request client ke proxy dengan IP address yang terdaftar diperbolehkan melalui port 3128 (atau 8080) tergantung konfigurasi yang digunakan Agar bisa akses ke proxy, rule iptable-nya untuk file /etc/sysconfig/iptables harus memuat rule ini:

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT

    Untuk menerapkan IP forwarding, edit file /etc/sysctl.conf dan memberi nilai 1 (enable) untuk direktive:

    net.ipv4.ip_forward = 0 menjadi net.ipv4.ip_forward = 1


    Manajemen Bandwidth Di Squid Menggunakan Delay Pools

    Dokumen ini menjelaskan bagaimana cara mengkonfigurasikan proxy server anda untuk membatasi bandwidth download atau incoming traffic.
    Berikut langkah-langkah pengkonfigurasian manajemen bandwidth di squid:
    1. Pertama-tama periksa apakah squid telah berjalan di server dan telah dikonfiguraisi sebagai mesin proxy server.
    2. Sebelum memulai memanajemen bandwidth di squid, kita jelaskan dulu komponen-komponen manajement bandwidth di squid :


    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
    Angka 1 berarti rumus ini berlaku untuk pool 1. Angka -1/-1 berarti bandwidth maksimal yang diberikan Squid adalah tidak terbatas untuk pool ini.

    Angka 2100/4000 berarti bandwidth yang didapatkan oleh ACL setelah masuk ke pool ini. Angka ini berada dalam kelipatan 8 b, sehingga untuk mendapatkan nilai bandwidth yang sebenarnya harus dikalikan delapan. Angka 2100 adalah bandwidth yang didapatkan ACL pada masa-masa normal. Jika dikalikan 8, maka bandwidth normal yang akan didapatkan ACL sekitar 18 Kbps. Angka 4000 adalah bandwidth maksimal yang didapatkan ACL pada masa-masa jalur sedang kosong. Jika dikalikan 8, maka bandwidth yang didapatkan sekitar 32 Kbps.

    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.

    3. Jika sudah mengerti komponen-komponen delay pool, kita mulai konfigurasi delay pool .
    Di umpamakan kita mempunyai bandwidth dari ISP sebesar 512kb, dan kita membuat rule seperti berikut ini:
    - 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.

    Penyelesaian:


    Edit file /etc/squid/squid.conf
    #vi /etc/squid/squid.confLalu tambahkan contoh konfigurasi ini:
    # Sebelum kita melakukan pembatasan, kita perlu mendefinisikan ACL network # # yang kita perlukan terlebih dahulu. ACL yang didefinisikan pada host bridge
    # seperti di bawah ini:acl lokal src 192.168.1.0/24# Kemudian kita membatasi maksimum download dengan tag di bawah ini:
    # 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.

    acl filegede url_regex -i \.exe
    acl filegede url_regex -i \.mp3
    acl filegede url_regex -i \.vqf
    acl filegede url_regex -i \.gz
    acl filegede url_regex -i \.rpm
    acl filegede url_regex -i \.zip
    acl filegede url_regex -i \.rar
    acl filegede url_regex -i \.avi
    acl filegede url_regex -i \.mpeg
    acl filegede url_regex -i \.mpe
    acl filegede url_regex -i \.mpg
    acl filegede url_regex -i \.qt
    acl filegede url_regex -i \.ram
    acl filegede url_regex -i \.rm
    acl filegede url_regex -i \.iso
    acl filegede url_regex -i \.raw
    acl filegede url_regex -i \.wav

    # Kita buat dulu ACL untuk mendefinisikan file-file di atas dengan menggunakan # regularexpression. Kemudian kita mendefinisikan 2 delay pool untuk
    # menampung bandwidth.
    # Satu pool masuk dalam kategori class 2 untuk mendefinisikan aturan overall
    # 256 Kbps 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

    Jika sudah selesai, simpan hasil konfigurasi dan restart squid


    #/etc/init.d/squid restart

    Sumber : http://miji.wordpress.com/2007/02/06/57/#comment-21


1 komentar:

Rizky Senpai mengatakan...

gan ane ijin sedot yee...
buat latihan di rumah...
thx banget artikelnya..
sangat jelas ...

Posting Komentar