DDoS (Dağıtılmış Hizmet Reddi Saldırıları) genellikle sunucu düzeyinde engellenir, değil mi?
PHP düzeyinde engellemenin veya en azından azaltmanın bir yolu var mı?
Değilse, DDoS saldırılarını durdurmanın en hızlı ve en yaygın yolu nedir?
DDoS (Dağıtılmış Hizmet Reddi Saldırıları) genellikle sunucu düzeyinde engellenir, değil mi?
PHP düzeyinde engellemenin veya en azından azaltmanın bir yolu var mı?
Değilse, DDoS saldırılarını durdurmanın en hızlı ve en yaygın yolu nedir?
Yanıtlar:
DDOS, veri merkezindeki önemli sistemleri alt eden bir saldırı ailesidir:
DDOS savunmanızı oluşturmaya başlamadan önce, en kötü durumdaki riske maruz değerin ne olduğunu düşünün. Küçük bir topluluk için kritik olmayan, kullanımı ücretsiz bir hizmet için, risk altındaki toplam değer fıstık olabilir. Milyar dolarlık yerleşik bir işletme için ücretli, halka açık, görev açısından kritik bir sistem için, değer şirketin değeri olabilir. Bu ikinci durumda, StackExchange'i kullanmamalısınız :) Her neyse, DDOS'a karşı savunmak için derinlemesine bir savunma yaklaşımına ihtiyacınız var:
Tüm sistemlerinizi ve yazılım paketlerinizi en son güvenlik yamalarıyla güncel tutun - bunların hepsini kastediyorum:
İyi bir güvenlik duvarı veya güvenlik aracı kurduğunuzdan ve kalifiye bir güvenlik uzmanı tarafından düzenli olarak gözden geçirildiğinden emin olun . Güvenlik duvarındaki güçlü kurallar, birçok basit saldırıya karşı iyi bir savunmadır. Ayrıca her açık hizmet için mevcut olan bant genişliğini yönetebilmek de yararlıdır.
İyi ağ izleme araçlarına sahip olun - bu, şunları anlamanıza yardımcı olabilir:
Saldırı, meşru web sitesi hizmetlerinin yoğun kullanımı olabilir (örneğin, sorgular çalıştıran 'yasal' URI'lara ulaşmak veya veri eklemek / güncellemek / silmek) - on ila milyonlarca farklı IP adresinden gelen binlerce veya milyonlarca istek, bir siteyi kendi sitesine getirecektir. dizler. Alternatif olarak, bazı hizmetlerin çalıştırılması o kadar pahalı olabilir ki, yalnızca birkaç istek DOS'a neden olur - gerçekten pahalı bir rapor düşünün. Bu nedenle , neler olup bittiğine dair iyi bir uygulama düzeyinde izlenmeye ihtiyacınız var:
Uygulamanızdaki makul kısıtlamalar ve sınırlar . Örneğin, şunları yapabilirsiniz:
Son olarak, bir DOS Yanıt Planı belgesi yazın ve bunu tüm ilgili taraflarca dahili olarak gözden geçirin: İşletme, Yönetim, Yazılım geliştirme ekibi, BT ekibi ve bir güvenlik uzmanı. Belgeyi yazma süreci, sizin ve ekibinizin sorunlar üzerinde düşünmesine neden olacak ve en kötü şeyin tatil gününüzde sabah 3'te olması durumunda hazırlıklı olmanıza yardımcı olacaktır. Belge (diğer şeylerin yanı sıra) şunları kapsamalıdır:
Öyleyse, önsöz bir yana, işte bazı özel cevaplar:
DDOS genellikle sunucu düzeyinde engellenir, değil mi?
Gerçekte değil - en kötü DDOS saldırılarının çoğu düşük seviyelidir (IP paketi seviyesinde) ve DDOS saldırılarını işlemek için geliştirilmiş yönlendirme kuralları, güvenlik duvarları ve güvenlik cihazları tarafından yönetilir.
PHP düzeyinde engellemenin veya en azından azaltmanın bir yolu var mı?
Bazı DDOS saldırıları, geçerli URI'ler ve HTTP istekleri göndererek uygulamanın kendisini hedef alır. İsteklerin oranı arttığında, sunucularınız mücadele etmeye başlar ve bir SLA kesintisi yaşarsınız. Bu durumda, PHP seviyesinde yapabileceğiniz şeyler vardır:
Uygulama düzeyinde izleme: Her hizmetin / sayfanın isteklerini, neler olup bittiğini görebileceğiniz bir şekilde günlüğe kaydetmesini sağlayın (böylece saldırıyı hafifletmek için önlemler alabilirsiniz). Bazı fikirler:
Bir günlük aracına (veya Excel veya benzeri) kolayca yükleyebileceğiniz ve komut satırı araçlarıyla (grep, sed, awk) ayrıştırabileceğiniz bir günlük biçimine sahip olun. Bir DDOS'un milyonlarca satırlık günlük oluşturacağını unutmayın. Neler olup bittiğini anlamak için büyük olasılıkla günlüklerinizi (özellikle URI, zaman, IP ve kullanıcı açısından) dilimlemeniz ve aşağıdaki gibi veriler oluşturmanız gerekecek:
Her isteğin IP adresini günlüğe kaydedin. DNS'yi tersine çevirmeyin - ironik bir şekilde bunu yapmanın maliyeti saldırganlar için DDOS'u kolaylaştırır
Makul oran sınırları: Belirli bir IP'nin veya Kullanıcının belirli bir süre içinde kaç istekte bulunabileceğine ilişkin sınırlar uygulayabilirsiniz. Meşru bir müşteri saniyede 10'dan fazla talepte bulunabilir mi? İsimsiz kullanıcılar pahalı raporlara erişebilir mi?
Anonim erişim için CAPTCHA: Kullanıcının bir DDOS botu değil, bir kişi olduğunu doğrulamak için tüm anonim istekler için bir CAPTCHA uygulayın.
DDOS saldırılarını durdurmanın en hızlı ve en yaygın yolu nedir?
En hızlısı muhtemelen şantaja teslim olmaktır, ancak bu arzu edilmeyebilir.
Aksi takdirde, yapmanız gereken ilk şey, barındırma ve / veya CDN sağlayıcınızla iletişim kurmak ve onlarla çalışmaktır (eğer sizinle iletişime geçmemişlerse, neler olup bittiğini sormuşlarsa ...). Bir DDOS oluştuğunda, büyük olasılıkla barındırma sağlayıcısının diğer müşterilerini ikincil olarak etkileyecektir ve sağlayıcı, kaynaklarını korumak için sitenizi kapatmak için önemli bir baskı altında olabilir. Günlüklerinizi (her türlü bilgiyi) sağlayıcı ile paylaşmaya hazır olun; bu günlükler, ağ monitörleri ile birlikte, saldırıyı engellemek / azaltmak için yeterli bilgi sağlayabilir.
Bir DDOS bekliyorsanız, barındırma sağlayıcınızı sağlayabilecekleri koruma düzeyinde nitelendirmek çok iyi bir fikirdir. Bunu azaltmak için DDOS deneyimine ve araçlarına sahip olmalıdır - araçlarını, süreçlerini ve sorun giderme prosedürlerini anlayın. Ayrıca barındırma sağlayıcı gelen sahiptir destekleyen neyi sormak onların yukarı sağlayıcıları. Bu hizmetler daha fazla ön veya aylık maliyet anlamına gelebilir, ancak bunu bir sigorta poliçesi olarak değerlendirin.
Saldırı altındayken, günlüklerinizi almanız ve onları çıkarmanız gerekecek - saldırının modelini deneyin ve çalışın. Anonim erişimi kapatmayı ve saldırı altındaki hizmetleri kısıtlamayı düşünmelisiniz (yani uygulamanın hizmet için hız sınırını azaltın).
Şanslıysanız ve küçük, sabit bir müşteri tabanınız varsa, geçerli müşterilerinizin IP adreslerini belirleyebilirsiniz. Durum buysa, kısa bir süre için beyaz liste yaklaşımına geçebilirsiniz. Tüm müşterilerinizin bunun devam ettiğini bildiğinden emin olun, böylece yeni bir IP'den erişmeleri gerektiğinde arayabilirler :)
Doug McClean'ın şu adreste harika bir tavsiyesi var: https://stackoverflow.com/a/1029613/1395668
Sorunun PHP kısmına göre;
Bunun için PHP'ye güvenmesem de, uygulanabilir ancak tüm bu olasılıkları veya daha fazlasını dikkate almam gerekiyor;
Basit sözde;
<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
$_SESSION['ddos'] = $hash;
}
list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
header('HTTP/1.1 503 Service Unavailable');
// die('Easy!');
die;
}
// Save last request
$_SESSION['ddos'] = $hash;
?>
Php seviyesi istek zincirinde çok geç.
Apache sunucunuzu açık kaynaklı bir uygulamanın arkasına koymak sizin için iyi bir seçenek olabilir.
http://tengine.taobao.org/ , DDOS önlemeyi amaçlayan bazı belgeler ve kaynak kodu daha fazla modül içerir. Bu, nginx'in bir genişlemesidir, böylece apache örneğiniz için ters proxy olarak kolayca kurabilirsiniz.
Çarpışmayla nasıl mücadele edileceğini öğrenmek için bkz: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ DoS saldırılarına sahiptir.
Tamamen unuttum, http://www.cloudflare.com en iyi ücretsiz web uygulaması güvenlik duvarlarından biridir, ücretsiz ve ücretli planları vardır ve kıçınızı DDOS'tan kurtaracak, sadece önbelleğe alma yetenekleri için yüksek trafikli sitelerimizin çoğunda kullanıyoruz . Bu harika!
Bunu PHP seviyesinde yapamazsınız. DDOS, web sunucunuza çok fazla istek gönderen bir saldırı türüdür. Web sunucunuz PHP betiğinizi çağırmadan önce isteği reddedecektir.
Apache kullanıyorsanız, burada Apache'den bazı ipuçları verilmiştir: http://httpd.apache.org/docs/trunk/misc/security_tips.html
DDoS en iyi, çok pahalı, amaca yönelik ağ cihazları tarafından gerçekleştirilir. Ana bilgisayarlar, nispeten düşük performansa, durum tükenmesine, sınırlı bant genişliğine vb. Maruz kaldıkları için DDoS koruması yapmakta genellikle iyi değildirler. DDoS azaltma donanımına erişiminiz yoksa, iptables, apache modları ve benzer hizmetlerin kullanılması bazı durumlarda yardımcı olabilir. veya bir DDoS azaltma hizmeti, ancak ideal olmaktan uzaktır ve sizi yine de saldırı riski altında bırakır.
PHP tarafında buna benzer bir şeye ne dersiniz:
//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
//write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
$_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
if ($_SESSION['banip']==1) {
header('HTTP/1.1 503 Service Unavailable');
die;
}
Ddos / dos için apache'de kullanabileceğiniz eklentiler vardır. İyi bir başlangıç http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
LEMP kullanıyorsanız, buradan kontrol edebilirsiniz. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Bunlar iyi ve ucuz başlangıç noktalarıdır.
Do DEĞİL PHP tabanlı koruma kullanma, bu korkunç ve hemen hemen hiç bir etkisi olacak! Web sunucunuzu, örneğin Nginx'te limit_req modülünü kullanarak ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html ) hız sınırı istekleri için yapılandırın
Bununla birlikte, katman-4 ile savaşmak için CloudFlare kullanmanızı tavsiye ederim - ancak ödeme yapmak istemediğiniz sürece katman 7 tabanlı saldırıları değil.
DDOS genellikle sunucu seviyesinde engellenir, Lütfen Sunucu Seviyenizde DDOS korumasını etkinleştirin. DDOS korumaları için lütfen aşağıdaki notları kontrol edin.
DDOS sorunlarını önlemeye yardımcı olabilecek Apache HTTP Sunucusu yapılandırma ayarları:
RequestReadTimeout yönergesi, istemcinin isteği göndermek için alabileceği süreyi sınırlamaya izin verir.
Başlıklar dahil isteği almak için 10 saniye ve istek gövdesini almak için 30 saniye bekleyin:
RequestReadTimeout header=10 body=30
İstek gövdesini almak için en az 10 saniye bekleyin. İstemci veri gönderirse, zaman aşımı için üst sınır olmaksızın (LimitRequestBody tarafından dolaylı olarak verilen sınır dışında) alınan her 1000 bayt için zaman aşımını 1 saniye artırın:
RequestReadTimeout body=10,MinRate=1000
RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
KeepAliveTimeout yönergesi DoS saldırılarına maruz kalan sitelerde de düşürülebilir. Hatta bazı siteler, performansta başka dezavantajları da olan KeepAlive aracılığıyla kalmaları tamamen kapatır. Diğer modüller tarafından sağlanan çeşitli zaman aşımı ile ilgili direktiflerin değerleri kontrol edilmelidir.
LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine ve LimitXMLRequestBody direktifleri, istemci girdisi tarafından tetiklenen kaynak tüketimini sınırlamak için dikkatlice yapılandırılmalıdır. MaxRequestWorkers direktifini, sunucunun kaynakları tüketmeden maksimum sayıda eşzamanlı bağlantıyı yönetmesine izin verecek şekilde ayarlayın.
Anti DDOS adımları: