Modülü kurmadan önce şunu belirtelim bu mod serverda yüklü olan frontpage extensios’ların doğru olarak çalışamamasına sebep olabilmektedir.


MOD_DOSEVASIVE(Apache DoS Evasive Maneuvers Module):


Mod_dosevasive apache için DoS , DDoS ve brute force saldırılarını engellemek için yazılmış bir modüldür.Firewall ların genellikle etkisiz kaldıkları get,post tipi saldırılarda özellikle yeteneklerini göstermektedir.Böylece sunucunuza aşırı yük binmeden kendini toparlıyabilmesini sağlamaktadır.Kolayca firewall ,router,ipchain,iptables ile anlaşabilecek şekilde modülü ayarlıyabilirsiniz böylece saldırganların sunucudan firewall seviyesinde yada router seviyesinde atılmasını sağlayabilirsiniz.Genel olarak yaptığı işi inceliyelim kullanıcı sunucudaki bir siteye devamlı get,post,put gibi istekler gönderiyorsa mod_dosevasive tarafından kara listeye alınıyor sizin belirlediğinz süre boyunce kara listeye alınan kişi sunucuya istek göndermeye devam edebilir ama alacağı http 403 forbidden(yasak) cevabını alır.Bu istekelr devam etse bile sunucunuz yorulmayacaktır.Kendi deneyimlerimi yazının en sonunda paylaşacağım.Eğer firewall yada router ile anlaşabielcek şekilde ayarlarsanız mod_dosevasive yı kara listeye alınan kullanıcı bekletilmeden direk sunucudan uzaklaştırılıcaktır.


Teknik Detaylar:


Tarama işlemi oluşturulan bir dinamik hash tablosunun kontrolu ile yapılır.Bu tablodaki ipler aşağıdaki standart kurulum değerlerini gösteriyorsa kara listeye alınır.


*Saniyede aynı sayfayı birden fazla istek yapılmışsa.
*Aynı çocuk süreç üzerinden 50 istek yapıldı ise.
*Kara listeye alındığı halde istek yapılıyorsa.


bu genellikle bu aralar çok yaygın olarka yapılan http flood scriptlerinden sunucuyu korumaktadır.Hem cpu kullanımını minimal de tutarken hemde sunucuyu bandwith türü yapılan saldırıladan korur.Belirlenen süre içinde engellenen kullanıcılar süre bittiğinde sunucuya takrar istek gönderebilir tabi firewall yada router ile sunucudan atılmadı ise.Sunucudan yaskalı olan ip listesi /tmp dizininde saklanmaktadır ve mod_dosevasive tarafından kontrol edilmektedir






Kurulum İşlemleri


Apache 1.3.x için kurulum detayları.


1.) /usr/local/src dizinine geçiyoruz.
Kod:
cd /usr/local/src




2.)Dosyayı sunucuya indiriyoruz.
Kod:
wget Encountered a 404 error






3.)Sıkıştırılmış arşiv dosyasını açıyoruz.
Kod:
tar -zxvf mod_dosevasive_1.10.tar.gz










4.)Mod_dosevasive nin klasörüne giriyoruz
Kod:
cd mod_dosevasive






5.)DSO desteği ile yüklüyoruz.
Kod:
/etc/httpd/bin/apxs -cia mod_dosevasive.c












Apache 2 için kurulum adımları


1.)httpd devel paketini kurarak başlıyoruz.
Kod:
up2date -i httpd-devel






2.) /usr/local/src dizinie geçiyoruz
Kod:
cd /usr/local/src






3.)Dosyası sunucuya indiriyoruz.
Kod:
wget Encountered a 404 error






4.)Arşiv dosyasını açıyoruz
Kod:
tar -zxf mod_dosevasive_1.10.tar.gz




5.)Mod_dosevasive klasörüne giriyoruz
Kod:
cd mod_dosevasive




6.)DSO modülü olarak kuruyoruz
Kod:
/usr/sbin/apxs -cia mod_dosevasive20.c








Ayarların Yapılması
Apache 1.3.x için


1.)Apache nin ayar dosyası olan httpd.conf dosyasını açıyoruz.
Kod:
pico -w /usr/local/apache/etc/httpd.conf






2.)Ctrl+w tuşlarına basarak gelen arama ekranına AddModule mod_dosevasive.c yazıyoruz.Bu kısmın hemen altına aşağıda vereceğim değerleri yazıyorsunuz.










Kod:
<IFMODULE mod_dosevasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IFMODULE>






3.)Tekrar ctrl+w tuşlarına basın gelen arama ekranına MaxRequestsPerChild MaxRequestsPerChild = 0 değerini görüceksiniz o değeri MaxRequestsPerChild 10000 olacak şekilde değiştirin.Bu sayede mod_dosevasive süresi dolan hash leri temizleyecektir.Ayrıca gene httpd.conf ta keepalive yazan kısım on olarak kalsın off yaparsanız çalışmayacaktır.






4.)Ctrl+x tuş kombinasyonunu kullanarak dosyayı kaydedip çıkın.


5.)Apache yi yeniden başlatın.
Kod:
/etc/init.d/apache restart








Apache 2.x için ayarların yapılması


1.)Apache ayar dosyası olan httpd.conf dosyasını açın


2.)LoadModule mod_dosevasive.c yazan yeri bulun altına aşağıdakileri ekleyin.
Kod:
<IFMODULE mod_dosevasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSBlockingPeriod 600
</IFMODULE>






3.)Tekrar ctrl+w tuşlarına basın gelen arama ekranına MaxRequestsPerChild MaxRequestsPerChild = 0 değerini görüceksiniz o değeri MaxRequestsPerChild 10000 olacak şekilde değiştirin.Bu sayede mod_dosevasive süresi dolan hash leri temizleyecektir.Ayrıca gene httpd.conf ta keepalive yazan kısım on olarak kalsın off yaparsanız çalışmayacaktır.


