Mod_dosevasive Apache ile DoS saldırılarını engelleyin

Server güvenliği için yapılması gerekenler, kullanılabilecek programlar

Mod_dosevasive Apache ile DoS saldırılarını engelleyin

Mesajgönderen dropby23 » 02 Haz 2005, 07:22

Modülü kurmadan önce şunu belirtelim bu mod serverda yüklü olan frontpage extensios ların doğru olarak çalışamamasına sebep olabilmektedir.Her ne kadar ben şuana kadar bir sorun yaşamasamda.

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


Kod: Tümünü seç
root@root [/tmp]# ls dos*
dos-193.255.81.227   dos-81.213.181.185  dos-81.214.188.238  dos-81.215.159.222  dos-85.105.17.253  dos-85.97.78.30
dos-194.27.42.18     dos-81.213.187.111  dos-81.214.203.78   dos-81.215.183.102  dos-85.74.11.134   dos-85.97.98.100
dos-195.128.254.3    dos-81.213.233.159  dos-81.214.251.12   dos-81.215.246.136  dos-85.96.18.145   dos-85.98.14.238
dos-195.174.224.233  dos-81.213.84.72    dos-81.214.62.118   dos-81.215.250.196  dos-85.96.92.231   dos-85.98.59.72
dos-212.156.166.55   dos-81.214.129.167  dos-81.214.71.219   dos-81.215.69.255   dos-85.97.134.24   dos-85.98.89.144
dos-212.243.169.82   dos-81.214.142.126  dos-81.214.74.178   dos-85.100.102.164  dos-85.97.147.93   dos-85.99.182.152
dos-221.220.198.171  dos-81.214.147.92   dos-81.215.121.150  dos-85.100.31.39    dos-85.97.178.166  dos-85.99.211.167
dos-81.213.178.15    dos-81.214.149.198  dos-81.215.128.241  dos-85.101.1.139    dos-85.97.77.76    dos-85.99.67.87
root@root [/tmp]#


Kurulum İşlemleri

Apache 1.3.x için kurulum detayları.

1.) /usr/local/src dizinine geçiyoruz.

Kod: Tümünü seç
cd /usr/local/src


2.)Dosyayı sunucuya indiriyoruz.

Kod: Tümünü seç
wget http://www.nuclearelephant.com/projects/dosevasive/mod_dosevasive_1.10.tar.gz


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

Kod: Tümünü seç
tar -zxvf mod_dosevasive_1.10.tar.gz


Resim

4.)Mod_dosevasive nin klasörüne giriyoruz

Kod: Tümünü seç
cd mod_dosevasive


5.)DSO desteği ile yüklüyoruz.

Kod: Tümünü seç
 /etc/httpd/bin/apxs -cia mod_dosevasive.c


Resim


Apache 2 için kurulum adımları

1.)httpd devel paketini kurarak başlıyoruz.

Kod: Tümünü seç
up2date -i httpd-devel


2.) /usr/local/src dizinie geçiyoruz

Kod: Tümünü seç
cd /usr/local/src


3.)Dosyası sunucuya indiriyoruz.

Kod: Tümünü seç
wget http://www.nuclearelephant.com/projects/dosevasive/mod_dosevasive_1.10.tar.gz


4.)Arşiv dosyasını açıyoruz

Kod: Tümünü seç
tar -zxf mod_dosevasive_1.10.tar.gz


5.)Mod_dosevasive klasörüne giriyoruz

Kod: Tümünü seç
cd mod_dosevasive


6.)DSO modülü olarak kuruyoruz

Kod: Tümünü seç
/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: Tümünü seç
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.

Resim

Kod: Tümünü seç
 <IfModule mod_dosevasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>

Resim

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.

Resim

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

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

Kod: Tümünü seç
/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: Tümünü seç
<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: Tümünü seç
<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: Tümünü seç
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: Tümünü seç
nobody root. = NOPASSWD: /usr/local/sbin/apf -d *
yazıyorum

Resim

2.)Apache ayar dosyası olan httpd conf dosyasını gene açıyoruz

Kod: Tümünü seç
pico -w /usr/local/apache/etc/httpd.conf


3.)Daha önce eklediğimiz kısımı buluyoruz

Kod: Tümünü seç
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600


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

Kod: Tümünü seç
 DOSEmailNotify dropby21@hotmail.com

Kod: Tümünü seç
DOSSystemCommand "sudo /usr/local/sbin/apf -d %s"


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

Resim

4.)Dosyayı kaydedip çıkıyoruz ve apache yi yeniden başlatıyoruz

Kod: Tümünü seç
/etc/init.d/apache restart


5.)Artık kara listeye alınan ipler firewall tarafından sistemden uzaklaştırılıcaktır.
Kullanıcı avatarı
dropby23
Deneyimli Üye
Deneyimli Üye
 
Mesajlar: 302
Kayıt: 08 May 2005, 00:00

