Skocz do zawartości
ednet

Floodowanie serwera - jak zabezpieczyć.

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

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
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 tego posta


Odnośnik do posta
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 tego posta


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

Udostępnij tego posta


Odnośnik do posta
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 tego posta


Odnośnik do posta
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ę

  • Przeglądający   0 użytkowników

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

×

Powiadomienie o plikach cookie

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