WebHTB, Bandwidth manager linux  ncuptea blog

WebHTB, Bandwidth manager linux

Sebuah server, router atau gateway tak lengkap rasanya tanpa ada traffic control yang berfungsi sebagai Bandwidth manager dan juga pemisah bandwidth lokal dan internasional. Mengapa bandwidth harus di pisahkan, ini dikarenakan rata-rata ISP di Indonesia, katakan saja speedy misalnya yang tidak memberikan besaran bandwidth yang sama untuk akses ke server situs di luar negri dan dalam negri (cek aja via http://www.speedtest.net.

Bandwidth shaping atau bandwidth management kini dapat dilakukan lebih mudah dengan tampilan web gui, serta dilakukan secara terpusat tidak satu satu di tiap klien, nama software bandwidth managernya adalah webhtb. WebHTB ialah free bandwidth management, namun ada juga versi premiumnya akan tetapi webhtb versi free pun tak kalah featurenya.

Biasanya warnet atau teknisi warnet mengambil jalan alternatif dengan menggunakan management bandwidth mikrotik yang lebih simple namun Mikrotik sendiri tidak gratis dan mempuyai keterbatasan spesifikasi hardware. Dengan linux dan sebuah cpu P3 atau P4 standar maka sebuah router sekaligus server dapat dibuat menjadi 1, hardware pun bisa di upgrade dengan mudah sesuai kebutuhan.

Kembali ke WebHTB, webhtb ini ialah pengembangan dari htb yang cara konfigurasinya via web interfaces jadi dengan webhtb kita cukup klik sana-sini saja tidak seperti htb tools sebelumnya yang sisi management konfigurasinya dari bahasa scrip atau cli (command line interface). Hebatnya lagi dengan webhtb ini sekarang kita bisa menerapkan dalam 1 mesin server Linux bersamaan dengan squid proxy server tanpa terlimit nantinya, untuk itu sebelumnya mari kita berucap terima kasih kepada rekan kita yaitu opickdesign dan si_faisal yang telah mengedit/mempublish hasil oprekan webhtb sebagai traffic control dan shaping untuk memisahkan bandwidth ke situs lokal (IIX), games, dan situs internasional (IX)

Sebenarnya dari beberapa bulan lalu posting ini sudah tersimpan di draft, namun karena bentrok antara kode html dengan file konfig ssl-nya akhir baru bisa posting soal cara mudah manage bandwidth.


Skenario :
Apache2, mysql, squid sudah berjalan normal sebelumnya.

Topologi
Internet---(adsl di bridge)---(eth1)Ubuntu server(eth0)---klien
modem adsl = 192.168.1.1
-eth1 = 192.168.1.2
-eth0 = 192.168.0.1
-klien network = 192.168.0.0


Saya kira cukup basa-basinya, sekarang mari kita tengok cara install, setup, dan konfig webhtb ini.

Tahapan I - Aktifkan SSL untuk https nantinya, karena di ubuntu sendiri mempunyai masalah tidak mau jalan ssl nya dikarenakan belum terdapat file setifikat untuk apache2 dan openssl, maka dari itu cara mengaktifkan ssl di ubuntu sebagai berikut :
  • Menginstall OpenSSL dan SSL‐Certificate
    apt-get install openssl ssl-cert
    Membuat file sertifikat :
    mkdir /etc/apache2/ssl
    make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
  • Aktifkan modul SSL dan restart Apache2
  • a2enmod ssl /etc/init.d/apache2 force-reload
  • Menempelkan file sertifikat ke virtual host
    cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
    edit file /etc/apache2/sites-available/ssl, tambahkan script pada baris terakhir sebelum </VirtualHost> :
    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    Dan ganti
    <VirtualHost *:80>
    menjadi
    <VirtualHost *:443>

    Tambahkan script di bawah ini pada baris terakhir sebelum </VirtualHost> :
    SSLCertificateFile
    /etc/apache2/ssl/apache.pem

    Berikut ini ialah isi jadi keseluhan pada /etc/apache2/sites-available/ssl saya :
    <VirtualHost *:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    </VirtualHost>
  • Lakukan restart apache2 dan aktifkan modul HTTPS :
    /etc/init.d/apache2 force-reload
    a2ensite ssl
  • Terakhir, restart kembali service apache2 :
    /etc/init.d/apache2 restart

Tahapan II - menginstall repository yang di butuhkan :
apt-get install libphp-adodb php5-cli php5-gd php-pear php5-snmp php5-adodb phpmyadmin curl libnet-netmask-perl

Tahapan III - Install dan konfigurasi WebHTB untuk memisahkan bandwidth ke IIX, IX, dan Game
  • Masuk ke direktory /var :
    cd /var
  • Download file tar.bz2 dari link opickdesign yang telah di edit dengan penambahan source ip iix dan games.
    wget -c http://www.opikdesign.com/kios/webhtb/webhtb_V2.9.25.tar.bz2
  • Jika telah selesai mendownload, lakukan extrack :
    tar -xjvf webhtb_V2.9.25.tar.bz2
  • Ubah permission /var/webhtb/ supaya bisa di akses oleh apache2
  • chown -R www-data.www-data /var/webhtb
  • Edit file /etc/apache2/sites-available/ssl kemudian tambahkan seperti dibawah ini sebelum </VirtualHost> :

    Alias /webhtb /var/webhtb
    <Directory "/var/webhtb">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

    Hingga seperti berikut :
    <VirtualHost *:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    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

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
    Alias /webhtb /var/webhtb
    <Directory "/var/webhtb">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

    SSLEngine On
    SSLCertificateFile /etc/apache2/ssl/apache.pem
    </VirtualHost>
  • Restart kembali apache nya :
    /etc/init.d/apache2 restart
  • Sampai sejauh ini bandwidth manager atau bandwidth limiter dengan WebHTB ini telah selesai tahap pembuatan ssl dan virtualhost nya di mesin ubuntu server, langkah selanjutnya ialah melakukan set-up dan konfigurasi webhtb melalui mesin klien dengan browser :
    https://192.168.0.1/webhtb/setup/
    Isikan pada form yang muncul di set-up webhtb sebagai berikut :
    MySQL admin user : root
    MySQL admin password : Isi_dengan_password_mysql
    MySQL WebHTB user : Kosongkan_saja
    MySQL WebHTB password : Kosongkan_saja
    MySQL WebHTB password again : Kosongkan_saja
    MySQL WebHTB database name : webhtb
    Default LAN interface : eth0 (sesuaikan dengan interfaces LAN)
    Default WAN interface :ppp0 (sesuaikan, interfaces ppp0 ini tercipta dari hasil bridge modem)
  • Jika dirasa semua sesuai, klik Submit maka secara otomatis akan di direct ke halaman awal login webhtb, dan silahkan masukan password root untuk login.
  • Definisikan SSH supaya tidak kena limit terlalu kecil, disini saya men-set download untuk SSH dari LAN yaitu 10 Mb dan jika mungkinkan maksimal 100 Mb.

    Klik Add Client pada tab menu yang terletak horizontal diatas, isikan :
    CHOSE A CLASS = SYSTEM_LOCAL
    CLIENT = SSH
    BANDWIDTH = 10240
    LIMIT = 102400
    BURST = 0
    PRIORITY = 0
    SRC IPS = 192.168.0.1
    SRC PORTS = 22

    Untuk lainnya biarkan default, klik SAVE dan CLOSE
  • Definisikan juga batasan bandwidth untuk samba dan cups (print server) :

    Sebelumnya klik terlebih dahulu Click here for new src, dst .. sebanyak 6 rows untuk masing-masing IP Source dan Ports source
    CHOSE A CLASS = SYSTEM_LOCAL
    CLIENT = SAMBA_CUPS
    BANDWIDTH = 10240
    LIMIT = 102400
    BURST = 0
    PRIORITY = 0
    SRC IPS = 192.168.0.1 (samakan ip nya pada setiap row yang telah dibuat)
    SRC PORTS = 22 137 138 139 445 631 (masukan pada masing row port nya)

    Untuk lainnya biarkan default, klik SAVE dan CLOSE
  • Definisikan halaman web yang sudah di cache oleh squid supaya tidak terlimit oleh bandwidth manager webhtb.

    Tambahkan seperti di bawah ini dan taruh paling bawah saja pada squid.conf :
    #Marking ZPH
    zph_mode tos
    zph_local 0x04
    zph_parent 0
    zph_option 136

    Cek, Rekonfigurasi, dan reatart squid nya :
    squid -k parse
    squid -k reconfigure
    /etc/init.d/squid restart
  • Masukan rule iptables di bawah ini :
    iptables -A OUTPUT -t mangle -m tos --tos 0x04 -j MARK --set-mark 0x4

    Tambahkan juga rule iptables di atas pada /etc/rc.local sebelum exit 0 supaya ikut start saat pc server ubuntu ini hidup atau restart.
  • Klik Add Client
    CHOSE A CLASS = SYSTEM_LOCAL
    CLIENT = PROXY
    BANDWIDTH = 1024
    LIMIT = 10240
    BURST = 0
    PRIORITY = 2
    MARK = 4
    SRC IPS = kosongkan
    SRC PORTS = kosongkan

    Untuk lainnya biarkan default, klik SAVE dan CLOSE
  • Melanjut, sekarang saatnya memberikan batasan bandwidth untuk tiap klien warnet pada kelas IIX, IX, dan GAMES.

    Diketahui bandwidth total hasil dari speedtest.net :
    Download IIX = 980 Kbps
    Download IX = 400 Kbps
    Jumlah klien = 10 pc (5 pc diantaranya bisa game online)

    Catatan :
    Yang dimaksud kelas klien adalah class GAMES_DOWNLOAD, IIX_DOWNLOAD dan INTL_DOWNLOAD.
    IIX akan di pecah di bagi 2 untuk kelas games dan iix (situs lokal).
    Total bandwidth klien pada setiap kelas tidak melebihi bandwidth kelasnya.
    Untuk menentukan nilai bandwidth di webhtb harus di pastikan nilai hasilnya genap saat di bagi 8, nilai 8 adalah besaran bit. Misal diatas iix 980 :
    980/8 = 122,5 (ini tidak bisa)
    Maka cari yang mendekati nilai 980 namun hasilnya genap, seperti :
    976/8 = 122 (ini bisa dipakai)
  • Menetukan besaran bandwidth untuk tiap kelas
  • Pada webhtb, ketik Classes+, kemudian pada kotak dialog yang muncul :
    Choose a class to edit = GAMES_DOWNLOAD
    Klik tanda centang hijau di sampingnya, isikan di opsi-opsi yang muncul di bawahnya :

    Class name = GAMES_DOWNLOAD (jangan di rename, biarkan default)
    Bandwidth = 320 (5 pc game, /pc = 64, jadi 5 x 64 = 320)
    Limit = 976
    Burst = 0
    Priority = 2
    Que = SFQ
    Klik tanda centang hijau di sampingnya.
  • Pada webhtb, ketik Classes+, kemudian pada kotak dialog yang muncul :
    Choose a class to edit = IIX_DOWNLOAD
    Klik tanda centang hijau di sampingnya, isikan di opsi-opsi yang muncul di bawahnya :

    Class name = IIX_DOWNLOAD (jangan di rename, biarkan default)
    Bandwidth = 656 (10 pc asumsi ke iix semua, /pc = 64, jadi 5 x 64 = 320)
    Limit = 976
    Burst = 0
    Priority = 2
    Que = SFQ
    Klik tanda centang hijau di sampingnya.
  • Pada webhtb, ketik Classes+, kemudian pada kotak dialog yang muncul :
    Choose a class to edit = INTL_DOWNLOAD
    Klik tanda centang hijau di sampingnya, isikan di opsi-opsi yang muncul di bawahnya :

    Class name = INTL_DOWNLOAD (jangan di rename, biarkan default)
    Bandwidth = 400 (10 pc asumsi ke ix semua, /pc = 64, jadi 5 x 64 = 320)
    Limit = 400
    Burst = 0
    Priority = 3
    Que = SFQ
    Klik tanda centang hijau di sampingnya.
  • Menentukan besaran bandwidth setiap klien pada masing-masing kelas
  • Klik Add Client
    CHOSE A CLASS = GAMES_DOWNLOAD
    CLIENT = Game01
    BANDWIDTH = 64
    LIMIT = 320
    BURST = 0
    PRIORITY = 2
    DST IPS = 192.168.0.101
    DST PORTS = kosongkan

    Untuk lainnya biarkan default, klik SAVE dan CLOSE

    Ulangi sebanyak 5 kali sesuaikan dengan jumlah klien games, harap sesuaikan IP dan nama nya
  • Klik Add Client
    CHOSE A CLASS = IIX_DOWNLOAD
    CLIENT = Lokal01
    BANDWIDTH = 64
    LIMIT = 656
    BURST = 0
    PRIORITY = 2
    DST IPS = 192.168.0.101
    DST PORTS = kosongkan

    Untuk lainnya biarkan default, klik SAVE dan CLOSE

    Ulangi sebanyak 10 kali sesuaikan dengan jumlah klien iix, harap sesuaikan IP dan Namanya.
  • Klik Add Client
    CHOSE A CLASS = IX_DOWNLOAD
    CLIENT = Interlokal01
    BANDWIDTH = 40
    LIMIT = 400
    BURST = 0
    PRIORITY = 3
    DST IPS = 192.168.0.101
    DST PORTS = kosongkan

    Untuk lainnya biarkan default, klik SAVE dan CLOSE

    Ulangi sebanyak 10 kali sesuaikan dengan jumlah klien iix, harap sesuaikan IP dan Namanya.
  • Generate Qos nya, pada webhtb klik Change QOS Status lalu pilih Start/Restart QOS dan tunggu sampai muncul kotak dialog yang memberitahukan :
    WebHTB was successfully started on eth0
  • Untuk melihat trafficnya pilih di webhtb Show > Show traffic
  • Sekarang tambahkan file bash nya webhtb, dalam contoh ini ada di /var/webhtb/docs/webhtb ke direktory /etc/init.d/ supaya bisa di eksekusi nantinya misal untuk stop-start dari konsole dan juga untuk mengikut sertakan Qos webhtb jalan otomatis saat komputer server hidup/restart :

    Copy bash file webhtb :
    cp /var/webhtb/docs/webhtb /etc/init.d/webhtb
    Ubah permission supaya bisa di eksekusi :
    chown +x /etc/init.d/webhtb
    atau bisa juga command alternatif chown sebagai berikut
    chown 755 /etc/init.d/webhtb
    Sisipkan dibawah ini ke /etc/rc.local diatas text berketerangan exit 0 supaya nantinya webhtb ikut start-up :
    /etc/init.d/webhtb start

Selesai dan semoga mengilhami, sebaiknya lakukan restart sistem supaya konfigurasi tc dan Qos berjalan baik.

Catatan :
Jika Qos di stop di webhtb, maka nanti saat booting awal webhtb dalam status stop


Untuk managemen upload nya webhtb versi free menurut info yang saya dapat hanya bisa melimit upload klien saja. Jika tidak di limitpun untuk traffic upload webhtb tidak terlalu signifikan seperti pada bandwidth uploadnya.

14 comments:

  1. mantep gan, bagus banget deh artikelnya buat ane yang baru belajar

    ReplyDelete
  2. agak ribet emang ya kalo ingin membangun sebuah server hehehe :D

    ReplyDelete
  3. waw kagum deh kalo pake linux hehehe :)

    ReplyDelete
  4. All, thanks atas testimoninya.

    Sebenarnya tidak ribet seperti kelihatannya kok kalau sudah terbiasa dengan opensource sistem. Artikel di atas hasil pengalaman selama dan pembelajaran, murninya howto di atas dari homepage webhtb dan si_faisal berikut opickdesign 2 moderator dari forum KIOS, saya juga mengekor kesana dan hasil praktek di tuangkan di blog. Terima kasih

    ReplyDelete
  5. mau tanya bg
    klo client games_downloadnya di buat 10 client gimana bg ??
    apa nanti gamenya jadi lag ??

    ReplyDelete
    Replies
    1. Tolong di baca ulang mas posting di atas, di singgung kok prihal pertanyaannya...O iyah maaf baru bisa bales komentarnya

      Delete
  6. maantap aa' tulisannya...
    salah satu tulisan aa' yang di scrib, saya simpan di flash disk.seneng klo ada yang pake linux(soalna saya belum bisa)
    aa' nanya :
    1. saya ada p3 dikasi webhtb caranya gimana (xubuntu bisa ga)?
    2. komputer op saya p4 dijadiin 2 os linux ma w1n,linux buat bagi b/w win buat billing caranya gimana?
    makasih yaa aa', semangat terus menulis dan berbagi kasih sayang...

    ReplyDelete
    Replies
    1. Thanks udah komen, maaf belum sempet di karenakan sedang bad mood untuk nyalin dan ngedokumentasiin ke yang lain mengingat posting saya ini sudah umum di Internet tapi nanti pasti kok.

      Menjawab pertanyaannya
      1. Bisa, dengan salah satu pc di jadikan router.
      2. Dual OS, hmmmm...saya kira tidak bisa deh kalau dual OS di jalankan dalam 1 waktu, terkecuali salah satu OS di Virtualkan. Untuk billing, anggap aja semua bisa yah, billing pake yang multi platform aja seperti gbilling yang bisa jalan lintas OS.

      Delete
  7. maaf gan numpang nanya inikan tutor untuk ubuntu

    kalo di pake ke debian 6 bisa g

    ReplyDelete
    Replies
    1. Bisa mas, mengingat ubuntu dan debian ini adalah 1 keluarga namun perlu di perhatikan atau mungkin penyesuaian sedikit untuk keperluan librarinya.

      Delete
  8. Gan numpang tanya klo topologi yg agan posting tu brarti server ada 2 lan card ya?
    apa memang server harus pake 2 lan card?

    Klo saya buat seperti ini gan bisa tidak:
    modem (usb)---- Server webhtb (eth0)-----klien
    karena tidak di bridge maka server dapat IP class A, brarti setting webhtb untuk klien juga harus class A ya gan IP nya?

    ReplyDelete
    Replies
    1. Ga harus dua lan card kalo skemanya seperti saya di atas, 1 saja cukup karena nanti 1 lancard lagi terbentuk saat interfaces ppp+ di bridge.

      Untuk cara yg seperti mas maksud bisa kok, sederhananya setiap device/perangkat yang jadi perantara ke Internet selama bisa/mendukung di set sebagai "bridge" dan si OS yang dial ppp-nya ke ISP saya kira memungkinkan.

      Delete
  9. kang..kalo mw bikin limit nya per range ip kumaha?misal 192.168.0.1-192.168.0.10 dikasi jatah 512 buat dibagi2..thx

    ReplyDelete

Berkomentarlah dengan bijak untuk pengembangan dan sekaligus menjadi pembelajaran kita bersama.

Pilih Name/Url untuk mempermudah memasukan id anda!