Apache'yi DDoS saldırılarından korumak

Apache’yi kuracağımız bir modül ile DDoS saldırılarından koruyabilirsiniz.

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 toparlayabilmesini sağlamaktadır.Kolayca firewall, router, ipchain ve iptables ile anlaşabilecek şekilde modülü ayarlayabilirsiniz böylece saldırganların sunucudan firewall seviyesinde ya da router seviyesinde atılmasını sağlayabilirsiniz.Genel olarak yaptığı işi inceleyelim kullanıcı sunucudaki bir siteye devamlı get, post, put gibi istekler gönderiyorsa mod_dosevasive tarafından kara listeye alınıyor sizin belirlediğiniz süre boyunca kara listeye alınan kişi sunucuya istek göndermeye devam edebilir ama alacağı http 403 forbidden(yasak) cevabını alır.Bu istekler devam etse bile sunucunuz yorulmayacaktır.Kendi deneyimlerimi yazının en sonunda paylaşacağım.Eğer firewall yada router ile anlaşabilecek şekilde ayarlarsanız mod_dosevasive yı kara listeye alınan kullanıcı bekletilmeden direk sunucudan uzaklaştırılacaktır.

Teknik Detaylar:

Tarama işlemi oluşturulan bir dinamik hash tablosunun kontrolü 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 olarak 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ılardan 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 yasaklı 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.

cd /usr/local/src

2.)Dosyayı sunucuya indiriyoruz.

wget http://www.nuclearelephant.com/proje...ve_1.10.tar.gz

3.)Sıkıştırılmış arşiv dosyasını açıyoruz.

tar -zxvf mod_dosevasive_1.10.tar.gz

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

5.)Apache yi yeniden başlatın.

/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.

<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öreceksiniz 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 alt 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 kontrolü daha seyrek yapılacaktı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.(html, css, resim vs.)

    DOSPageInterval

DOSPageCount değeri için ayarlanacak saniyedir.

    DOSSiteInterval

DOSSiteCount değeri için ayarlanacak 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 kanaatimce ya da beklediğim şekilde etki etmiyordu. Örneğin: mod_throotle, dosevasive varken 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önderilecekti. İlk denemememi 1024K 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 herhangi bir önlem alınmamış bir serverda böye bir saldırı yani dinamik php sayfalarına devamlı get isteği gelmesi, önce apache’yi çükertir sonra mysql’ın ve sunucunun kendine gelemeyeceğine garanti veririm.

Yaklaşık bir buçuk 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 elindeki 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 agresif olmasına karşın server’da çok yoğun siteler olmadığı için çok iyi sonuç verdiğini düşünüyorum.

Agresif kural zinciri:

<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

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 kullanabilirsiniz.Benim hostname im root.abcd.com diyelim oraya

Örnek:
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

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

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

/etc/init.d/apache restart

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

Kaynak: http://www.pembeyesil.com/f46/ddos-korunma-yollari-953/

Etiketler:  , , , , ,