Bu makalede binlerce HTTP-GET isteği ile yapılan DDoS atakları karşısında nasıl davranmamız gerektiği irdelenecektir. Ayrıca atağın boyutuna göre sırası ile almamız gereken önlemler anlatılacaktır. Bildiğimiz gibi DDoS, birçok firmanın başını ağrıtan ve bazı durumlarda önlenmesi çok güç olan bir atak türüdür. En başta basit olarak senaryomuzu çizelim:
Linux Sunucu
Apache Web Sunucu
Alan ismi : www.xx.com
Yukarıda
belirtildiği gibi üzerinde Apache Web Sunucusu çalışan bir sunucumuz
bulunmakta. Web sunucumuz üzerinde çalışmakta olan www.xx.com adresine
saniyede binlerce IP adresinden HTTP-GET isteği yapılmaktadır.
Bu
durumda Apache belli bir sure sonra bu isteklere yanıt verememeye
başlayacaktır. Eğer istekte bulunulan sayfanın bağlandığı bir veritabanı sunucumuz mevcut ise, bu istek veritabanımızın da yanıt verememesine sebep olacaktır.
Peki ne yapacağız ?
Öncelikle şunu bilmeliyiz ki; her bir HTTP-GET isteği için ayrı bir bağlantı
oluşturulmasına gerek yoktur. Çünkü HTTP/1.1, açılan bir bağlantı
içerisinden dilediğimiz kadar istek göndermemize izin verir. Bu
bilindiği gibi Request Pipelining olarak adlandırılmaktadır. Bu
da demek oluyor ki güvenlik duvarımızda (donanımsal ya da yazılımsal) TCP 80 portuna gelen sadece bir HTTP-GET isteği görebiliriz
ama aslında bu istek içerisinden binlerce istek alıyor olabiliriz.
Bir HTTP-GET atağında öncelikle yapmamız gereken şey web
sunucumuzun loglarını incelemek olacaktır. Çünkü bu loglar icerisinde
bizim IDP (Intrusion Detection & Prevention) sistemimiz üzerinden
engelleyebilecegimiz sabit bir data bulabiliriz. Mesela sabit bir HTTP
başlığı, referrer veya user-agent tespit edip IDP sistemimiz üzerinden
engelleyebiliriz.
Eğer gelen istekler değişik çerezler ile geliyorsa ve bu alanda
yapabileceğimiz ekstra bir şey yoksa ikinci bir önlem olarak, bir
dakika icerisindeki web server loglarına bakarak en cok istegi yapan IP
adreslerini daha sistemimize ulaşmadan engelleyebiliriz. Ama örneğimizde olduğu gibi farklı kaynaklardan gelen istekleri bu şekilde
engellememiz fazla mümkün olamayacaktır. Çünkü karşı karşıya olduğumuz
atak türünde saldırılar binlerce farklı IP adresinden gelemekte ve bu IP adresleri sürekli değişmektedir.
Diğer bir yöntem olarak web sunucumuz (Apache) üzerinde çeşitli
modüller kullanabiliriz. Mod_Evasive yada Mod_Choke, önerilebilecek modülleriden ikisidir. Fakat atağın büyüklüğüne ve getirdiği trafik yoğunluğuna göre bu modüller yetersiz kalabilir.
Bir sonraki aşama olarak IDP’ miz ya da güvenlik duvarımız üzerinde TCP Bağlantı Limiti (Connection Limit)koyarak ve eşik değerini (threshold) düşürerek
saniyede gelen bu aşırı HTTP-GET isteklerini daha web sunucumuza
ulaşmadan engelleyebiliriz. Bu genellikle etkili olan ve saldırganın
başarısını azaltan bir engelleme mekanizmasıdır. Ama bu durumda gelen
istek HTTP-GET isteği olduğu için güvenlik duvarımız ya da IDP'miz hangi isteğin
dogru hangi isteğin yanlış olduğunu anlayamayacak ve bu durumda siteye
normal olarak ulaşmak isteyen kişilerin isteklerinin de engellenme
ihtimali sozkonusu olacaktır. Ayrıca bu işlemde bile eğer atak çok
büyük ise güvenlik sistemimizden kaçan istekler arka taraftaki web
sunucumuza ulaşacak ve sitemizin sağlıklı çalışmasına engel olacaktır.
TCP Bağlantı Limitleme işleminin yanı sıra Apache sunucumuz
üzerine bir Ters Vekil Sunucu (Reverse Proxy) kurup, sayfaların ön belleklenmesini sağlayarak gelen bu isteklerin sunucu tarafında herhangi
bir TCP bağlantı açmadan alınmasını
sağlayabiliriz. Nginx bu amaçla kullanılabilecek faydalı bir yazılımdır.
Bu işlemlerin sonucunda bağlantı limiti (IDP ya da güvenlik duvarı) ile
saniyede belirttigimiz limitin üzerinde gelen istekler
engellenecek ve ters vekil sunucumuzun sayesinde gelen istekler
daha Apache’ye ulaşmadan ön bellek üzerinden verilecektir. Ters vekil sunucumuzu kurduktan sonra IDP veya güvenlik duvarımız üzerinde
yaptığımız bağlantı limiti eşik değerini yukarılara çekerek
testlerimizi yapabiliriz. Bu testlerin sonucunda saldırı amaçlı bağlantılar ile sitemize normal yollardan ulaşmak isteyen
kullanıcılar arasında bir denge kurulacak ve hatalı engellemelerin önü alınacaktır.
Nginx kurulumunun detayları için http://nginx.net/ adresine başvurulabilir.
Fakat şöyle bişiy var ben mi yanlış yaptım bilemiyorum. Şirketimin iç web sitesine herkes ulaşmaya çalışırken diyelim ki 30 bilgisayar var ve bu kullanıcı aynı anda sabit ip üzerinden ulaşmaya çalışıyor web siteme ve firewall onun trafik limiti daraltıyor buda bazı kullanıcıları diskalifiye ediyor. Ben biyerde yanlış yaptım galiba?