Skocz do zawartości
ednet

Floodowanie serwera - jak zabezpieczyć.

Polecane posty

Witam

Mój serwer dedykowany kilka dni temu przestał odpowiadać, a po podpięciu KVM zobaczyłem info Out of memory.

Twardy reset. I potem szukałem przyczyny i znalazłem.

 

W ciągu 2 minut zalogowałem blisko 1000 wywołań różnych podstron 1 sklepu opartego na prestashop mającego 40 tys towarów.

Wszystko wywołane było z 1 numeru IP.

 

Mam standardowy procesor Xeon, system Debian + Directadmin.

 

W jaki sposób można nałożyć limit ilości wywołań z 1 numeru IP w czasie np 1 sekundy.

Nie mam na myśli jakich zabezpieczeń przed DOS ale zabezpieczenie przed szybkim odświeżaniem zasobożenych stron .

 

Ed

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Parametr CT_LIMIT załatwi sprawę lub  edytuj plik  /etc/sysctl.conf

kernel.printk = 4 4 1 7 
kernel.panic = 10 
kernel.sysrq = 0 
kernel.shmmax = 4294967296 
kernel.shmall = 4194304 
kernel.core_uses_pid = 1 
kernel.msgmnb = 65536 
kernel.msgmax = 65536 
vm.swappiness = 20 
vm.dirty_ratio = 80 
vm.dirty_background_ratio = 5 
fs.file-max = 2097152 
net.core.netdev_max_backlog = 262144 
net.core.rmem_default = 31457280 
net.core.rmem_max = 67108864 
net.core.wmem_default = 31457280 
net.core.wmem_max = 67108864 
net.core.somaxconn = 65535 
net.core.optmem_max = 25165824 
net.ipv4.neigh.default.gc_thresh1 = 4096 
net.ipv4.neigh.default.gc_thresh2 = 8192 
net.ipv4.neigh.default.gc_thresh3 = 16384 
net.ipv4.neigh.default.gc_interval = 5 
net.ipv4.neigh.default.gc_stale_time = 120 
net.netfilter.nf_conntrack_max = 10000000 
net.netfilter.nf_conntrack_tcp_loose = 0 
net.netfilter.nf_conntrack_tcp_timeout_established = 1800 
net.netfilter.nf_conntrack_tcp_timeout_close = 10 
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20 
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 
net.ipv4.tcp_slow_start_after_idle = 0 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.ip_no_pmtu_disc = 1 
net.ipv4.route.flush = 1 
net.ipv4.route.max_size = 8048576 
net.ipv4.icmp_echo_ignore_broadcasts = 1 
net.ipv4.icmp_ignore_bogus_error_responses = 1 
net.ipv4.tcp_congestion_control = htcp 
net.ipv4.tcp_mem = 65536 131072 262144 
net.ipv4.udp_mem = 65536 131072 262144 
net.ipv4.tcp_rmem = 4096 87380 33554432 
net.ipv4.udp_rmem_min = 16384 
net.ipv4.tcp_wmem = 4096 87380 33554432 
net.ipv4.udp_wmem_min = 16384 
net.ipv4.tcp_max_tw_buckets = 1440000 
net.ipv4.tcp_tw_recycle = 0 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_max_orphans = 400000 
net.ipv4.tcp_window_scaling = 1 
net.ipv4.tcp_rfc1337 = 1 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_synack_retries = 1 
net.ipv4.tcp_syn_retries = 2 
net.ipv4.tcp_max_syn_backlog = 16384 
net.ipv4.tcp_timestamps = 1 
net.ipv4.tcp_sack = 1 
net.ipv4.tcp_fack = 1 
net.ipv4.tcp_ecn = 2 
net.ipv4.tcp_fin_timeout = 10 
net.ipv4.tcp_keepalive_time = 600 
net.ipv4.tcp_keepalive_intvl = 60 
net.ipv4.tcp_keepalive_probes = 10 
net.ipv4.tcp_no_metrics_save = 1 
net.ipv4.ip_forward = 0 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.all.accept_source_route = 0 
net.ipv4.conf.all.rp_filter = 1

