Skocz do zawartości
  • Cześć!

    Witaj na forum RootNode - aby pisać u nas musisz się zarejestrować, a następnie zalogować. Posty pisane z kont niezarejestrowanych nie są widoczne publicznie.

Floodowanie serwera - jak zabezpieczyć.


ednet

Rekomendowane odpowiedzi

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

 

Odnośnik do komentarza
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
Odnośnik do komentarza
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
Odnośnik do komentarza
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.

 

Edytowane przez ednet
Odnośnik do komentarza
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!

Odnośnik do komentarza
Udostępnij na innych stronach

  • 10 miesięcy temu...
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
Odnośnik do komentarza
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. 🙂

 

Odnośnik do komentarza
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. 🙂<span>

 

 

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.

Odnośnik do komentarza
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 :)

Odnośnik do komentarza
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. 

Odnośnik do komentarza
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.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

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