Linux: zapobiegaj wychodzącej powodzi TCP

9

Prowadzę kilkaset serwerów za loadbalancerami, hostując wiele różnych stron z mnóstwem aplikacji (nad którymi nie mam kontroli). Mniej więcej raz w miesiącu jedna z witryn zostaje zhakowana i przesyłany jest skrypt powodziowy atakujący bank lub instytucję polityczną. W przeszłości zawsze były to powodzie UDP, które były skutecznie rozwiązywane przez blokowanie wychodzącego ruchu UDP na indywidualnym serwerze internetowym. Wczoraj zaczęli zalewać duży amerykański bank z naszych serwerów, używając wielu połączeń TCP do portu 80. Ponieważ tego typu połączenia są doskonale poprawne dla naszych aplikacji, samo ich zablokowanie nie jest akceptowalnym rozwiązaniem.

Rozważam następujące alternatywy. Który poleciłbyś? Czy wdrożyłeś je i jak?

  • Ogranicz wychodzące pakiety TCP serwera WWW (iptables) z portem źródłowym! = 80
  • To samo, ale z kolejką (tc)
  • Ogranicz szybkość ruchu wychodzącego na użytkownika na serwer. Dość obciążenie administracyjne, ponieważ potencjalnie istnieje 1000 różnych użytkowników na serwer aplikacji. Może to: w jaki sposób mogę ograniczyć przepustowość na użytkownika?
  • Coś jeszcze?

Oczywiście szukam również sposobów na zminimalizowanie szans hakerów na wejście na jedną z naszych hostowanych stron, ale ponieważ ten mechanizm nigdy nie będzie w 100% wodoodporny, chcę poważnie ograniczyć wpływ włamania.

Aktualizacja: Obecnie testuję te reguły, które zapobiegłyby temu konkretnemu atakowi. Jak zaproponowałbyś, aby były bardziej ogólne? Czy brakuje mi znanego ataku TCP DoS, gdy ograniczam szybkość tylko dla pakietów SYN?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset

Twoje zdrowie!

Willem
źródło

Odpowiedzi:

3

Moim zdaniem najlepszym możliwym rozwiązaniem i tym, które działało dla mnie bardzo dobrze, jest ograniczenie liczby połączeń / pakietów dla docelowego adresu IP. Ustawienie limitu na rozsądną szybkość uniemożliwi atakującemu wysłanie dużej liczby połączeń do celu. Ustawienie portu i protokołu nie jest dobrym pomysłem, ponieważ jeśli atakujący wysyła dziś HTTP flood, jutro użyje innego rodzaju ataku. więc ograniczenie połączeń na ip jako ogólne byłoby rozwiązaniem twojego problemu.

Mam nadzieję, że to pomoże :)

Klątwa
źródło
-3

Postawę, którą zawsze przyjmowałem, jest taka, że ​​serwer sieciowy nie powinien w ogóle nawiązywać wychodzących połączeń TCP - tylko wysyłać ruch jako serwer odpowiadający na żądania przychodzące. (Zezwalam również na przychodzące TCP tylko na serwer WWW i SSH.) (W związku z tym uważam również, że serwer WWW nigdy nie jest właściwym hostem do wysyłania poczty.) Nie tylko zapobiegnie to atakom wychodzącym - to także stanowi dodatkową trudność na ataki na twoje systemy (hakerzy nie mogą uzyskać okna xterm ani wget swojego zestawu narzędzi do twojego hosta).

Piotr
źródło
OK, więc jak idzie strona internetowa i pobiera kanał RSS z innej strony?
Michael Hampton