Bu bir Kanonik Soru DoS ve DDoS azaltma hakkında.
Bugün ev sahipliği yaptığım bir web sitesinde büyük bir trafik artışı buldum; Saniyede binlerce bağlantı alıyorum ve mevcut bant genişliğimin 100Mbps'ini kullanıyorum. SSH de zaman aşımına uğramadığı için siteme hiç kimse erişemez çünkü tüm istekler zaman aşımına uğruyor ve sunucuya giriş yapamıyorum bile! Bu daha önce birkaç kez oldu ve her seferinde birkaç saat sürdü ve kendi başına gitti.
Bazen, web sitem başka bir farklı fakat ilgili sorun içeriyor: sunucumun yük ortalaması (genellikle yaklaşık .25) roketler 20 veya daha fazla ve hiç kimse benim siteme başka biriyle aynı şekilde erişemiyor. Ayrıca birkaç saat sonra gider.
Sunucumun yeniden başlatılması yardımcı olmaz; Sitemi tekrar erişilebilir hale getirmek için neler yapabilirim ve neler oluyor?
İlgili olarak, bir veya iki günlüğüne, hizmetimi her başlattığımda, belirli bir IP adresinden bir bağlantı aldığını ve daha sonra kilitlendiğini bir kez buldum. Bir daha başlattığım anda, bu tekrar oldu ve tekrar düştü. Bu nasıl benzer ve bu konuda ne yapabilirim?
Hizmet reddi saldırısı yaşıyorsunuz. Birden çok ağdan gelen trafiği görüyorsanız (farklı alt ağlarda farklı IP'ler) dağıtılmış bir hizmet reddi (DDoS) var demektir; Hepsi aynı yerden geliyorsa, eski bir DoS var. Eğer yapabiliyorsanız, kontrol etmek yararlı olabilir; kontrol etmek için netstat kullanın. Bu olsa da, bu zor olabilir.
Hizmet reddi genellikle birkaç kategoriye ayrılır: trafik tabanlı ve yük tabanlı. Son öğe (çarpışma servisi ile) istismar tabanlı DoS ve oldukça farklı.
Ne tür bir saldırı olduğunu tespit etmeye çalışıyorsanız, bazı trafiği yakalamak isteyebilirsiniz (wireshark, tcpdump veya libpcap kullanarak). Mümkünse, muhtemelen çok fazla trafik çekeceğinize dikkat etmelisiniz.
Sık sık olmadığı gibi, bunlar botnetlerden gelecektir (teklif verebilecekleri bir saldırganın merkezi kontrolü altındaki güvenilen ana bilgisayar ağları). Bu, saldırganın farklı ağlardaki farklı ana bilgisayarların üst düzey bant genişliğini (çok ucuza) elde etmesine ve izlerini sürerken size saldırmak için iyi bir yoldur. Düşük yörünge iyon topu bir botnet örneğidir (kötü amaçlı yazılım türetilmiş olmasına rağmen gönüllü olmasına rağmen); Zeus daha tipik bir tanesidir.
Trafik tabanlı
Trafik tabanlı bir DoS’in altındaysanız, sadece çok fazla trafik var Sunucunuza, İnternet ile bağlantısının tamamen doyduğuna geliyor. Sunucunuzu başka bir yerden ping ederken yüksek bir paket kaybı oranı vardır ve (kullanımdaki yönlendirme yöntemlerine bağlı olarak) bazen de gerçekten yüksek bir gecikme (ping yüksek) görüyorsunuz. Bu tür saldırı genellikle bir DDoS'dir.
Bu gerçekten "yüksek sesle" bir saldırı olsa da ve bu durumun ne olduğu açık olsa da, bir sunucu yöneticisinin azaltması (ve paylaşılan bir barındırma kullanıcısını azaltmak için temelde imkansız hale getirmesi) zordur. ISS'nizden yardıma ihtiyacınız olacak; DDoS altında olduğunuzu bildirin ve yardımcı olabilirler.
Ancak, çoğu İSS ve transit sağlayıcı, nelerin olup bittiğini proaktif olarak gerçekleştirecek ve karadelik yolu sunucunuz için. Bunun anlamı, sunucunuza mümkün olduğunca az maliyetle bir yol yayınlamalarıdır.
0.0.0.0: Sunucunuza trafiği artık internet üzerinde artık kullanılamaz hale getiriyorlar. Bu yollar tipik olarak / 32'lerdir ve sonunda kaldırılırlar. Bu size hiç yardımcı olmuyor; amaç ISS'nin şebekesini zenginlikten korumaktır. Süre boyunca, sunucunuz etkin bir şekilde İnternet erişimini kaybedecektir.
İSS'nizin (ya da kendi AS'ınız varsa) yardım edebilecek tek yolu, olası DDoS trafiğini tespit edebilen ve sınırlandırabilen akıllı trafik şekillendiricileri kullanıyor olmalarıdır. Herkesin bu teknolojiye sahip değil. Ancak, trafik bir veya iki ağdan veya bir ana bilgisayardan geliyorsa, önünüzdeki trafiği de engelleyebilir.
Kısacası, yapabileceğin çok az var Bu sorun hakkında. En iyi uzun vadeli çözüm, hizmetlerinizi DDoSed'in tek tek ve eş zamanlı olması gereken Internet üzerinde farklı yerlerde barındırmak ve DDoS'yi çok daha pahalı hale getirmektir. Bunun için stratejiler, korumanız gereken hizmete bağlıdır; DNS, birden çok yetkili ad sunucusu, yedek MX kayıtları ve posta eşanjörleri ile SMTP ve yuvarlak robinli DNS veya çok işlestirme ile HTTP ile korunabilir (ancak bazı bozulmalar zaten süre boyunca fark edilebilir).
Yük dengeleyicileri bu problem için nadiren etkili bir çözümdür, çünkü yük dengeleyicinin kendisi aynı soruna tabidir ve sadece bir darboğaz oluşturur. IPTables veya diğer güvenlik duvarı kuralları yardımcı olmaz Çünkü problem, borunun doymuş olmasıdır. Bağlantılar güvenlik duvarınız tarafından görüldüğünde, çok geç oldu.; Sitenize bant genişliği tüketildi. Bağlantılarla ne yaptığınız önemli değil; gelen trafik miktarı normale döndüğünde saldırı hafifletilir veya tamamlanır.
Bunu yapabiliyorsanız, bir içerik dağıtım ağı Akamai, Limelight ve CDN77 gibi (CDN) veya CloudFlare veya Prolexic gibi bir DDoS ovma servisini kullanın. Bu hizmetler, bu tür saldırıları hafifletmek için aktif önlemler almakta ve aynı zamanda bu kadar çok farklı yerlerde bant genişliğine sahip olmaktadır.
CloudFlare (veya başka bir CDN / proxy) kullanmaya karar verirseniz, sunucunuzun IP'sini gizlemeyi unutmayın. Bir saldırgan IP'yi bulursa, yine CloudFlare'yi atlayarak sunucunuzu doğrudan DDoS yapabilir. IP'yi gizlemek için, sunucunuz güvende olmadıkça doğrudan diğer sunucularla / kullanıcılarla iletişim kurmamalıdır. Örneğin, sunucunuz doğrudan kullanıcılara e-posta göndermemelidir. Tüm içeriğinizi CDN'de barındırıyorsanız ve kendi sunucunuza sahip değilseniz, bu geçerli değildir.
Ayrıca, bazı VPS ve barındırma sağlayıcıları bu saldırıları diğerlerinden daha az etkilemekte daha iyidir. Genel olarak, ne kadar büyükler, daha iyi olacaklar; Çok iyi yönlendirilmiş ve çok sayıda bant genişliğine sahip olan bir sağlayıcı doğal olarak daha esnek olacak ve aktif ve tam kadrolu bir ağ operasyonları ekibiyle daha hızlı tepki verebilecektir.
Yük tabanlı
Yük tabanlı bir DDoS karşılaştığınızda, yük ortalaması anormal derecede yüksektir Platformunuza ve özelliklerine bağlı olarak (veya CPU, RAM veya disk kullanımı). Sunucu yararlı bir şey yapıyor gibi görünmüyor olsa da, çok yoğun. Genellikle, olağandışı koşulları gösteren kayıtlarda bol miktarda giriş olacaktır. Çoğu zaman bu pek çok farklı yerden geliyor ve bir DDoS değil, ama bu durum böyle değil. Çok sayıda farklı ana bilgisayar bile yok..
Bu saldırı, hizmetinizin çok pahalı şeyler yapmasına dayanmaktadır. Bu, garipan sayıda TCP bağlantısının açılması ve sizin için durumunuzu korumaya zorlama veya hizmetinize aşırı büyük veya çok sayıda dosya yükleme, ya da belki de gerçekten pahalı aramalar yapma veya işlem yapmak için pahalı olan herhangi bir şey yapma gibi bir şey olabilir. Trafik, planladığınız ve sınırlayabileceğiniz sınırlar içinde, ancak Yapılan istek türleri, birçoğunun üstesinden gelmek için çok pahalı.
İlk olarak, bu tür saldırıların mümkün olduğu çoğu zaman yapılandırma sorunu veya hata hizmetinizde. Örneğin, aşırı ayrıntılı günlük açmayı etkinleştirmiş olabilirsiniz ve günlükleri yazmak için çok yavaş olan bir şeyde saklıyor olabilirsiniz. Birisi bunu fark ederse ve diske bol miktarda günlük yazmanıza neden olan bir çok şey yaparsa, sunucunuz bir taramayı yavaşlatacaktır. Yazılımınız ayrıca belirli giriş vakaları için son derece verimsiz bir şey yapıyor olabilir; Sebepler, programlar olduğu kadar sayısızdır, ancak iki örnek, hizmetinizin, tamamlanmayan bir oturumu kapatmamasına neden olan bir durum ve bunun bir çocuk sürecini doğurmasına ve bırakmasına neden olan bir durum olacaktır. Eğer devlet ile on binlerce açık bağlantıyı veya on binlerce çocuk sürecini takip ederseniz, sorun yaşarsınız.
Yapabileceğin ilk şey trafiği bırakmak için bir güvenlik duvarı kullanın. Bu her zaman mümkün değildir, ancak gelen trafikte (trafik ışığı açıksa tcpdump bunun için güzel olabilir) bir özellik varsa, güvenlik duvarında bırakabilirsiniz ve artık sorun yaratmayacaktır. Yapılması gereken diğer bir şey de, hatayı hizmetinizde düzeltmektir (satıcı ile temasa geçin ve uzun bir destek deneyimi için hazır olun).
Ancak, Bir yapılandırma sorunu varsa, oradan başlayın. Üretim sistemlerini mantıklı bir seviyeye getirin (programa bağlı olarak bu genellikle varsayılan değerdir ve genellikle "hata ayıklama" ve "ayrıntılı" düzeylerinin günlüğe kaydedilmesini gerektirir, eğer bir kullanıcı her şeyi tam olarak kaydederse ve ince detay, günlüğünüz çok ayrıntılıdır). Bunlara ek olarak, Çocuk sürecini kontrol edin ve limit talep edin, muhtemelen boğaz gelen istekler, IP başına bağlantılar ve izin verilen alt süreçlerin sayısı.
Sunucunuz ne kadar iyi yapılandırılmış ve daha iyi hazırlanmışsa, bu tür saldırıların ne kadar zor olacağı söylenir. Özellikle RAM ve CPU ile cimri olmaktan kaçının. Arka uç veritabanları ve disk depolama gibi şeylere bağlantılarınızın hızlı ve güvenilir olduğundan emin olun.
Exploit tabanlı
Hizmetiniz gizemli bir şekilde son derece hızlı çöküyor Özellikle de, çökmeden önce gelen taleplerin bir örüntüsü oluşturabilirseniz ve istek atipikse veya beklenen kullanım kalıplarıyla eşleşmiyorsa, istismar temelli bir DoS yaşıyor olabilirsiniz. Bu sadece bir ana bilgisayar (hemen hemen her tür internet bağlantısıyla) veya birçok ana bilgisayardan gelebilir.
Bu yük tabanlı bir DoS'ye benzer Birçok açıdan ve temelde aynı sebepleri ve azaltımları vardır. Fark, sadece bu durumda, sunucunuzun sunucunun israfına neden olmasına değil, ölmesine sebep olur. Saldırgan genellikle, hizmetinizde bir boş bırakma veya bir şeylere neden olan bozuk girdi gibi bir uzaktan kilitlenme güvenlik açığından yararlanır.
Bunu, yetkisiz bir uzaktan erişim saldırısına benzer şekilde ele alın. Firewall Köklendirilebilirlerse kaynak sunuculara ve trafik türüne karşı. Doğrulayan proxy'leri kullan uygunsa. Adli delil toplayın (trafiğin bir kısmını yakalamaya çalışın), satıcıyla bir hata bileti gönderin ve kötüye karşı bir kötüye kullanım şikayeti (veya yasal şikayet) doldurmayı da düşünün.
Bir istismar bulunabilirse, bu saldırıların montajı oldukça ucuzdur ve çok güçlü olabilirler, ancak aynı zamanda izlenmesi ve durdurulması nispeten kolaydır. Bununla birlikte, trafik tabanlı DDoS'ye karşı yararlı olan teknikler genellikle istismar tabanlı DoS'ye karşı faydasızdır.
Bir kuruluş iseniz, birçok seçeneğiniz vardır. Benim gibi küçük bir adam iseniz, küçük bir web sitesine hizmet vermek için bir VPS veya özel bir sunucu kiralayarak, maliyet hızla engelleyici hale gelebilir.
Deneyimlerimden, en çok adanmış ve VPS sağlayıcılarının sunucunuz için özel güvenlik duvarı kuralları oluşturmayacağına inanıyorum. Ama bugünlerde birkaç seçeneğiniz var.
CDN
Bir web sunucusu çalıştırıyorsanız, bunu CloudFlare veya Amazon CloudFront gibi bir CDN'nin arkasına koymayı düşünün.
CDN'ler pahalıdır. Maliyeti kontrol altında tutmak için, büyük dosyaları (büyük resimler, ses, video) doğrudan CDN yerine sunucunuzdan sunun. Ancak bu, sunucu IP adresinizi saldırganlara gösterebilir.
Özel bulut
Özel bulutlar genellikle pahalı kurumsal çözümlerdir, ancak Amazon VPC'nin kurulması gereken hiçbir şey yoktur. Bununla birlikte, Amazon'un bant genişliği genel olarak pahalıdır. Bunu karşılayabiliyorsanız, Amazon VPC'nin Güvenlik Grubu ve Ağ ACL'sini, örneğinize ulaşmadan önce trafiği engellemek için ayarlayabilirsiniz. TCP sunucu bağlantı noktası dışındaki tüm bağlantı noktalarını engellemelisiniz.
Saldırganın hala TCP sunucu bağlantı noktasına saldırabileceğini unutmayın. Eğer bir web sunucusu ise, engelleyici olmayan IO kullanan ve çok sayıda bağlantıyı işleyebilen nginx gibi bir şey kullanmayı düşünün. Bunun ötesinde, sunucu yazılımının en son sürümünü çalıştırmanın yanında yapabileceğiniz çok şey yoktur.
TCP bağlantı noktanız saldırıya uğradı ve tüm diğer hatalar başarısız
Bu, WebSocket, medya içeriği / akış sunucuları gibi bir CDN'nin arkasına gizlenemeyen web dışı sunucular için geçerli olan bir çözümdür. CloudFlare, WebSocket'i destekler, ancak şu anda yalnızca işletme için.
Hedef, TCP dinleme bağlantı noktanızı, her 10 saniyede bir, bir botnetin devam edemeyeceği kadar hızlı bir şekilde değiştirmektir. Bu, bağlantı dolaşımını gerçekleştiren basit bir proxy programı kullanılarak gerçekleştirilir. Bağlantı noktası sırası, sözde rasgele, ancak sunucu saatine dayanmalıdır. Ve sunucu zamanını ve bağlantı noktasını hesaplamak için kullanılan algoritma, istemci javascript / flash kodunda saklanmalıdır. Program ayrıca dinleme portunu değiştirirken güvenlik duvarını da değiştirmeli ve güvenlik duvarının durum bilgisi olması gerekir. Birisi ilgilenirse, Amazon ile çalışan node.js betiğimi GitHub'a yükleyeceğim.