微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SYN flood 上的高 CPU 负载

如何解决SYN flood 上的高 CPU 负载

当受到 SYN Flood 攻击时,我的 cpu 通过名为 ksoftirqd 的内核进程立即达到 100%, 我尝试了很多缓解措施,但都没有解决问题。

这是sysctl -p返回的我的sysctl配置:

net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
fs.file-max = 10000000
fs.nr_open = 10000000
net.core.somaxconn = 128
net.core.netdev_max_backlog = 2500
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_tw_reuse = 1
net.netfilter.nf_conntrack_max = 10485760
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 15
vm.swappiness = 10
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_synack_retries = 1

即使在激活 Syn cookie 后,cpu 仍保持不变, 443 端口(被攻击端口)的监听队列显示 512 SYN_RECV,这是 Nginx 设置的认积压限制。

哪个也是连线的,因为 SOMAXCONN 被设置为比 512 (128) 低得多的值,那么它是如何超过这个限制的呢? SOMAXCONN 需要是每个套接字监听的上限,而不是..

我读了这么多,我很困惑, 据我了解,SOMAXCONN 是 LISTEN 和 ACECPT 队列的积压大小, 那么tcp_max_syn_backlog究竟是什么? 以及如何计算每个队列的大小?

我还读到 SYN cookie 不会立即激活,而是只有在达到 tcp_max_syn_backlog 大小后才会激活,这是真的吗? 如果是这样,则意味着它的值需要低于 SOMAXCONN..

我什至尝试在受到攻击时激活 tcp_abort_on_overflow 但没有任何改变, 如果 SYN coockies 在溢出时被激活,那么将它们一起应用会产生什么结果?

我有 3 场内存只使用了 700MB,我唯一的问题是 cpu 负载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。