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!