SYN Flood攻击
在说SYN Flood攻击之前先说一下SYN超时重试
SYN超时重试
这个指的是server端接收到client发出的SYN后回复了SYN-ACK但是client掉线了,server端没有接收到client传回来的ACK,这时,server端会重发SYN-ACK,默认重发5次,重试的间隔从1s开始指数递增,时间间隔分别为1s、2s、4s、8s、16s,在第五次发送后需要等待32s才知道第五次也超时了,所以一共需要63s后server端才会断开这个TCP连接
SYN Flood
SYN Flood攻击就是利用的SYN超时重试的机制,给server端发送一个SYN之后就断掉,server端需要等待63s才会断开连接,这样可以将服务器的syn连接的队列耗尽,导致正常请求无法进行连接
那么如何防止呢?
linux提供了一个tcp_syncookies的参数,作用是当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造一个特别的Sequence Number发回去,如果是攻击者,则不会响应,如果是正常连接,则会把这个SYN Cookie发回来,然后服务端可以通过cookie建立连接,即使该连接不在SYN队列中
还有三个参数也是用来调整这个问题的
- tcp_synack_retries 设置重试次数,可以减少重试次数
- tcp_max_syn_backlog 设置syn连接数,可以增大syn连接数
- tcp_abort_on_overflow 处理不过来的话就直接拒绝连接