Blog (22)
Komentarze (997)
Recenzje (0)
@parranoyaSposób na (nieskomplikowany) DDoS w OpenBSD

Sposób na (nieskomplikowany) DDoS w OpenBSD

11.02.2013 12:26, aktualizacja: 11.02.2013 22:34

Długo zastanawiałem się czy warto opublikować taki wpis bo z pewnością znajdzie się wiele osób, które zarzucą mi, że opisany przeze mnie sposób jest nieskuteczny. Będą mieli rację bo rodzajów ataków DoS i DDoS jest całe mnóstwo i w związku tym technik obrony też jest bardzo dużo, a ja opisuję tylko jeden sposób. No cóż, mi przytrafił się właśnie taki i w taki dałem sobie radę.

Skuteczna walka z DoS i DDoS to zadanie skomplikowane i prawie niemożliwe do wykonania. Całe szczęście OpenBSD ma możliwości, które pozwalają bronić się przed takimi atakami (oczywiście mam na myśli ataki w małej skali - pod dużymi atakami uginają się nawet giganci IT). Jeśli to możliwe, zadanie walki z atakiem DDoS lepiej jest przekierować na router z filtrem pakietów. Komputer realizujący zadanie tylko filtrowania pakietów zużywa na ten cel stosunkowo niewiele czasu procesora i pamięci RAM (w przeciwieństwie do serwerów WWW) w związku z czym o wiele trudniej jest wyczerpać jego zasoby sprzętowe. Często spotykanym atakiem jest tzw. syn flood. Stosunkowo łatwo jest tym atakiem “zabić” serwer np. WWW, którego praca wymaga sporo czasu procesora i pamięci RAM. Wówczas na nie ma już wiele miejsca na tzw. tablice stanów połączeń i bardzo łatwo jest zapełnić całą jego pamięć operacyjną. W tym przypadku lepiej będzie jeśli proces nawiązywania połączenia zostanie przerzucony na firewall. Polega to na tym, że najpierw filtr pakietów pf nawiązuje poprawne połączenie TCP z klientem a dopiero później w imieniu klienta przekazuje połączenie do serwera WWW. Jeśli okaże się, że klient nie chce nawiązać pełnego połączenia, a tylko wysyła pakiety SYN, firewall odrzuca jego pakiety dzięki czemu praca serwera WWW pozostaje niezakłócona. Reguła filtra pakietów realizująca ten proces wygląda tak:

[code=]pass inet proto tcp from any to vr0 port www synproxy state[/code]

Większym problemem jest atak polegający na prawidłowym ale wielokrotnym połączeniu. Atakujących jest wówczas wielu i każdy z nich raz po raz wysyła żądanie strony WWW - wielokrotnie w ciągu sekundy. Bronić się możemy nakładając limit jednoczesnych połączeń z jednego adresu ip. Reguła filtra pakietów realizująca ten proces wygląda tak:

[code=]pass inet proto tcp from any to vr0 port www keep state (max-src-conn 2, max‑src-conn-rate 3/1) rdr‑to 192.168.2.12[/code]

Najlepiej jednak będzie jeśli z atakującym w ogóle nie będziemy “rozmawiać”. Po przekroczeniu założonego w poprzedniej regule limitu połączeń możemy wpisać jego adres ip na czarną listę hostów, których połączenia są natychmiast odrzucane. W tym celu wykorzystuje się opisane wcześniej tabele. Filtr pakietów automatycznie zapisuje w niej adresy ip atakujących.

[code=]pass quick inet proto tcp from any to vr0 port www keep state (max-src-conn 2, max‑src-conn rate 3/1, overload <ddos> flush global) rdr‑to 192.168.1.12[/code]

Żaden atak nie trwa wiecznie, więc nie ma sensu przetrzymywać w pamięci adresów, które nie uczestniczą już w ataku. Przyjmujemy, że raz na jakiś czas, powiedzmy co 6 godzin czarna lista zostanie wyczyszczona. W tym celu dopisujemy do zadań crontab polecenie:

[code=]pfctl -t ddos -T expire 21600[/code]

Od tego momentu co 6 godzin tablica zostanie wyczyszczona. Jeśli atak trwa w dalszym ciągu na pewno szybko znów się zapełni.

Podane sposoby to oczywiście tylko wierzchołek góry lodowej walki z atakami DoS i DDoS. Są skuteczne w prostych atakach i przy niedużej liczbie atakujących. Podczas zmasowanych ataków DDoS wcześniej zostanie zapełnione całe dostępne nam pasmo sieciowe niż routery i serwery przestaną odpowiadać. A na to większego wpływu już nie mamy (poza wykupieniem szerszego pasma, a to już kosztuje).

Wybrane dla Ciebie
Komentarze (1)