Baiklah. kisanak semua.. big_smile
(heheh.. kayak di dunia persilatan aja)

Saya akan coba jelaskan disini, step by step instalasi Squid ZPH, mangle TOS iptables, Instalasi WebHTB v2.7 serta alokasi bandwidtnya di WebHTB
diasumsikan mesin sudah bisa memforward paket dan berfungsi baik sebagai router

Login sebagai root, kemudian

1. Instalasi Squid versi 2.7 STABLE3 atau yang lebih baru

pada distro lain, seperti fedora, slackware dan lainnya, saya sarankan untuk kompile squid dari source

berhubung yang saya gunakan adalah distro Ubuntu hardy (8.04) default instalasi nya adalah Squid versi 2.6 STABLE 18 maka dengan sedikit ngarang, saya paksakan squid untuk intrepid jalan di hardy, pada distro debian seharusnya tidak berbeda jauh.

cara instalasinya bisa download squid dan dependenciesnya secara manual dengan

Code:

dpkg -i <nama paket>

(gunakan fitur search di packages.ubuntu.com untuk mencari paket2 yang lain)

Code:

http://kambing.vlsm.org/ubuntu/pool/main/s/squid/squid_2.7.STABLE3-1ubuntu2_i386.deb
http://kambing.vlsm.org/ubuntu/pool/main/s/squid/squid-common_2.7.STABLE3-1ubuntu2_all.deb
http://kambing.vlsm.org/ubuntu/pool/main/s/ssl-cert/ssl-cert_1.0.23_all.deb

atau jika ingin mudah bisa menambahkan repo main untuk intrepid di /etc/apt/source.list

#nano /etc/apt/sources.list
tambahkan di baris terakhir

Code:

deb http://kambing.ui.edu/ubuntu intrepid main

disini saya menggunakan repo dari UI. silahkan sesuaikan dengan selera smile
kemudian update source-list anda
#apt-get update
#apt-get install squid squid-client squid-cgi

setelah selesai instalasi, hapus extra source list tadi, bisa dengan memberi tanda # di awal baris, menjadi

Code:

#deb http://kambing.ui.edu/ubuntu intrepid main

update lagi source-list anda, agar repo Ibex tidak diaktifkan
#apt-get update

sampai disini, squid seharusnya sudah terinstall dan berjalan

2. Konfigurasi squid.conf
matikan sservice squid yang sedang berjalan
#/etc/init.d/squid.stop

yang terpenting adalah bagaimana caranya menandai paket2 yang telah berada di mesin proxy (cache HIT), hal ini dimungkinkan dengan implementasi ZPH (Zero Penalty Hit)

tambahkan baris ini pada squid.conf

Code:

#Marking ZPH
zph_mode tos
zph_local 0x04
zph_parent 0
zph_option 136

disini kita akan memberikan Type Of Service (TOS) kepada objek yang tercache, dengan kode mnemonic TOS 0x04 (Maximize-Reliability) untuk dapat di MARK oleh IPTables
seharusnya nilai tos nya bisa kita rubah secara custom (misal 0x30), tapi iptables yang belum di patch, hanya mengenli 5 jenis TOS

Type Of Services — Mnemonic Hexadecimal
Normal-Service  0x00
Minimize-Cost    0x02
Maximize-Reliability    0x04
Maximize-Throughput    0x08
Minimize-Delay    0x10

jika ingin mengunakan TOS diluar itu, kita harus patch iptablesnya dengan Patch-O-Matic.
(tidak dibahas disini)

berikut cuplikan squid.conf saya secara lengkap :

Code:

#==================================$
#  Proxy Server Versi 2.7.Stable3
#  Faisal Reza @ AlexaNET
#==================================$
http_port 3128 transparent
hierarchy_stoplist cgi-bin ? .js .jsp
acl QUERY urlpath_regex cgi-bin \? .js .jsp
no_cache deny QUERY
cache_mem 8 MB
cache_swap_low 98
cache_swap_high 99
max_filedesc 8192
maximum_object_size 700 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 512 bytes
ipcache_size 4096
ipcache_low 98
ipcache_high 99
fqdncache_size 4096
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
cache_dir aufs /proxy1 16000 32 256
cache_dir aufs /proxy2 16000 32 246
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
pid_filename /var/run/squid.pid
dns_nameservers 208.67.222.222 208.67.220.220
#dns_nameservers 127.0.0.1
cache_swap_log /var/log/squid/swap.state
emulate_httpd_log on
hosts_file /etc/hosts
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320
negative_ttl 1 minutes
half_closed_clients off

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 563              # https, snews
acl SSL_ports port 873                  # rsync
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
acl Safe_ports port 591                 # filemaker
acl Safe_ports port 777                 # multiling http
acl Safe_ports port 631                 # cups
acl Safe_ports port 873                 # rsync
acl Safe_ports port 901                 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

