Press enter to see results or esc to cancel.

Apache2 ile mod_cband modülü (bandwith, kota ve trafik limitleme)

Sizlere kota, trafik ve bandwith için kullandığım ve işime yarayan bir Apache modülünden bahsedeceğim. Bir sunucu sahibi isek mod_cband ‘ın virtual özelliğini kullanarak bir çok web sayfasına ayrı ayrı konfigürasyon girerek hattımızı uygun ve sabit değerlerde tutabiliriz.Şimdi biraz mod_cband hakkında bilgilendirme de bulunalım.

. Apache2 modulüdür.
. GNU/GPL lisansi altında dağılıtılır.
. Her kullanıcıya bandwith
. Her virtualhost ‘a bandwith
. Toplam bandwith kullanımi
. Maksimum indirme hizi
. Virtualhost desteği
. Defined users desteği
. /cband-status ve /cband-status-me desteğiyle web arayüzünden izleme.

Yükleme
Modülümüzü debian ve fedora üstünde yükleyip çalıştıracagız.
Debian
apt-get install libapache2-mod-cband
Fedora
yum –y install mod_cband (eger mod_cband depolariniz da yok ise Yum Nasil belgesini inceleyebilirsiniz.)

komutları ile yüklemeyi bitiriyoruz. Kaynak koddan kurmak istiyorsak veya başka dağıtım kullanıyorsak, aşağıdaki direktifleri izleyebilirsiniz.

Kaynak koddan derlerken apxs ‘de yüklememiz lazım. Bunun için debian ‘da apt-get install apache2-prefork-dev komutunu ve fedora için ise yum –y install httpd-devel komutlarını uygulayıp yüklemeleri yapmalıyız.

Gelelim mod_cband ‘I yüklemeye.
wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
tar –zxvf mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
./configure
make && make install

Yükleme sırasında aşağıdaki gibi hatalar çıkar ise httpd-devel ve apache2-prefork-dev paketlerinin yüklenmemis olmasındandır.Yüklü olduğu halde aynı hataları alıyorsanız, ./configure komutunu root olarak calıştırmanız gerekir.
checking for apxs… no
checking for apxs2… no
configure: error: apxs missing

komutları ile yüklememizi bitiriyoruz. Normalde yükleme işlemi bittikten sonra mod_cband modulü kendisini apache ‘ye ekliyor. Eklemediği taktir de asağıdaki yönergeleri uygulamanız yeterli olacaktır.

updatedb

locate mod_cband.so
ile modülümüzün nereye yüklendiğine bakıyoruz.
vim /etc/httpd/conf/httpd.conf dosyasında bulunan LoadModule satırlarının olduğu yere LoadModule cband_module modülün bulunduğu dizin
/etc/init.d/httpd restart ile fedora web sunucumuzu restart ediyoruz.
/etc/init.d/apache2 restart debian web sunucumuzu restart ediyoruz.

Konfigürasyon dosyası :
Şimdi sıra geldi mod_cband.conf dosyasındakı ayarları anlatmaya.

mod_cband direktifleri
Aktarım Hizları

kbps : 1024 bit per second
mbps : 1024*1024 bits per second
gbps : 1024*1024*1024 bits per second
Not : Ön tanımlı olarak kbps kullanılıyor.

Kota

K : 1024 bytes
M : 1024*1024 bytes
G : 1024*1024*1024 bytes
Not : Ön tanımlı K kullanılıyor.

Zaman Periyodları

S : saniye
M : dakika
H : saat
D : gün
W: hafta
Not : Ön tanımlı olarak Saniye kullanılır.

CBandDefaultExceededURL : Transfer limitini geçtiğiniz zaman sizi başka bir url adresine yönlendirir. Eğer bir url adresi belirtmez isek sayfada 503 hatası görürüz.
Kullanımı : CBandDefaultExceededURL URL
Örnek Kullanımı : http://www.murat.ws/bandwith.php

CbandDefaultExceededCode : Url adresi belirtmez isek belirlediğimiz http kodu çıkar.
Kullanımı : CBandDefaultExceededCode HTTP_CODE
Örnek Kullanımı : CBandDefaultExceededCode 509

