Jak najlepiej bronić się przed atakiem „slowloris” DOS na serwer Apache?

32

Ostatnio uwagę zwrócił skrypt „slowloris”. Podstawową koncepcją tego, co robi slowloris, nie jest nowy atak, ale biorąc pod uwagę ostatnią uwagę, zauważyłem niewielki wzrost liczby ataków na niektóre nasze strony internetowe Apache.

W tej chwili wydaje się, że nie ma 100% obrony przed tym.

Najlepszym rozwiązaniem, które ustaliliśmy (do tej pory), jest zwiększenie liczby klientów MaxClients.

To oczywiście nie tylko zwiększa wymagania dotyczące komputera atakującego i w rzeczywistości nie chroni serwera w 100%.

Jeden inny raport wskazuje, że użycie odwrotnego proxy (takiego jak Perlbal) przed serwerem Apache może pomóc w zapobieganiu atakowi.

Używanie mod_evasive w celu ograniczenia liczby połączeń z jednego hosta i używanie mod_security do odrzucania żądań, które wyglądają tak, jakby były wysyłane przez slowlori, wydają się być najlepszą jak dotąd obroną.

Czy ktoś na ServerFault ma takie ataki? Jeśli tak, jakie środki wdrożyłeś w celu obrony / zapobiegania?

UWAGA: To pytanie dotyczy serwerów Apache, ponieważ rozumiem, że nie dotyczy to serwerów Windows IIS.

KPWINC
źródło

Odpowiedzi:

22

Doświadczyłem takiego ataku ... w środku lata (23 czerwca), gdzie powinieneś być na wsi i pić piwo:>

Położyłem Apache za Varnish , który nie tylko chronił przed slowlori, ale także dość przyspieszył żądania sieciowe.

Również iptablespomógł mi:

iptables -I INPUT -p tcp --dport 80 \
         -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP

Ta reguła ogranicza jeden host do 20 połączeń z portem 80, co nie powinno mieć wpływu na nie-złośliwego użytkownika, ale uniemożliwiłoby korzystanie z systemu slowloris z jednego hosta.

Kristaps
źródło
4
+1 dla reguły iptables.
Tim
1
Tylko jedna głowa do góry. „Po wyjęciu z pudełka” lakier nie buforuje stron, jeśli otrzymał pliki cookie. Aby obejść ten problem, musisz wykonać niestandardową konfigurację. Przykłady są dostępne na ich stronie i są łatwe do wdrożenia.
David
Lakier jest dość programowalny, więc możesz go skonfigurować, aby zobaczyć, co się dzieje i sobie z tym poradzić. Myślę jednak, że umieszczając serwer proxy przed serwerem Apache, po prostu przenosisz problem z serwera WWW na serwer proxy. Problem wciąż istnieje, tylko w innym miejscu. Połączenia / porty będą nadal wykorzystywane. Zacznę od wymienionej reguły iptables (lub jej odpowiednika dla zapory ogniowej), a następnie spojrzę na serwer proxy.
David
1
problem z atakiem sloworis jest ograniczony do modelu wielowątkowego Apache (i kilku innych serwerów WWW, które używają podobnego modelu). Lakier powinien to przetrwać.
Cian,
3

Jeśli wszystkie twoje moduły Apache są bezpieczne dla wątków, slowlori można pokonać po prostu przełączając się na MPM zdarzeń lub procesów roboczych. ref: tutaj

Cian
źródło
0

W tej chwili wydaje się, że nie ma nic więcej do roboty, ograniczając maksymalną liczbę równoczesnych połączeń na ip na serwerze.

Maxwell
źródło
0

Istnieje łatka użytkownika, którą możesz wypróbować. Zmienia limit czasu na podstawie obciążenia serwera, ale biorąc pod uwagę jego status, możesz nie chcieć używać go na komputerze produkcyjnym, bez poważnych testów. Spójrz tutaj.

Dentrasi
źródło
0

Firewall oparty na iptable powinien chronić cię przed wieloma połączeniami z 1 ip.


źródło
0

Jeśli to pomoże komukolwiek innemu, możesz czasem rozwiązać ten problem za pomocą Apache 2.2.15 lub nowszego, stosując następującą konfigurację:

LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

Więcej informacji tutaj: https://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html

MrCarrot
źródło