##############################
# SNMP
snmp_port 3401
acl snmpsquid snmp_community public
snmp_access allow snmpsquid localhost
snmp_access deny all

acl alexa-net src 172.16.12.192/26  ## Sesuaikan
acl alexa-hotspot src 192.168.2.0/24  ## Sesuaikan
http_access allow alexa-net
http_access allow alexa-hotspot
http_access deny all
http_reply_access allow all
icp_access deny all
always_direct deny all

cache_mgr faisareza@gmail.com
visible_hostname alexanet.netgameonline.com
cache_mgr faisareza@gmail.com
cache_effective_user proxy
cache_effective_group proxy
coredump_dir /var/spool/squid
shutdown_lifetime 10 seconds
logfile_rotate 14

#Marking ZPH
zph_mode tos
zph_local 0x04
zph_parent 0
zph_option 136

pada kasus ini saya memisahkan lokasi cache pada harddisk yang berbeda dan di mount di 2 direktori, /proxy1 dan /proxy1 dengan ukuran masing2 partisi 20 GB
pastikan direktori tersebut dimiliki oleh user & group yang menjalankan squid

#chown -R proxy.proxy /proxy1
#chown -R proxy.proxy /proxy2

buat direktory swap
#squid -z

jika tidak ada pesan error, jalankan squid
#/etc/init.d/squid start

Sampai disini, anda telah berhasil memisahkan objek HIT dan MISS dengan ZPH mode TOS

3. Mark IPtables untuk TOS ZPH
pada bagian ini, kita akan menandai paket dengan Type Of Service 0x04 pada mangle IPtables
TOS 0x04 akan kita tandai dengan MARK id 4
tambahkan rules nya kira2 seperti ini :

Code:

iptables -A OUTPUT -t mangle -m tos --tos 0x04 -j MARK --set-mark 0x4

jangan lupa untuk mencantumkan rules NAT/MASQUERADE dan REDIRECT HTTP ke port Squid serta firewall lainnya

save iptables anda
#iptables-save /lokasi-file-config-iptables

4. Instalasi Web HTB & Support SSL apache2
asumsi disini, Apache2, mySQL, dan php5 sudah terinstall dan berjalan dengan baik.

langkah pertama, buat direktori webhtb
#mkdir -p /var/www/webhtb

set ownership
# chown -R www-data.www-data /var/www/webhtb

download source webhtb 2.7 taruh di /usr/src
#cd /usr/src
#wget -c http://internode.dl.sourceforge.net/sou … B_v2.7.bz2

ekstrak ke folder /var/www/webhtb
#tar -jxvf WebHTB_v2.7.bz2 -C /var/www/webhtb

Aktifkan modul SSL apache2
#a2enmod ssl

Generate SSL key untuk apache2
# apt-get install openssl ssl-cert
# mkdir -p /etc/apache2/ssl
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

Buat Virtual Host Untuk Webhtb
#nano /etc/apache2/sites-available/webhtb
kira2 isinya seperti ini

Code:

NameVirtualHost *:443
<VirtualHost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/webhtb/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/webthb/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

</VirtualHost>

Aktifkan Virtual Host WebHTB
#a2ensite webhtb

Reload konfigurasi apache anda
#/etc/init.d/apache2 force-reload

WebHTB agar start otomatis saat startup
Install sysvconfig php5-cli php5-snmp

Code:

#apt-get install sysvconfig php5-cli php5-snmp

copy startup wehbtb
#cp /var/www/webhtb/docs/webhtb /etc/init.d

set executable
#chmod u+x /etc/init.d/webhtb

jalankan sysvconfig
# sysvconfig
Pilih Enable/Disable – cari dan tandai webhtb dengan *
Save dan keluar

atau bisa juga dengan perintah
#invoke-rc.d -n webhtb start

Buka browser anda di komputer lain
coba akses ke WebHTB anda melalui
https://alamat-ip-lokal-server/setup/index.php

Masukkan:
* MySQL admin user: root
* MySQL admin password:
* MySQL WebHTB user:
* MySQL WebHTB password:
* MySQL WebHTB password again:
* MySQL WebHTB databasename: webhtb
* Default interface: eth1 —> ## Sesuaikan dengan interface LAN