problem

Mesajgönderen BABA » 19 Haz 2005, 16:15

Güzel bir yazı fakat aynısını başka sitelerde gene türkçe ve ingilizce olmak üzere gördüm bunu görmüş olmamın bir önemi yok çünki yazıda bulunan mod dos ile apf birleşimi çalışmıyor mail de atmıyor ama tmp klasörüne ip adreslerini yazıyor file ler halinde mod dosun compiler edilmemiş haline baktım sendmail uzantısı yanlıştı düzelttim tekrar compiler attim cık gene çalışmıyor çözemedim bu modülü yapanlara mail attım cevap alamadım ne apf entegrasyonu çalışıyor ne mail çalışıyor nede logdir komutları çalışıyor sadece çalışan kısımları standart olan bölümleri optional kısımları kesinlikle çalışmıyor....
Kullanıcı avatarı
BABA
Yeni Üye
Yeni Üye
 
Mesajlar: 6
Kayıt: 24 Mar 2002, 01:00
Konum: istanbul

Mesajgönderen dropby23 » 19 Haz 2005, 20:51

onlar şu nedenden çalışmıyor apache nobody olarak çalışıyor sen nobody olarak ne apf yi nede iptables ı kullanamazsın bunun için 2 yöntem var bunun yabancı sitelerden olmadığına eminim :D

ya bunu bir bash scripti olarak root olarka icra ettiriceksin
cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

mod_dosevasive bir daemon gibi mesaj bırakır çünkü yada

apf ye suid biti vericeksin

DOSSystemCommand "sudo /usr/local/sbin/apf -d %s"

kısmını

DOSSystemCommand "sudo -u nobody-s /usr/local/sbin/apf -d %s"
olarak değiştir
kondolda visudo yaz ve şunu ekle

nobody ROOT. = NOPASSWD: /usr/local/sbin/apf -d * Root yazan kısmı hostname in firsq qualified kısmı

neyse bunuda kaydet
chmod 2755 /usr/local/sbin/apf

tabi bir uygulamaya suid biti vermek ne kadar doğru hele nobody altında çalışıcak bir uygulamaya phpshell ile bile bütün serverı banlıyabilirler
onun yerine bunu
cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

/etc/rc.local a yerleştir tüm sorunlarından kurtul
Kullanıcı avatarı
dropby23
Deneyimli Üye
Deneyimli Üye
 
Mesajlar: 302
Kayıt: 08 May 2005, 00:00

Mesajgönderen Mpamukcu » 30 Haz 2005, 23:59

susede apache modül yükleme kabusunu aştıktan sonra :) dosevasive gerçekten işime yaradı bitmek tükenmek bilmiyo bu flood scriptler, gözünü seviyim penguen senin
Kullanıcı avatarı
Mpamukcu
Üye
Üye
 
Mesajlar: 59
Kayıt: 22 Haz 2004, 00:00

Mesajgönderen velaskyalf » 01 Tem 2005, 00:50

Bu modul bi çok kişinin işine yarıyabilir.
Ama bu sadece basit hazılanmış fllod programlarında bile geçerlidir.

Profostyonelce hazılanmış Denial Of Service atakları için yapılabilecek malesef bişey yok.
IP Mask kullanan kodlar server a binlerce IP den saldırıyor.bu ıp leri karalisteye alması bile server için yeterince meşguliyet arz ediyor.

Birgun DOS saldırılarının tam anlamı ile önünü kesicek bi uygulama yada bir sistem çıkacakmı acaba??
-------Hazır bilgi Uyuşturur-------
Kullanıcı avatarı
velaskyalf
Üye
Üye
 
Mesajlar: 95
Kayıt: 20 Mar 2005, 01:00
Konum: Kayseri

Mesajgönderen SoVCoNT » 14 Tem 2005, 13:44

Merhaba,