CbandScoreFlushPeriod : Ön tanımlı değer olarak 1 kullanılır.
Örnek Kullanımı : CBandScoreFlushPeriod 1

CbandSpeed : Virtual hostlarda maksimum kesin hızları ayarlamak için kullanılan parametredir.
Kbps : maksimum transfer hızı
Rps : saniyedeki maksimum istek
Max_conn : Eş zamanlı yapılan maksimum bağlantılar
Kullanımı : kbps rps max_conn
Örnek Kullanımı : CBandSpeed 1024 20 50

CbandRemoteSpeed : Karşi ağdan gelen istemcileri sınırlamak için kullanacağımız parametredir.
Kullanımı : CBandRemoteSpeed kbps rps max_conn
Örnek Kullanımı : CBandRemoteSpeed 40kb/s 6 6 burada denilmek istenen, maksimum 40Kbps/s hız ile en fazla 6 istek ve 6 bağlantı kurabilir.

CbandClassRemoteSpeed : Karşi ağdan gelen istemcileri ip adreslerine göre kısıtlamak için kullanacağımız parametredir.
Kullanımı : CBandClassRemoteSpeed class_name kbps rps
class_name : Karşı ağdan gelen istemci ip adresi
Örnek Kullanımı :

<CBandClass googlebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>

CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
Yukarıda ki örnekte, googlebot_class adı altında verilen ip adreslerini sınırlandırmıs bulunmaktayız.Bu verilmiş olan ip adresleri en fazla 3 bağlantı açabilir, 2 istekte bulunabilir ve saniyede maksimum 20 kb/s veri çekebilir.

CbandLimit : Bandwith ‘nize kota koymak için kullanılır.
Kullanımı : CBandLimit limit
Limit : Belirlediğiniz kota miktari
Birimleri : K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
Örnek Kullanımı : CBandLimit 10M (Toplam bandwith 10 megabyte olduğu zaman trafiği keser ve CbandDefaultExceededCode ile sayfa parametlerini devreye sokar. )

CbandPeriod : Bandwith kullanımlarını verdiğimiz zaman periyodlarında temizlenmesini sağlayan parametredir.
Kullanımı : CBandPeriod period
Kullanım Alanı : <Virtualhost>
Zaman dilimleri :
S : Saniye
M : Dakika
H : Saat
D : Gun
W : Hafta

Örnek Kullanımı : CBandPeriod 1W (1 hafta sonra bandwith istatistiklerini silecektir.)

User Direktifleri : Su anda anlamsiz gelebilir.Asagidaki ornekle daha iyi anliyacaksiniz.

CbandUser : Tanimlamalarımızı kullanıcı bazlı yapmak için bu parametre kullanılabilir.
Kullanımı : <CBandUser user_name>
Örnek Kullanımı : <CBandUser murat_ugur>

CbandUserSpeed : Tanımladığımız cband kullanıcısı için maksimum hız tanımladığımız parametredir.
Kullanımı : CBandUserSpeed kbps rps max_conn
Kullanım Alanı : <CbandUser>
Örnek Kullanımı : CBandUserSpeed 100kb/s 10 5

CbandUserLimit : Cband olarak tanımladığımız kullanıcıya kota koymak için kullanılıyor.
Kullanım Alanı : <CbandUser>
Kullanımı : CBandUserLimit limit
Kullandığı Birimleri : K, M, G, Ki, Mi, Gi
Örnek Kullanımı : CBandUserLimit 10M

CbandUserScoreboard : Cband kullanıcısının scoreboard dosyasıdır.
Kullanım Alanı : <CbandUser>
Örnek Kullanımı : CBandUserScoreboard /var/www/fedoraturkiye.com/scoreboard/

CbandUserPeriod : Cband olarak tanımlanan kullacının bandwith kullanım oranlarının zaman periyodlari halinde temizlenmesi için kullanılan parametredir.
Kullanım Alanı : <CbandUser>
Kullanımı : CBandUserPeriod period
Örnek Kullanımı : CBandUserPeriod 14D

