DDoS (rozproszone ataki typu „odmowa usługi”) są generalnie blokowane na poziomie serwera, prawda?
Czy istnieje sposób na zablokowanie go na poziomie PHP lub przynajmniej zmniejszenie go?
Jeśli nie, jaki jest najszybszy i najczęstszy sposób na powstrzymanie ataków DDoS?
php
security
ddos
denial-of-service
coderama
źródło
źródło
Odpowiedzi:
DDOS to rodzina ataków, które przytłaczają kluczowe systemy w centrum danych, w tym:
Zanim zaczniesz budować swoją ochronę przed atakami DDOS, zastanów się, jaka jest najgorsza wartość zagrożona. W przypadku niekrytycznej, bezpłatnej usługi dla małej społeczności, łączna wartość ryzyka może wynosić orzeszki ziemne. W przypadku opłaconego, publicznego systemu o znaczeniu krytycznym dla firmy o ugruntowanej pozycji, wartej wiele miliardów dolarów, wartość może być wartością firmy. W tym drugim przypadku nie powinieneś używać StackExchange :) W każdym razie, aby bronić się przed DDOS, potrzebujesz dogłębnej obrony:
Aktualizuj wszystkie swoje systemy i pakiety oprogramowania za pomocą najnowszych poprawek bezpieczeństwa - a mam na myśli je wszystkie:
Upewnij się, że masz dobry firewall lub bezpieczeństwa urządzenie skonfigurować i regularnie sprawdzane przez wykwalifikowanego eksperta bezpieczeństwa . Silne reguły firewalla są dobrą obroną przed wieloma prostymi atakami. Przydatna jest również możliwość zarządzania przepustowością dostępną dla każdej otwartej usługi.
Miej dobre narzędzia do monitorowania sieci - pomoże ci to zrozumieć:
Atak może po prostu polegać na intensywnym korzystaniu z legalnych usług witryn internetowych (np. Uderzaniu w „legalne” identyfikatory URI uruchamiające zapytania lub wstawianie / aktualizowanie / usuwanie danych) - tysiące lub miliony żądań pochodzących z dziesiątek do milionów różnych adresów IP doprowadzą witrynę do jej kolana. Alternatywnie, niektóre usługi mogą być tak drogie w obsłudze, że tylko kilka żądań wywołuje DOS - pomyśl o naprawdę drogim raporcie. Potrzebujesz więc dobrego monitorowania tego, co się dzieje na poziomie aplikacji :
Rozsądne ograniczenia i ograniczenia w Twojej aplikacji . Na przykład możesz:
Wreszcie, napisz dokument dotyczący planu reakcji DOS i poproś o jego wewnętrzną weryfikację przez wszystkie odpowiednie strony: biznes, kierownictwo, zespół programistów, zespół IT i eksperta ds. Bezpieczeństwa. Proces pisania dokumentu sprawi, że Ty i Twój zespół przemyślicie kwestie i pomoże wam przygotować się na najgorsze, które wydarzy się o 3 nad ranem w dzień wolny. Dokument powinien obejmować (między innymi):
Tak więc, odkładając na bok, oto kilka konkretnych odpowiedzi:
Niezupełnie - większość najgorszych ataków DDoS to ataki niskopoziomowe (na poziomie pakietów IP) i są obsługiwane przez reguły routingu, zapory ogniowe i urządzenia zabezpieczające opracowane do obsługi ataków DDOS.
Niektóre ataki DDOS są wymierzone w samą aplikację, wysyłając prawidłowe identyfikatory URI i żądania HTTP. Gdy liczba żądań rośnie, serwer (y) zaczynają walczyć i nastąpi awaria SLA. W takim przypadku są rzeczy, które możesz zrobić na poziomie PHP:
Monitorowanie na poziomie aplikacji: upewnij się, że każda usługa / strona rejestruje żądania w taki sposób, abyś mógł zobaczyć, co się dzieje (abyś mógł podjąć działania w celu złagodzenia ataku). Jakieś pomysły:
Miej format dziennika, który możesz łatwo załadować do narzędzia dziennika (lub Excela lub podobnego) i przeanalizuj za pomocą narzędzi wiersza poleceń (grep, sed, awk). Pamiętaj, że DDOS wygeneruje miliony wierszy dziennika. Prawdopodobnie będziesz musiał pokroić i uporządkować swoje dzienniki (szczególnie w odniesieniu do URI, czasu, adresu IP i użytkownika), aby dowiedzieć się, co się dzieje, i wygenerować takie dane, jak:
Rejestruj adres IP każdego żądania. NIE odwracaj tego DNS - jak na ironię, koszt takiego działania ułatwia atakującym DDoS
Rozsądne limity szybkości: możesz wprowadzić ograniczenia dotyczące liczby żądań, które dany adres IP lub użytkownik może wykonać w danym okresie. Czy legalny klient może wysłać więcej niż 10 żądań na sekundę? Czy anonimowi użytkownicy mogą w ogóle uzyskać dostęp do drogich raportów?
CAPTCHA dla anonimowego dostępu: Zaimplementuj CAPTCHA dla wszystkich anonimowych żądań, aby zweryfikować, czy użytkownik jest osobą, a nie botem DDOS.
Najszybciej prawdopodobnie ulegnie szantażowi, chociaż może to być niepożądane.
W przeciwnym razie pierwszą rzeczą, którą musisz zrobić, jest skontaktowanie się z dostawcą hostingu i / lub CDN i podjęcie współpracy z nimi (jeśli nie skontaktowali się z tobą już z pytaniem, co się do cholery dzieje ...). Gdy wystąpi DDOS, prawdopodobnie wpłynie on ubocznie na innych klientów dostawcy usług hostingowych, a dostawca może być pod znaczną presją, aby zamknąć Twoją witrynę tylko po to, aby chronić swoje zasoby. Przygotuj się do udostępniania swoich dzienników (wszelkich informacji) dostawcy; dzienniki te, w połączeniu z monitorami sieci, mogą razem dostarczać informacji wystarczających do zablokowania / złagodzenia ataku.
Jeśli spodziewasz się DDOS, bardzo dobrym pomysłem jest zakwalifikowanie dostawcy usług hostingowych pod kątem poziomu ochrony, jaki może zapewnić. Powinni mieć doświadczenie w DDOS i narzędzia do jego łagodzenia - rozumieć ich narzędzia, procesy i procedury eskalacji. Zapytaj również, jakie wsparcie ma dostawca hostingu od swoich dostawców nadrzędnych. Usługi te mogą oznaczać większe koszty z góry lub miesięcznie, ale należy to traktować jako polisę ubezpieczeniową.
Podczas ataku będziesz musiał złapać swoje kłody i wydobyć je - spróbuj wypracować schemat ataku. Należy rozważyć wyłączenie anonimowego dostępu i dławienie atakowanych usług (tj. Zmniejszenie limitu szybkości aplikacji dla usługi).
Jeśli masz szczęście i masz małą, stałą bazę klientów, możesz być w stanie określić prawidłowe adresy IP klientów. W takim przypadku możesz na chwilę przełączyć się na podejście oparte na białej liście. Upewnij się, że wszyscy Twoi klienci wiedzą, że to się dzieje, aby mogli zadzwonić, jeśli chcą uzyskać dostęp z nowego adresu IP :)
Doug McClean ma świetne rady pod adresem : https://stackoverflow.com/a/1029613/1395668
źródło
Zgodnie z częścią pytania dotyczącą PHP;
Chociaż nie polegam w tym na PHP, można by go zaimplementować, ale trzeba wziąć pod uwagę wszystkie te lub więcej możliwości;
Proste pseudo;
<?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; ?>
źródło
Poziom php jest za późno w łańcuchu żądań.
Umieszczenie serwera Apache za urządzeniem open source może być dla Ciebie dobrą opcją.
http://tengine.taobao.org/ zawiera dokumentację i kod źródłowy więcej modułów mających na celu zapobieganie DDOS. Jest to rozszerzenie nginx, więc możesz łatwo ustawić go jako odwrotne proxy dla swojej instancji Apache.
Zobacz: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/, aby dowiedzieć się, jak walczyć z kolizją ma ataki DoS.
Całkowicie zapomniałem, że http://www.cloudflare.com jest jedną z najlepszych darmowych zapór sieciowych aplikacji internetowych, mają darmowe i płatne plany i uratują twoją dupę przed DDOS, używamy go w wielu naszych witrynach o dużym natężeniu ruchu tylko ze względu na możliwości buforowania . To jest super!
źródło
Nie możesz tego zrobić na poziomie PHP. DDOS to rodzaj ataku, który wysyła zbyt wiele żądań do serwera WWW. Twój serwer sieciowy odrzuci żądanie przed wywołaniem skryptu PHP.
Jeśli używasz Apache, oto kilka wskazówek od Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
źródło
DDoS najlepiej radzi sobie z bardzo drogimi, specjalnie zaprojektowanymi urządzeniami sieciowymi. Hosty generalnie nie radzą sobie dobrze z ochroną przed atakami DDoS, ponieważ są narażone na stosunkowo niską wydajność, wyczerpanie stanu, ograniczoną przepustowość itp. Korzystanie z iptables, modów apache i podobnych usług może pomóc w niektórych sytuacjach, jeśli nie masz dostępu do sprzętu ograniczającego atak DDoS lub usługa łagodzenia skutków DDoS, ale jest daleka od ideału i nadal naraża Cię na ryzyko ataku.
źródło
Co powiesz na coś takiego po stronie PHP:
//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; }
źródło
Istnieją wtyczki, których możesz używać w apache dla ddos / dos. Dobry początek tutaj http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Jeśli jesteś na LEMP, możesz sprawdzić tutaj. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
To są dobre, niedrogie punkty wyjścia.
źródło
Czy NIE stosować ochronę opartą na PHP, to straszne i będzie trudno mieć wpływ na wszystko! Skonfiguruj swój serwer WWW, aby żądania ograniczenia szybkości, na przykład w Nginx za pomocą modułu limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
Chociaż zalecałbym używanie CloudFlare do zwalczania ataków w warstwie 4 - jednak nie ataków opartych na warstwie 7, chyba że jesteś gotów zapłacić.
źródło
DDOS są generalnie blokowane na poziomie serwera. Włącz ochronę DDOS na poziomie serwera. Sprawdź poniższe uwagi dotyczące zabezpieczeń DDOS.
Ustawienia konfiguracji serwera Apache HTTP, które mogą pomóc w zapobieganiu problemom DDOS:
Dyrektywa RequestReadTimeout pozwala ograniczyć czas potrzebny klientowi na wysłanie żądania.
Zezwól 10 sekund na otrzymanie żądania wraz z nagłówkami i 30 sekund na odebranie treści żądania:
RequestReadTimeout header=10 body=30
Odczekaj co najmniej 10 sekund na odebranie treści żądania. Jeśli klient wysyła dane, zwiększ limit czasu o 1 sekundę na każde odebrane 1000 bajtów, bez górnego limitu czasu (poza limitem podanym pośrednio przez LimitRequestBody):
RequestReadTimeout body=10,MinRate=1000 RequestReadTimeout header=10-30,MinRate=500 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
Dyrektywa KeepAliveTimeout może również zostać obniżona na stronach, które są przedmiotem ataków DoS. Niektóre strony całkowicie wyłączają utrzymywanie aktywności za pośrednictwem KeepAlive, co ma oczywiście inne wady wydajności. Należy sprawdzić wartości różnych dyrektyw związanych z limitami czasu, dostarczanych przez inne moduły.
Dyrektywy LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine i LimitXMLRequestBody powinny być starannie skonfigurowane, aby ograniczyć zużycie zasobów wyzwalane przez dane wejściowe klienta. Dostosuj dyrektywę MaxRequestWorkers, aby umożliwić serwerowi obsługę maksymalnej liczby jednoczesnych połączeń bez wyczerpywania się zasobów.
źródło
Kroki anty DDOS :
źródło