I sysctl -p i problem powinien być rozwiązany. 

 

 

  • Smutny 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Godzinę temu, ednet napisał:

Witam

Mój serwer dedykowany kilka dni temu przestał odpowiadać, a po podpięciu KVM zobaczyłem info Out of memory.

Twardy reset. I potem szukałem przyczyny i znalazłem.

 

W ciągu 2 minut zalogowałem blisko 1000 wywołań różnych podstron 1 sklepu opartego na prestashop mającego 40 tys towarów.

Wszystko wywołane było z 1 numeru IP.

 

Mam standardowy procesor Xeon, system Debian + Directadmin.

 

W jaki sposób można nałożyć limit ilości wywołań z 1 numeru IP w czasie np 1 sekundy.

Nie mam na myśli jakich zabezpieczeń przed DOS ale zabezpieczenie przed szybkim odświeżaniem zasobożenych stron .

 

Ed

 

IP

OOM = swap + swappiness + zbadanie przyczyny dlaczego tak się dzieje. Prestę trzymaj za nginx'em (najlepiej openresty). Pamiętaj o tym że jest coś takiego jak SPOOFING (heh), także jeżeli już chcesz limitować na netfilterze (który ma tragiczną wydajność swoją drogą) to polecma to robić nie per /32 a per /24 np, connlimit.

 

54 minuty temu, Networkmanager.pl napisał:

Parametr CT_LIMIT załatwi sprawę lub  edytuj plik  /etc/sysctl.conf


kernel.printk = 4 4 1 7 
kernel.panic = 10 
kernel.sysrq = 0 
kernel.shmmax = 4294967296 
kernel.shmall = 4194304 
kernel.core_uses_pid = 1 
kernel.msgmnb = 65536 
kernel.msgmax = 65536 
vm.swappiness = 20 
vm.dirty_ratio = 80 
vm.dirty_background_ratio = 5 
fs.file-max = 2097152 
net.core.netdev_max_backlog = 262144 
net.core.rmem_default = 31457280 
net.core.rmem_max = 67108864 
net.core.wmem_default = 31457280 
net.core.wmem_max = 67108864 
net.core.somaxconn = 65535 
net.core.optmem_max = 25165824 
net.ipv4.neigh.default.gc_thresh1 = 4096 
net.ipv4.neigh.default.gc_thresh2 = 8192 
net.ipv4.neigh.default.gc_thresh3 = 16384 
net.ipv4.neigh.default.gc_interval = 5 
net.ipv4.neigh.default.gc_stale_time = 120 
net.netfilter.nf_conntrack_max = 10000000 
net.netfilter.nf_conntrack_tcp_loose = 0 
net.netfilter.nf_conntrack_tcp_timeout_established = 1800 
net.netfilter.nf_conntrack_tcp_timeout_close = 10 
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20 
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 
net.ipv4.tcp_slow_start_after_idle = 0 
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.ip_no_pmtu_disc = 1 
net.ipv4.route.flush = 1 
net.ipv4.route.max_size = 8048576 
net.ipv4.icmp_echo_ignore_broadcasts = 1 
net.ipv4.icmp_ignore_bogus_error_responses = 1 
net.ipv4.tcp_congestion_control = htcp 
net.ipv4.tcp_mem = 65536 131072 262144 
net.ipv4.udp_mem = 65536 131072 262144 
net.ipv4.tcp_rmem = 4096 87380 33554432 
net.ipv4.udp_rmem_min = 16384 
net.ipv4.tcp_wmem = 4096 87380 33554432 
net.ipv4.udp_wmem_min = 16384 
net.ipv4.tcp_max_tw_buckets = 1440000 
net.ipv4.tcp_tw_recycle = 0 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_max_orphans = 400000 
net.ipv4.tcp_window_scaling = 1 
net.ipv4.tcp_rfc1337 = 1 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_synack_retries = 1 
net.ipv4.tcp_syn_retries = 2 
net.ipv4.tcp_max_syn_backlog = 16384 
net.ipv4.tcp_timestamps = 1 
net.ipv4.tcp_sack = 1 
net.ipv4.tcp_fack = 1 
net.ipv4.tcp_ecn = 2 
net.ipv4.tcp_fin_timeout = 10 
net.ipv4.tcp_keepalive_time = 600 
net.ipv4.tcp_keepalive_intvl = 60 
net.ipv4.tcp_keepalive_probes = 10 
net.ipv4.tcp_no_metrics_save = 1 
net.ipv4.ip_forward = 0 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 
net.ipv4.conf.all.accept_source_route = 0 
net.ipv4.conf.all.rp_filter = 1

