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

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.