Jak włączyć ochronę DDoS?

85

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?

coderama
źródło
Nie mając nic lepszego, oto lista modułów Apache, które mogą potencjalnie pomóc. Wydaje się jednak niezbyt bogaty, a dwa projekty po cztery (wyszukiwane przez „dos”) wydają się nigdzie nie wskazywać.
Audrius Meskauskas
Coś takiego? mod-antiloris.sourceforge.net
K-Gun
DDOS kończy się sukcesem, gdy system nie może już przetworzyć wszystkich żądań, które rzuca na niego atak. Jeśli dodasz do aplikacji kod, który sprawdza każde żądanie pod kątem „Czy to jest atak DDOS”, wtedy ten kod w rzeczywistości wyrządza więcej szkody niż pożytku, ponieważ każde żądanie zajmuje trochę więcej zasobów. To działałoby tylko w bardzo restrykcyjnym środowisku, w którym anonimowe żądania i tak nie są dozwolone.
Hugo Delsing

Odpowiedzi:

188

DDOS to rodzina ataków, które przytłaczają kluczowe systemy w centrum danych, w tym:

  • Połączenie sieciowe centrum hostingowego z Internetem
  • Sieć wewnętrzna i routery centrum hostingowego
  • Twoja zapora i moduły równoważenia obciążenia
  • Twoje serwery internetowe, serwery aplikacji i bazy danych.

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:

  1. Współpracuj z centrum hostingowym, aby poznać oferowane przez nie usługi, w tym filtrowanie adresów IP i portów na ich połączeniach sieciowych z Internetem i oferowanych przez nich usługach zapory. Jest to krytyczne: wiele witryn jest pobieranych z Internetu przez firmę hostingową, ponieważ firma hostingowa zajmuje się zakłóceniami w całym centrum danych spowodowanymi przez DDOS dla jednego klienta. Ponadto podczas ataku DDOS będziesz bardzo ściśle współpracować z personelem centrum hostingowego, więc poznaj ich numery alarmowe i bądź z nimi w dobrych stosunkach :) Powinni mieć możliwość blokowania całych regionów międzynarodowych, całkowitego blokowania określonych usług lub sieci protokoły i inne środki ochronne o szerokim spektrum lub alternatywnie zezwalaj tylko na adresy IP z białej listy (w zależności od modelu biznesowego)
  2. Będąc w centrum hostingowym - korzystaj z sieci dostarczania treści, aby rozpowszechniać (głównie statyczne) usługi blisko użytkowników końcowych i ukrywać swoje prawdziwe serwery przed architektami DDOS. Pełna sieć CDN jest zbyt duża, aby system DDOS mógł zająć wszystkie węzły we wszystkich krajach; jeśli DDOS koncentruje się na jednym kraju, przynajmniej inni użytkownicy są nadal w porządku.
  3. Aktualizuj wszystkie swoje systemy i pakiety oprogramowania za pomocą najnowszych poprawek bezpieczeństwa - a mam na myśli je wszystkie:

    • Przełączniki zarządzane - tak, te czasami wymagają aktualizacji
    • Routery
    • Firewalle
    • Systemy równoważenia obciążenia
    • System operacyjny
    • Serwery WWW
    • Języki i ich biblioteki
  4. 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.

  5. Miej dobre narzędzia do monitorowania sieci - pomoże ci to zrozumieć:

    • Że jesteś atakowany, a nie po prostu pod dużym obciążeniem
    • Skąd pochodzi atak (co może obejmować kraje, z którymi normalnie nie prowadzisz interesów) i
    • Czym właściwie jest atak (porty, usługi, protokoły, adresy IP i zawartość pakietów)
  6. 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 :

    • Które usługi zostały wywołane i jakie argumenty / dane są wysyłane (np. Logowanie do aplikacji)
    • Którzy użytkownicy wywołują i z jakich adresów IP (tj. Logują się do Twojej aplikacji)
    • Jakie zapytania i wstawia / aktualizuje / usuwa DB
    • Średnie obciążenie, wykorzystanie procesora, operacje we / wy dysku, ruch sieciowy na wszystkich komputerach (i maszynach wirtualnych) w systemie
    • Upewnij się, że wszystkie te informacje są łatwo dostępne i że możesz skorelować dzienniki z różnych komputerów i usług (tj. Upewnij się, że wszystkie komputery są zsynchronizowane w czasie przy użyciu protokołu ntp).
  7. Rozsądne ograniczenia i ograniczenia w Twojej aplikacji . Na przykład możesz:

    • Użyj funkcji QoS w module równoważenia obciążenia, aby wysłać wszystkie anonimowe sesje do oddzielnych serwerów aplikacji w klastrze, podczas gdy zalogowani użytkownicy używają innego zestawu. Dzięki temu anonimowe DDoS na poziomie aplikacji zabierają cennych klientów
    • Używanie silnej CAPCHA do ochrony anonimowych usług
    • Limity czasu sesji
    • Ustaw limit sesji lub limit szybkości dla niektórych typów żądań, takich jak raporty. W razie potrzeby upewnij się, że możesz wyłączyć dostęp anonimowy
    • Upewnij się, że użytkownik ma ograniczenie liczby jednoczesnych sesji (aby zapobiec milionowi razy włamaniu na konto)
    • Mieć różnych użytkowników aplikacji bazodanowej dla różnych usług (np. Wykorzystanie transakcyjne a raportowanie) i korzystać z zarządzania zasobami bazy danych, aby zapobiec przytłaczaniu wszystkich innych żądań przez jeden typ
    • Jeśli to możliwe, uczyń te ograniczenia dynamicznymi lub przynajmniej konfigurowalnymi. W ten sposób podczas ataku możesz ustawić agresywne tymczasowe ograniczenia („dławienie” ataku), takie jak tylko jedna sesja na użytkownika i brak dostępu anonimowego. Z pewnością nie jest to dobre dla Twoich klientów, ale o wiele lepsze niż brak jakiejkolwiek usługi.
  8. 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):

    • Co jest zagrożone i koszty dla firmy
    • Środki podjęte w celu ochrony majątku
    • Jak wykryto atak
    • Planowana reakcja i procedura eskalacji
    • Procesy zapewniające aktualność systemu i tego dokumentu

