2009-06-22 8 views
17

To może być coś bardziej pasującego do Serverfault, ale wielu webdeveloperów, którzy tu przychodzą, prawdopodobnie skorzysta z możliwych odpowiedzi na to pytanie.Chroń się przed atakami Dos

Pytanie brzmi: w jaki sposób skutecznie chronisz się przed atakami Denial Of Service na swój serwer sieciowy?

zadałem sobie to po przeczytaniu tego article

Dla tych, którzy nie znają, oto co ja o tym pamiętać: atak DoS będą próbować zajmować wszystkich połączeń przez wielokrotne wysyłanie fałszywych nagłówków do swoich serwerach.

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

Wikipedia zapewnia trochę więcej info: http://en.wikipedia.org/wiki/Denial_of_service

Odpowiedz

43

Nie ma panaceum, ale można zrobić ataków DoS trudniejsze wykonując niektóre z następujących:

  • Nie (lub ograniczenie chęci) zrobić kosztownych operacji w imieniu klientów nieuwierzytelnionych
  • Próby autoryzacji przepustnicy
  • Operacje przepustnicy wykonywane w imieniu każdego uwierzytelnionego klienta i umieszczenie ich konta w tymczasowej blokadzie, jeśli wykonują zbyt wiele czynności w zbyt krótkim czasie.
  • Mieć podobną globalną przepustowość dla wszystkich produktów nieautentycznych ted klientów i przygotuj się do obniżenia tego ustawienia, jeśli wykryjesz trwający atak.
  • Masz flagę, której możesz użyć podczas ataku, aby wyłączyć nieuwierzytelniony dostęp.
  • Nie przechowuj rzeczy w imieniu nieuwierzytelnionych klientów i używaj limit ograniczający ilość pamięci dla każdego uwierzytelnionego klienta Zasadniczo odrzuć wszystkie zniekształcone, nieuzasadnione i nieuzasadnione żądania tak szybko, jak to możliwe (i zaloguj je, aby ułatwić wykrycie ataku).
  • Nie używaj czysta pamięć podręczna LRU, jeśli żądania od nieuwierzytelnionych klientów mogą skutkować eksmisją rzeczy z tej pamięci podręcznej, ponieważ będziesz podlegać atakom na zatruwanie pamięci podręcznej (gdzie złośliwy klient prosi o wiele inna rzadko używane rzeczy, co może doprowadzić do eksmisji wszystkie przydatne rzeczy z pamięci podręcznej i trzeba zrobić o wiele więcej pracy, aby służyć swoim uzasadnionym klientów)

Pamiętaj, że ważne jest, aby wręcz odrzucają dławiony żądania (na przykład z HTTP 503: Service Unavailable lub podobna odpowiedź odpowiednia dla dowolnego protokołu, którego używasz) zamiast kolejkowania ograniczonych żądań. Jeśli ustawisz je w kolejce, kolejka pochłonie całą twoją pamięć, a atak DoS będzie co najmniej równie skuteczny, jak bez dławienia.

Niektóre bardziej szczegółowe porady dla serwerów HTTP:

  • Upewnij się, że serwer jest skonfigurowany tak, aby odrzucić POST wiadomości bez towarzyszącej Content-Length nagłówka, a odrzucać żądania (i udusić klienta przestępstwa), które przekraczają stwierdził Content-Length i odrzucić wnioski z Content-Length który jest niewspółmiernie długi za usługę, że POST (lub PUT) ma na celu
0

Krótka odpowiedź:

Nie można chronić się przed DoS.

A ja nie zgadzam się, że należy na ServerFault od DoS jest klasyfikowana jako kwestia bezpieczeństwa i jest na pewno związane z programowaniem

+0

Tylko dlatego, że jest to kwestia bezpieczeństwa zrobić nie znaczy, że nie należy do ServerFault. Programowanie dotyczy tylko niewielkiej części takich problemów bezpieczeństwa. – ProfK

+0

Oczywiście można zabezpieczyć się przed DoS, wystarczy użyć zapory sieciowej i ograniczyć szybkość połączeń na adres IP. O wiele trudniej jest jednak chronić przed atakiem DDoS. –

1

Dla tego konkretnego ataku (o ile żądanie jest GET) w oparciu równoważenia obciążenia lub WAF która opiera się wyłącznie na pełnych żądaniach do serwera sieciowego.

Problemy rozpoczynają się, gdy zamiast GET POST jest używany (co jest łatwe), ponieważ nie można się dowiedzieć, czy jest to złośliwy test POST, czy po prostu bardzo powolne przesyłanie od użytkownika.

Z DoS per se nie można naprawdę chronić swojej aplikacji internetowej ze względu na prosty fakt. Twoje zasoby są ograniczone, podczas gdy atakujący ma potencjalnie nieograniczony czas i zasoby do wykonania DoS. A przez większość czasu jest on tani, aby atakujący mógł wykonać wymagane kroki. na przykład ten atak wspomniał powyżej kilka 100 wolnych połączeń -> nie ma problemu

1

Serwery asynchroniczne, na przykład, są bardziej lub mniej odporne na tę szczególną formę ataku. Na przykład obsługuję aplikacje Django za pomocą odwrotnego proxy Nginx, a atak nie wpłynął na jego działanie. Innym popularnym asynchronicznym serwerem jest lighttpd.

Pamiętaj, że ten atak jest niebezpieczny, ponieważ może być wykonywany nawet przez jedną maszynę z wolnym połączeniem. Jednak powszechne ataki DDoS powodują, że twój serwer działa przeciwko armii maszyn i niewiele możesz zrobić, aby się przed nimi zabezpieczyć.

Powiązane problemy