I sysctl -p i problem powinien być rozwiązany. 

 

 

Z jakiej planety się urwałeś? Czy Ty w ogóle człowieku kumasz co jest w jajku i jakie parametry podałeś czy tak wszystkich traktujesz i robisz "na pałę"?

  • Super! 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
2 godziny temu, mrViperoo napisał:

 

2 godziny temu, theqkash napisał:

Csf lub ostatecznie chyba mod_evasive też powinien dać radę

 

dzięki za odpowiedzi!

 

w CSF ustawiłem:

PORTFLOOD = "80;tcp;20;5,443;tcp;20;5"

CT_LIMIT = "150"

czy wg Was mogę użyć tych wartości na starcie ? Oczywiście będę monitorował działanie i ewentualnie poprawiał.

 

Godzinę temu, Spoofy napisał:

IP

OOM = swap + swappiness + zbadanie przyczyny dlaczego tak się dzieje. Prestę trzymaj za nginx'em (najlepiej openresty). Pamiętaj o tym że jest coś takiego jak SPOOFING (heh), także jeżeli już chcesz limitować na netfilterze (który ma tragiczną wydajność swoją drogą) to polecma to robić nie per /32 a per /24 np, connlimit.

 

To przekracza moje umiejętności :( Jak CSF nie wystarczy to użyje tego sposobu.

 

Edytowano przez ednet

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
19 minut temu, ednet napisał:

 

 

dzięki za odpowiedzi!

 

w CSF ustawiłem:

PORTFLOOD = "80;tcp;20;5,443;tcp;20;5"

CT_LIMIT = "150"

czy wg Was mogę użyć tych wartości na starcie ? Oczywiście będę monitorował działanie i ewentualnie poprawiał.

 

 

To przekracza moje umiejętności :( Jak CSF nie wystarczy to użyje tego sposobu.

 


CSF wystarczy i ma fajny front, który działa w DirectAdminie ;) Kolega który nie ogarnia do końca parametrów kernela, prawdopodobnie próbował przekazać ażebyś pozmieniał troszkę ustawienia backlog'a i zwiększył limit conntrack'a - to akurat byłoby wskazane ażeby wyedytować sobie wartość: net.ipv4.netfilter.ip_conntrack_max  na większą niż domyślną w /etc/sysctl.conf, jeżeli zobaczysz w syslog'u: "ip_conntrack: table full, dropping packet".

20 połączeń na 5 sekund to nawet za dużo w przypadku ataków, ale na początek powinno być ok.

Polecam schować jeszcze taką prestę za cloudflare'em, co by wyzbyć się botów i innego syfu + mieć jakąś opcję obrony (proxy) w czarnej godzinie.

Powodzenia!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bez jakiegoś cache to ja tego nie widzę, skoro tyle requestów leci do backendu, chyba, że masz to wyskalowane.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
5 godzin temu, devopsiarz napisał:

Bez jakiegoś cache to ja tego nie widzę, skoro tyle requestów leci do backendu, chyba, że masz to wyskalowane.


Po pierwsze: Znalezione obrazy dla zapytania zÅota Åopata

Po drugie: chyba używasz słów których nie do końca znasz znaczenie, albo nie przeczytałeś całego wątku :D Powiedz proszę, czym dla Ciebie jest "wyskalowanie" na jednym dedyku z DA, hm? ;)

  • Haha 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Istotnie nie spojrzałem na datę wątku, a chciałem trochę pomóc. Tu mój błąd.

 