Tak więc, odkładając na bok, oto kilka konkretnych odpowiedzi:

DDOS są generalnie blokowane na poziomie serwera, prawda?

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.

Czy istnieje sposób na zablokowanie go na poziomie PHP lub przynajmniej zmniejszenie go?

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:

      • Jakie identyfikatory URI są używane
      • Jakie identyfikatory URI zawodzą z dużą częstotliwością (prawdopodobny wskaźnik określonych identyfikatorów URI atakowanych przez osoby atakujące)
      • Którzy użytkownicy uzyskują dostęp do usługi
      • Z ilu adresów IP każdy użytkownik uzyskuje dostęp do usługi
      • Do jakich identyfikatorów URI mają dostęp anonimowi użytkownicy
      • Jakie argumenty są używane dla danej usługi
      • Przeprowadź audyt działań określonych użytkowników
    • Rejestruj adres IP każdego żądania. NIE odwracaj tego DNS - jak na ironię, koszt takiego działania ułatwia atakującym DDoS

    • Zarejestruj całą metodę URI i HTTP, np. „GET http://example.com/path/to/service?arg1=ddos
    • Zarejestruj identyfikator użytkownika, jeśli jest obecny
    • Rejestruj ważne argumenty HTTP
  • 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.

Jaki jest najszybszy i najczęstszy sposób na powstrzymanie ataków 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

Andrew Alcock
źródło
20

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;

  1. Atakujący może zmienić adres IP dla każdego żądania
  2. Atakujący może przekazać parametr (y) do URI, którego strona docelowa nie przejmuje się tymi parametrami
  3. Atakujący może ponownie uruchomić sesję przed wygaśnięciem ...

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;
?>
K-Gun
źródło
8

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!

j_mcnally
źródło
5

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

ndlinh
źródło
5

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.

ryan
źródło
8
Potrzebujemy rozwiązania, a jeśli nie ma idealnego rozwiązania, potrzebujemy rozwiązań częściowych. Nikt nie potrzebuje porady typu „po prostu nie możesz tego zrobić”.
Audrius Meskauskas
5

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;
}
NVG
źródło
1
W tym kodzie jest kilka błędów: 10 jest zakodowane na stałe, strtotime nie jest potrzebne w zmiennych serwera i sesji, a $ _SESSION ['ban_up'] == 1 powinno być = 1.
Jason Silver
2

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ć.

JustLloyd
źródło
tak, dla mnie też działało świetnie, moje doświadczenie tutaj softwareengineeringsolutions.co.uk/…
Elvis Ciotti
2

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.

Raja Rama Mohan Thavalam
źródło
2

Kroki anty DDOS :

  • Pierwszą ważną rzeczą jest zidentyfikowanie ataku DDos. Wcześniejsze zidentyfikowanie ataku DDos oznacza lepsze rozwiązanie dla Twojego serwera.
  • Uzyskanie lepszej przepustowości dostępnej dla Twojego serwera. Zawsze utrzymuj więcej niż wystarczającą przepustowość, która jest wymagana dla Twojego serwera. Nie zapobiegnie to atakowi DDOS, ale zajmie więcej czasu. Dzięki temu zyskasz trochę czasu na działanie.
  • Jeśli posiadasz własny serwer sieciowy, możesz bronić się parametrami sieci, ograniczając szybkość routera, dodając filtry, aby upuszczać pakiety do różnych źródeł ataków, bardziej agresywnie blokować półotwarte połączenia. Ustaw również niższe progi porzucania SYN, ICMP i UDP.
  • Jeśli nie masz pojęcia o tych rzeczach, szybko skontaktuj się z dostawcami usług hostingowych. Mogą dołożyć wszelkich starań, aby zapobiec atakom DDOS.
  • Istnieje również specjalna usługa łagodzenia skutków DDOS świadczona przez Cloudflare i wiele innych firm. Dzięki czemu mogą pomóc w zapobieganiu atakom DDOS. Również wiele firm oferuje tanią ochronę DDoS i ochronę DOS .
IamNOOB
źródło