4.)Dosyayı kaydedip apache yi yeniden başlatın.


Eklenen Değerlerin anlamları


DOSHashTableSize:
Her çocuk süreçteki en üst seviye nodlarının büyüklüğünü belirtir.Bu değeri yükseltmek performans artışını sağlayacaktır fakat aynı zamanda kayıtların kontrolu daha seyrek yapılıcaktır.Eğer yoğun bir sunucunuz varsa bu değeri yükseltin .


DOSPageCount:
Aynı sayfaya gelebilecek belirli bir süredeki istek sayısıdır.Belirli bir süre değeri DOSPageINterval değeri ile ayarlanır.Eğer bu istek sayısı aşılırsa ip kara listeye alınır sunucuya ulaşmaya çalıştığında 403 forbidden yanıtını alır.


DOSSiteCount
DOSSiteInterval değerinde belirtilen sürede siteden çekilebilecek obje,nesne sayısıdır.Resimler, style sheets, javascripts, SSI


DOSPageInterval
DOSPageCount değeri için ayarlanıcak saniyedir.


DOSSiteInterval
DOSSiteCount değeri için ayarlanıcak saniyedir.


DOSBlockingPeriod:
Kara listeye alınan iplerin 403 forbidden yanıtını alacağı saniye cinsinden süredir bunu yüksek tutmaya çalışın 10 dakika gibi yani 600


DOSEmailNotify


Herhangi bir saldırı olduğunda maillerin gideceği e-posta adresi.


DOSSystemCommand:


Sistem tarafından icra edilebilecek komutlar.


Kişisel Deneyim:
Daha önce http flood scriptlerini engellemek için bir çok firewall,apache için eklenti kurdum denedim ve çoğu gerçekten bir işe yaramıyordu kanatimce yada beklediğim şekilde etki etmiyordu örneğin mod_throotle dosevasive varken bunu kesinlikle kurmayın derim modu deneme platformum p4 2.4 1024 ram yaklaşık 80 siteyi barındıran orta yoğunlukta bir server modülü önce firewall ile iletişim kurmayacak şekilde kurdum böylece kara listeye alınan bir ip hemen serverdan uzaklaştırılmayacak 403 mesajları gönderilicekti.İlk denemememi 1024 k adsl ile yaptım %0.5 seviyesinde seyreden server load ve %30 seviyesinde seyreden ram saldırının birinci dakikasında yük yoğunluğu 60 a ram kullanımı 70 civarına çıktı modülün logları incelemeye başlaması ile 60 a çıkan yük yoğunluğu saldırıya devam etmeme rağmen 10 dakika içinde 1.3 seviyesine indi buda bu kadar ağır bir saldırı için çok normal hehrangi bir önlem alınmamış bir serverda böye bir saldırı yani dinamik php sayfalarına devamlı get isteği gelmesi önce apache yi failler sonra mysql u ve sunucunun kendine gelemiyeceğine garanti veririm.Yaklaşık 1.30 saat kadar saldırıyı sürdürdüm bu sürede ortama process sayısı
167.23 requests/sec dır görüldüğü gibi aşırı fazla bir sayı saldırı sırasında 30-40 arası olan ram kullanımı 80 e çıktı buda gayet doğal bir olay çünkü linux un işleyişi windows gibi değildir elindkei bütün işlemleri olabildiğince ram e yazar yeterli bellek kalmadığında ise bunları boşaltır ama benim görüşürüz 2gb ram li bir sunucuda bu tür ağır bir http flood un mod_dosevasive ile hiç bir etkisi olmayacaktır.APF firewall u mod_dosevasive ile iletişim kuracak şekilde ayarladığımda ise saldırı yaptığım ip 3 dakika içinde sistemden uzaklaştırıldı.
Benim kullandığım kurallar biraz daha agrasif olmasına karşın serverda çok yoğun siteler olmadığı için çok iyi sonuç verdiğini düşünüyorum.Agrasif kural zinciri
Kod:
<IFMODULE mod_dosevasive.c>
DOSHashTableSize 3097
DOSPageCount 1
DOSSiteCount 25
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
</IFMODULE>










mod_dosevasive nın Firewall ile yardımıyla kara listeye alınanları sunucudan uzaklaştırması


1.)Konsolda root iken visudo yazın.Dosyanın en altına girip şunu ekleyin




Kod:
nobOdy HOSTNAME = NOPASSWD: /usr/local/sbin/apf -d *


Burada hostname kısmına kendi hostname inizi yazın bunu öğrenmek için konsolda hostname komutunu kukkanabilirsiniz.Benim hostname im root.abcd.com diyelim oraya


Kod:
nobOdy root. = NOPASSWD: /usr/local/sbin/apf -d *


yazıyorum. Kaydetmek için ESC tuşuna basın ve ardından qw tuşlarına basıp enter deyin.






2.)Apache ayar dosyası olan httpd conf dosyasını gene açıyoruz
Kod:
pico -w /usr/local/apache/conf/httpd.conf






3.)Daha önce eklediğimiz kısımı buluyoruz
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600




hemen altına şu 2 satırı ekliyoruz






Kod:
DOSEmailNotify color=#[email protected]
DOSSystemCommand "sudo /usr/local/sbin/apf -d %s"




kendi mail adresinizi değiştirmeyi unutmayın.




4.)Dosyayı kaydedip çıkıyoruz ve apache yi yeniden başlatıyoruz
Kod:
/etc/init.d/apache restart




5.)Artık kara listeye alınan ipler firewall tarafından sistemden uzaklaştırılıcaktır.