Oczywiście używam słów, których znaczenie _doskonale_ rozumiem.  Rozumiem, że posiadanie jednego dedyka, automatycznie zabrania posiadania ich więcej (tudzież zamiany na większość ilość vpsów, które się "podzielą" obciążeniem)? I kompletnie nie obchodzi mnie, co się da w DA zrobić lub nie,  bo ja patrzę od strony czysto administracyjnej. 🙂

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
5 minut temu, devopsiarz napisał:

Istotnie nie spojrzałem na datę wątku, a chciałem trochę pomóc. Tu mój błąd.

 

Oczywiście używam słów, których znaczenie _doskonale_ rozumiem.  Rozumiem, że posiadanie jednego dedyka, automatycznie zabrania posiadania ich więcej (tudzież zamiany na większość ilość vpsów, które się "podzielą" obciążeniem)? I kompletnie nie obchodzi mnie, co się da w DA zrobić lub nie,  bo ja patrzę od strony czysto administracyjnej. 🙂

 

 

1) w takim układzie, w jaki sposób znalazłeś wątek, aktualizowany ostatni raz w 2018stym?
2) uważasz że podział obciążenia na vps'y automatycznie skutkuje rozwiązaniem problemu?
3) "czysto administracyjnej"  - tzn.? Rozwiń proszę tą myśl.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

1) Wchodzę na forum, a to jeden z pierwszych wątków. Nie spojrzałem na daty, to wszystko. Głupio założyłem, że tak starych tu nie ma lub są automatycznie zamykane

2) Zależy jakiego, tego może.

3) W DA nie zrobisz wszystkiego.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Trochę to dziwne i podejrzane nieprawdaż...?

1. Zarejestrowałeś się stosunkowo niedawno, jakieś 6 godzin wstecz...

2. Odkopujesz temat sprzed roku chcąc rzekomo komuś pomóc...

3. Licznik postów kręci się do przodu...

Przybędzie Łukasz to zrobi porządki i sprawdzi to i owo :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak, dziwne, chcę pomóc. A forum nie zamyka z automatu starych wątków w roku 2019. Założyliście tutaj jakiś elitarny klan, że tak "reagujecie" na nowych?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Niektórzy użytkownicy tego forum to naprawdę elita jeżeli chodzi o tematykę i wiedzę w zakresie hostingu... (nie ja :D)

Reagujemy podejrzliwie na nowych którzy dziwnym trafem mają w każdym temacie coś do powiedzenia :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
10 godzin temu, devopsiarz napisał:

Tak, dziwne, chcę pomóc. A forum nie zamyka z automatu starych wątków w roku 2019. Założyliście tutaj jakiś elitarny klan, że tak "reagujecie" na nowych?

A jaki jest cel zamykania starych wątków? Czy podobny problem nie może się zdarzyć komuś ponownie? I co wtedy, ma zakładać nowy tematu, bo u niego rozwiązanie nie działa. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
3 godziny temu, spex napisał:

A jaki jest cel zamykania starych wątków? Czy podobny problem nie może się zdarzyć komuś ponownie? I co wtedy, ma zakładać nowy tematu, bo u niego rozwiązanie nie działa. 

 

No tak, jak komuś odpowiem po roku, to złota łopata, a jak sygnalizuję, że niektóre fora automatycznie zamykają stare nieaktywne tematy (co też ma uzasadnienie), to już ktoś oponuje, że "co jeśli". Zdecydujcie się tutaj czego oczekujecie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dołącz do rozmowy

Możesz pisać i zarejestrować się później. Jeśli masz konto,Zaloguj się teraz, aby publikować na swoim koncie.

Gość
Odpowiedz...

×   Wklejony jako tekst z formatowaniem.   Wklej jako zwykły tekst

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×
×
  • Utwórz nowe...

Ważne informacje

Korzystając z forum, wyrażasz zgodę na: Warunki korzystania z serwisu, Regulamin, Polityka prywatności.