Chroń się przed atakami Dos

Może to być coś bardziej odpowiedniego dla Serverfault, ale wielu webdeveloperów, którzy przychodzą tylko tutaj, prawdopodobnie skorzysta z możliwych odpowiedzi na to pytanie.

Pytanie brzmi: jak skutecznie zabezpieczyć się przed atakami typu Denial Of Service na serwer WWW?

Zadałem sobie to pytanie po przeczytaniu tego Artykułu

Dla tych, którzy nie znają, oto co z tego pamiętam: atak DoS będzie próbował zająć wszystkie połączenia przez wielokrotnie wysyłanie fałszywych nagłówków na Wasze serwery.

W ten sposób twój serwer osiągnie limit możliwych jednoczesnych połączeń, w wyniku czego normalni użytkownicy nie będą już mogli uzyskać dostępu do twojej witryny.

Wikipedia dostarcza więcej informacji: http://en.wikipedia.org/wiki/Denial_of_service

Author: MPelletier, 2009-06-23

4 answers

Nie ma panaceum, ale możesz utrudnić ataki DoS, wykonując niektóre z następujących czynności:]}

  • nie wykonuj (lub nie ograniczaj chęci) kosztownych operacji w imieniu nieautoryzowanych klientów
  • próby uwierzytelniania przepustnicy
  • Ogranicz operacje wykonywane w imieniu każdego uwierzytelnionego klienta i umieść jego konto na tymczasowej blokadzie, jeśli zrobi zbyt wiele rzeczy w zbyt krótkim czasie
  • mają podobną przepustnicę globalną dla wszystkich nieautoryzowanych klientów i przygotuj się na obniżenie tego ustawienia, jeśli wykryjesz atak w toku
  • mają flagę, której można użyć podczas ataku, aby wyłączyć wszystkie nieautoryzowane dostępu
  • Nie przechowuj rzeczy w imieniu nieautoryzowanych klientów i użyj limitu, aby ograniczyć Przechowywanie dla każdego uwierzytelnionego klienta]} [[9]}ogólnie rzecz biorąc, odrzucaj wszystkie zniekształcone, nierozsądnie skomplikowane lub nierozsądnie ogromne żądania tak szybko, jak to możliwe (i loguj je, aby pomóc w wykryciu atak)
  • nie używaj czystej pamięci podręcznej LRU, jeśli żądania od nieautoryzowanych klientów mogą spowodować eksmisję rzeczy z tej pamięci podręcznej, ponieważ będziesz podlegać atakom zatrucia pamięci podręcznej (gdy złośliwy Klient prosi o wiele różnych rzadko używanych rzeczy, powodując eksmisję wszystkich użytecznych rzeczy z pamięci podręcznej i musisz wykonać znacznie więcej pracy, aby obsługiwać swoich legalnych klientów) {]}

Pamiętaj, że ważne jest, aby całkowicie odrzucić dławione żądania (na przykład z HTTP 503: Service Unavailable response lub podobna odpowiedź odpowiednia dla dowolnego protokołu, którego używasz), a nie kolejkowanie ograniczonych żądań. Jeśli ustawisz je w kolejce, kolejka po prostu Pożre całą twoją pamięć, a atak DoS będzie co najmniej tak skuteczny, jak byłby bez dławienia.

Kilka bardziej szczegółowych porad dla serwerów HTTP:

  • upewnij się, że twój serwer WWW jest skonfigurowany do odrzucania POST wiadomości bez towarzyszącego im nagłówka Content-Length , i odrzucać żądania (i ograniczać obrażającego klienta), które przekraczają podane Content-Length, oraz odrzucać żądania za pomocą Content-Length, która jest bezzasadnie długa dla usługi, do której POST (lub PUT) jest skierowana
 44
Author: Doug McClean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 21:57:52

Dla tego konkretnego ataku (o ile żądanie jest GET) bazuje load balancer lub WAF, który bazuje tylko pełne żądania na serwerze internetowym.

Problemy zaczynają się, gdy zamiast GET POST jest używany (co jest łatwe), ponieważ nie można wiedzieć, czy jest to złośliwy POST lub po prostu jakiś bardzo powolny upload od użytkownika.

Z DoS per se naprawdę nie można chronić webapp ze względu na prosty fakt. Twoje zasoby są ograniczone, a atakujący potencjalnie ma nieograniczony czas i zasobów do wykonywania DoS. I przez większość czasu jest to tanie dla atakującego, aby wykonać wymagane kroki. np. ten atak wspomniany wyżej kilka 100 wolno działających połączeń - > no problem

 1
Author: jitter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 21:32:04

Serwery asynchroniczne, po pierwsze, są mniej lub bardziej odporne na tę konkretną formę ataku. Na przykład obsługuję moje aplikacje Django używając odwrotnego proxy Nginx, a atak nie miał wpływu na jego działanie. Innym popularnym serwerem asynchronicznym jest lighttpd.

Pamiętaj, że ten atak jest niebezpieczny, ponieważ może być wykonywany nawet przez pojedynczą maszynę z powolnym połączeniem. Jednak częste ataki DDoS stawiają Twój serwer przeciwko armii maszyn, a niewiele możesz zrobić, aby chronić się przed nimi.

 1
Author: oggy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 21:55:38

Krótka odpowiedź:

Nie możesz się ochronić przed DoS.

I nie zgadzam się, że należy do serverfault, ponieważ DoS jest klasyfikowany jako problem bezpieczeństwa i jest definitywnie związany z programowaniem

 0
Author: Henri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 21:17:01