Şimdi sizlere bu cbandUser ne işe yarar biraz açıklayayım. Kısaba bu komutla grublandırma yapabiliyoruz. Her virtualhosta tek tek cband parametlerini yazarak vakit kaybetmektense bir tane cbanduser tanımlayarak bu durumu tek parametreye indirebiliriz. Şimdi aşağıdaki örnekle daha iyi anaşılır olacaktır.

<CBandUser forumlar>
    # 200MB bandwidth limit for user 'forumlar'
    CBandUserLimit 200000

    # redirect to http://www.fedoraturkiye.com/bandwidth_exceeded.html
    # when the limit has been reached
    CBandUserExceededURL http://www.fedoraturkiye.com/bandwidth_exceeded.html

    # user's scoreboard file
    CBandUserScoreboard /var/www/scoreboard

    # a period of time after which the scoreboard will be cleared (5 weeks)
    # (only in >=0.9.5-rc2)
    CBandUserPeriod 5W
</CBandUser>
<VirtualHost *:80>
    ServerName www.murat.ws    # Specify virtualhost's owner
    CBandUser forumlar
</VirtualHost>
<VirtualHost *:80>
    ServerName www.fedoraturkiye.com    # Specify virtualhost's owner
    CBandUser forumlar
</VirtualHost>
Yukarıdaki örnekte bir kullanıcı belirleyip 2 tane virtualhosta kullandık.
Yani forumlar tanımının parametleri 2 tane virtualhostta geçerli kılındı.

Ayrıca CbandClass komutunu da grup olarak kullanabilirsiniz.

# define 'class_1'
<CBandClass class_1>
    CBandClassDst 217.172.231.67
    CBandClassDst 127/8
    CBandClassDst 192.168.0.0/24
    CBandClassDst 10.0.0.20
</CBandClass>

# define 'class_2'
<CBandClass class_2>
    CBandClassDst 192.168.100.100
    CBandClassDst 153.19/16
</CBandClass>
<CBandUser forumlar>
    CBandUserLimit 1000000
    CBandUserExceededURL http://www.fedoraturkiye.com/bandwidth_exceeded.html
    CBandUserScoreboard /var/www/scoreboard

    # 500MB limit for 'class_2'
    CBandUserClassLimit class_2 500000
</CBandUser>

<VirtualHost *:80>
    ...
    CBandUser forumlar    
    # 1GB limit for 'class_1'
    CBandClassLimit class_1 1000000

    # a period of time after which the scoreboard will be cleared (120 seconds) 
    # (only in >=0.9.5-rc2)
    CBandPeriod 120S
</VirtualHost>

NOT : mod_cband performansi icin asagida gerekli olan 2 adet satiri apache ‘nin global konfigurasyon kismina eklememiz lazim.(vim httpd.conf)

CBandScoreFlushPeriod 1
CBandRandomPulse On

NOT : Cband web arayüzünden bakmak için ; httpd.conf ve apache2.conf dosyalarına aşağıdaki direktifleri eklemeniz lazım.

* Eğer tüm tanımlı cbandleri görmek istiyorsanız aşağıdaki şekilde apache ‘ye eklemeniz yeterli olacaktır.

Örnek Kullanım : http://cband.fedoraturkiye.com/cband-status

<Location /cband-status>
SetHandler cband-status
Order allow,deny
Allow from 127.0.0.1/32 #izin vermek istediğiniz ip adresi
</Location>

Eklediğiniz virtualhosta göre izleme yapmak için,

Örnek Kullanımı : http://cband.fedoraturkiye.com/cband-status-me

<Location /cband-status-me>
SetHandler cband-status-me
Order allow,deny
Allow from 127.0.0.1/32 #izin vermek istediğiniz ip adresi
</Location>

Kaynaklar :
NOT : Bu belge http://cband.linux.pl adresi baz alınarak hazırlanmıştır, yanlış bildirimler olabilir.Bunun için murat@murat.ws adresine mail atabilirsiniz.

Thanks :

Special Thanks to Łukasz Dembiński

Murat Uğur EMİNOĞLU | murat@murat.ws