sampai disini seharusnya WebHTB sudah bisa berjalan.

WebHTB bisa diakses pada browser dengan alamat :
https://alamat-ip-lokal-server/

One Step Closer.
hufff..huff…
wah cape juga ya…
perjuangan belum berakhir.. saya sarankan untuk ngopi2 atau minum jus dulu, jalan2 merilekskan mata & jari2 tangan, nelpon pacar dan bantu ibu di dapur
hehe.. bcanda big_smile

5. Setup WebHTB
hal pertama yang harus kita ketahui untuk mengalokasikan bandwidth adalah, berapa sih bandwidth yang kita dapat dari provider. Setuju nggak?
nah seletah itu, kita kalkulasikan, mau dibagi ke berapa komputer,

saya ambil contoh kasus :
bandwidth rata2 yang saya dapatkan dari provider = 512 kbps
jumlah client 10 jatah bandwidth masing2 client 40 kbps limit 256
jadi kalo lagi penuh, client dapet 40 kbps x 10 = 400 kbps, sisa 112 kbps –> untuk hotspot
kalo lagi kosong, masing2 komputer bisa dapet hingga 256 kbps, sisa 256 –> untuk hotspot

silahkan atur2 aja sesuai kebutuhan.

kembali ke permasalahan mengalokasikan bandwidth untuk cache HIT,
request DNS pun saya pisahkan, agar proses tanya jawab request DNS dari client ke server berlangsung cepat

___Klik Add Interface
> Tambahkan interface yang mengarah ke LAN

___Buat Beberapa kelas
>Class Name : Squid-DNS
>Bandwidth : 10240 (10Mbps)
>Limit : 10240
>Prio :0
>Que : SFQ (Stochastic Fairness Queeing) menurut saya performanya cukup baik untuk jaringan dengan bandwidth menengah, queing discpiline ini akan mencoba mengalirkan paket dengan adil kepada setiap client yang aktif. jadi waktu tunggu paket untuk dikirimkan tidak terlalu lama.

oh iya, PRIORITY digunakan untuk memprioritaskan paket dari/ke tujuan tertentu yang di definisikan

>Class Name : Administrasi ## (untuk koneksi billing ke server linux dan ke modem)
>Bandwidth : 1240 (1Mbps)
>Limit : 1240 (1Mbps)
>Prio :1
>Que : SFQ

>Class Name : Client-Warnet
>Bandwidth : 360
>Limit : 500
>Prio :2
>Que : SFQ

___Tambahkan Client
>Pilih kelas Squid-DNS
CLIENT : DNS-request
BANDWITDH : 128
LIMIT :128
SRC IP : IP DNS Server Lokal / Provider (untuk memasukkan lebih dari satu silahkan klik Add new src /dst

CLIENT : CacheHIT
BANDWITDH : 10240
LIMIT :10240
BURST : 32
PRIO : 1
MARK : 4 (sesuaikan dengan mangle iptables)

>Pilih kelas Administrasi
CILENT : billing2gateway
BANDWITDH : 1024
LIMIT :1024
SRC IP : alamat IP Server
DST IP : alamat IP billing

CILENT : billing2internet
BANDWITDH : 40
LIMIT :512
SRC IP : kosongkan
DST IP : alamat IP billing

perhatikan urutan, rules yang dikosongkan berarti SRC dari ALL
buatlah WebHTB akan untuk memproses data spesifik terlebih dahulu kemudian yang general
jika terbalik, maka kalkulasi untuk billing2gateway tidak akan di proses.

>Pilih kelas Client Warnet
CILENT : Satu
BANDWITDH : 40
LIMIT :256
PRIO : 2
SRC IP : kosongkan
DST IP : alamat IP Client

CILENT : Dua
BANDWITDH : 40
LIMIT :256
PRIO : 2
SRC IP : kosongkan
DST IP : alamat IP Client

dan seterusnya
untuk mengaktifkan bandwith menagement, Klik Change QoS status, pilih Start/Restart QoS

setiap melakukan perubahan, harus dilakukan Restart agar aturan baru ditetapkan

Untuk Melihat hasilnya kita bisa mengklik Show dan pilih Show Traffic

big_smile

Alhamdulillah, akhirnya selesai. Seneng deh.
semoga menginspirasi dan bermanfaat bagi rekan2 KIOS yang lain

cmiiw | kalo ada yang salah, tolong dikoreksi