Проблема решается посредством Iptables
СТавится Iptables, если Debian8, команда apt-get install nftables
Cтавится fail2ban там по умолчанию защита от взлома сервера к админке aptitude install fail2ban
Пишутся правила для Iptables
iptables -I INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 10 –connlimit-mask 24 -j DROP iptables -I INPUT -p tcp –syn –dport 80 -m hashlimit –hashlimit-above 1/second –hashlimit-burst 20 –hashlimit-mode srcip –hashlimit-srcmask 24 –hashlimit-name blip -j DROP
echo «20000» > /proc/sys/net/ipv4/tcp_max_syn_backlog echo «1» > /proc/sys/net/ipv4/tcp_synack_retries echo «30» > /proc/sys/net/ipv4/tcp_fin_timeout echo «5» > /proc/sys/net/ipv4/tcp_keepalive_probes echo «15» > /proc/sys/net/ipv4/tcp_keepalive_intvl echo «20000» > /proc/sys/net/core/netdev_max_backlog echo «20000» > /proc/sys/net/core/somaxconn
От syn_flooda iptables -N syn_flood iptables -A INPUT -p tcp –syn -j syn_flood iptables -A syn_flood -m limit –limit 500/s –limit-burst 2000 -j RETURN iptables -A syn_flood -j DROP
Еще полезные фичи: iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP iptables -A INPUT -p tcp –tcp-flags SYN,RST SYN,RST -j DROP iptables -A INPUT -p tcp –tcp-flags FIN,RST FIN,RST -j DROP iptables -A INPUT -p tcp –tcp-flags ACK,FIN FIN -j DROP iptables -A INPUT -p tcp –tcp-flags ACK,PSH PSH -j DROP iptables -A INPUT -p tcp –tcp-flags ACK,URG URG -j DROP
После сохраняете iptables-save
Настройка от нагрузки файлов nginx.conf, sysctl.conf /etc/nginx/nginx.conf /etc/sysctl.conf
В файл sysctl.conf, в конец файла, пишите это строки, сервер после перезагружаете
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.ip_forward = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.core.rmem_max = 996777216 net.core.wmem_max = 996777216 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_mem= 786432 1048576 996777216 net.ipv4.tcp_wmem = 4096 87380 4194304 net.ipv4.tcp_max_orphans = 2255360 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_max_syn_backlog = 4046 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=10 net.ipv4.tcp_keepalive_probes=5 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 494967295 kernel.shmall = 268435456 net.core.somaxconn= 16096
Находите в файле nginx.conf строчки, и меняете на:
worker_rlimit_nofile 100000; worker_connections 65000; gzip_comp_level 7; gzip_buffers 8 64k;
File cache settings
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
http { # Main settings sendfile on; tcp_nopush on; tcp_nodelay on; client_header_timeout 10; client_body_timeout 10; client_header_buffer_size 1k; client_body_buffer_size 1k; client_max_body_size 10k; large_client_header_buffers 2 1k; send_timeout 10; keepalive_timeout 5 5; reset_timedout_connection on; server_tokens off; server_name_in_redirect off; server_names_hash_max_size 512; server_names_hash_bucket_size 512; limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:5m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:5m rate=5r/s;
server {
limit_conn conn_limit_per_ip 5;
limit_req zone=req_limit_per_ip burst=5 nodelay;
}
Так DOS флуд GET запросов c разных ip, прокси останавливается, трафик в 3-5мб/cек падает, проц не грузится на 100%, сервер, сайт не упадет.
PS. Вдруг кто столкнется с похожей проблемой и не сможете решить сами, пишите в лс в телегу @KrolikQ