正文
今天早上一起床,就上服务器看了下,猛然发现CPU飙升99%,排查了一会,发现是被cc攻击了,网络连接里出现大量syn连接,占用了所有的资源,导致前端无法打开网站,经过许久我终于找到了解决方案,屏蔽syn的连接,这样可以隔绝大部分攻击,下面分享一下我的思路。
解决方案
SYN攻击是利用 TCP/IP 协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。
在SSH用命令 sysctl -a | grep syn
可以看到
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog
是SYN队列的长度, tcp_syncookies
是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击,tcp_synack_retries
和 tcp_syn_retries
定义SYN 的重试次数。
加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分SYN攻击,降低重试次数也有一定效果。
推荐值:
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3
到此,就能隔绝syn连接带来的cc攻击了。