gerçekte güzel bir mod,bu aralar yoğun saldırılar alıyorum.ancak benim panelim Plesk çok denedim ancak bir türlü yükleyemedim :( Yardımcı olursanız sevinirim.Sistem FedoraCore 1.
Kullanıcı avatarı
SoVCoNT
Yeni Üye
Yeni Üye
 
Mesajlar: 6
Kayıt: 02 Mar 2005, 01:00

Mesajgönderen dropby23 » 15 Tem 2005, 11:57

hangi kısımda takıldınız
Kullanıcı avatarı
dropby23
Deneyimli Üye
Deneyimli Üye
 
Mesajlar: 302
Kayıt: 08 May 2005, 00:00

Mesajgönderen SoVCoNT » 16 Tem 2005, 10:56

Genel olarak dizinler farklı ve sistem hakkında pek bilgim olmadığı için yapamadım.Şuan halen saldırılar var,load 4-5 civarında.
Yardımcı olursan sevinirim...
Kullanıcı avatarı
SoVCoNT
Yeni Üye
Yeni Üye
 
Mesajlar: 6
Kayıt: 02 Mar 2005, 01:00

Mesajgönderen dropby23 » 16 Tem 2005, 20:32

apache conf tan bahsediyorsanız birde buraya bakın
/var/www/conf/httpd.conf
dosyaları bulmak için whereis locate komutlarını kullanabilirsiniz locate httpd.conf gibi
locate komutunu kullanmadan önce shellde updatedb komutunu verin
Kullanıcı avatarı
dropby23
Deneyimli Üye
Deneyimli Üye
 
Mesajlar: 302
Kayıt: 08 May 2005, 00:00

Cevap

Mesajgönderen cygwin » 27 Ağu 2005, 23:04

merhaba arkadaşım denemedim ama öncelikle uğraşıp bu modulu anlatan arkadaşa teşekkür edeyim ama en kısa zamanda deneyecem özelikle plesk kullanan sistemde deneyecem plesk kullanıyorsanız bu tür modülleri yüklemeden önce sisteminizdeki conf ların ve ayar dosyalarının yedeğini alın göçebilir :) plesk sunucularda redhat veya fedora da /etc/httpd/conf conf lar bu dizindedir. En kısa zamanda test edicem
Sevgiler.
Kullanıcı avatarı
cygwin
Üye
Üye
 
Mesajlar: 79
Kayıt: 06 Kas 2004, 01:00
Konum: localhost

Mesajgönderen suse-16 » 06 Eyl 2005, 22:42

Arkadaşlar ben Suse Sles 9.0 ile server kurdum fakat felaket seviyede Dos ataklar var bu modulu kurdum ama çalışmıyor sanırım...Bu sürümde sebebini bilen varsa makbüle geçer...tşk...
Kullanıcı avatarı
suse-16
Yeni Üye
Yeni Üye
 
Mesajlar: 1
Kayıt: 06 Eyl 2005, 00:00

Mesajgönderen cculha » 06 Haz 2008, 13:21

dropby23 yazdı:onlar şu nedenden çalışmıyor apache nobody olarak çalışıyor sen nobody olarak ne apf yi nede iptables ı kullanamazsın bunun için 2 yöntem var bunun yabancı sitelerden olmadığına eminim :D

ya bunu bir bash scripti olarak root olarka icra ettiriceksin
cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

mod_dosevasive bir daemon gibi mesaj bırakır çünkü yada

apf ye suid biti vericeksin

DOSSystemCommand "sudo /usr/local/sbin/apf -d %s"

kısmını

DOSSystemCommand "sudo -u nobody-s /usr/local/sbin/apf -d %s"
olarak değiştir
kondolda visudo yaz ve şunu ekle

nobody ROOT. = NOPASSWD: /usr/local/sbin/apf -d * Root yazan kısmı hostname in firsq qualified kısmı

neyse bunuda kaydet
chmod 2755 /usr/local/sbin/apf

tabi bir uygulamaya suid biti vermek ne kadar doğru hele nobody altında çalışıcak bir uygulamaya phpshell ile bile bütün serverı banlıyabilirler
onun yerine bunu
cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

/etc/rc.local a yerleştir tüm sorunlarından kurtul


dostum bu yazdığın 2. bilgi çok iyi oldu. yalnız sormak istediğim bir soru var.

cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

bu komutu uygulayınca ip leri hosts.deny e ekliyor. fakat her ekleme için bu komutu yazmam gerekiyor. /etc/rc.local e ekledim fakat kendi başına komut girilmiyor benim girmem gerekiyor. çözüm söylersen sevinirim. centos 5.1

dostum cron ekledim sorunum halloldu artık hosts.deny e ekliyor sürekli

peki ban süresi dolan birinin listeden silinme işlemi de bu şekilde otomatik gerçekleşiyor mu? liste sürekli büyüyor da...
Kullanıcı avatarı
cculha
Yeni Üye
Yeni Üye
 
Mesajlar: 2
Kayıt: 06 Haz 2008, 00:00

Mesajgönderen cculha » 23 Tem 2008, 11:19

Bir konuda daha yardıma ihtiyacım var.

Soru 1: Evasive yi apf ile değil de csf ile kullanmak istiyorum ne yapmam lazım.

Soru 2:

cat /var/log/messages | grep Blacklisting | awk {'print "ALL:" $8 "\n"'} >> /etc/hosts.deny

Bu komutun aynısnı hosts.deny a eklicek şekilde değil de iptables la banlayacak şekilde olanını verirseniz çok sevinirim.

bir de ayrıca bu komutu evasive ayarlarındaki ekrana doscommand satırına yazsam da işe yarayabilir mi.
Kullanıcı avatarı
cculha
Yeni Üye
Yeni Üye
 
Mesajlar: 2
Kayıt: 06 Haz 2008, 00:00


Dön Güvenlik uygulamaları

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 2 misafir

cron