书接上回,在服务端没有及时收到客户端三次握手的ACK报文,或者客户端永远不会回复ACK(SYN Flood攻击手段)之后,会发生什么,我们该如何应对
上篇回顾:面试八股(11) 字节真题,关于TCP半连接与全连接队列的所有面试题
往期一线大厂面试真题
大厂面试必问:CPU使用率100%怎么办?运维高手这样回答!
字节面试真题–用户反馈网页访问慢,可能会有哪些原因
字节面试真题–TCP建立连接为什么要三次握手?为什么不是两次或者四次?
面试八股(五) TCP的三次握手与四次挥手过程【是详述可不是简单几句话哦】
面试八股(六) 腾讯面试真题:close_wait状态的原因是什么?该怎么办?
面试八股(七) TCP Keepalive和HTTP Keep-Alive有什么区别?
面试八股(八) Linux服务器拔网线或者断电,已建立的TCP连接会中断吗?
面试八股(九) 关于TCP TIME_WAIT状态的所有面试题都在这里了
面试八股(11) 字节真题,关于TCP半连接与全连接队列的所有面试题
面试八股(12) 大厂真题,你了解synflood攻击吗?该如何应对
服务端处于TCP TIME_WAIT状态的连接,客户端重用这个连接还能连上吗?
一、Synflood攻击原理
如下图,客户端发送SYN包给服务端之后,就不再响应服务端发来的SYN+ACK
报文,那半连接队列中的连接就无法转移到全连接队列,半连接队列溢出,那后续正常的连接也就无法进来。
这就是我们所说的synflood
攻击,也是比较常见的DDOS
攻击手段
二、SYN Flood攻击的应对策略
- 网络入口接高防设备(一种DDOS流量清洗设备,会过滤攻击请求,将正常请求放行)
- 降低syn+ack的重传次数(默认是两次,对于大流量时攻击效果不明显):
sysctl -w net.ipv4.tcp_synack_retries=1
- 开启
syncookies
:sysctl -w net.ipv4.tcp_syncookies=1
- TCP代理场景下(LVS代理场景)开启synproxy
三、SYN Cookies的工作原理
SYN Cookies的核心思想时在不分配任何资源的情况下完成SYN握手。
服务端在接收到SYN包后,会根据当前状态(已建立的连接数、序列号、时间戳等信息)计算一个cookie值,放入到SYN+ACK数据包中,发送给客户端。
在接收到客户端的ACK报文之后,会取出cookie值,进行验证,验证成功之后才会建立连接
syncookies内核参数有三个可选值:
- 0 :表示关闭syncookies
- 1 :表示仅当SYN半连接溢出才会启用【默认值】
- 2 :表示默认开启
四、Syn proxy
Synproxy的常用于在TCP的代理层。正常逻辑是TCP代理设备会直接转发SYN包给后端服务器,Synproxy的机制,TCP代理会先于客户端进行三次握手,直到收到客户端发来的ACK报文之后,才会模拟客户端的SYN报文,同Server建立连接。
在Linux 3.13的内核中也默认支持了SYNPROXY的能力,它基于netfilter framework 和 connection tracking 模块实现。
实验测试提示:
# 服务端配置
iptables -t raw -A PREROUTING -i ens33 -p tcp --dport 8080 --syn -j NOTRACK
iptables -A INPUT -i ens33 -p tcp --dport 8080 -m state --state UNTRACKED,INVALID -j SYNPROXY --sack-perm --timestamp --mss 1480 --wscale 7 --ecn
echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
客户端发包:
# -S 指定SYN包
# -p 指定测试端口
# --flood 以泛红方式发包
# IP地址是我可测试环境的IP
hping3 -S -p 8080 --flood 192.168.162.134
测试观测
在上边的iptables规则添加与不添加的情况下,观测SYN_RECV的多少,以及观测是否有SYN包丢弃
# SYN_RECV的数量
netstat -anpt |grep SYN_RECV | wc -l
# 观测是否有SYN包丢弃
netstat -s |grep -i 'syns to listen sockets dropped'
五、写在最后
关于TCP相关的面试题我整理大厂的高频内容,如下,如果您最近也准备找工作,关注我哦。
此外,我还整理了关于SRE, 运维的大量面试真题(带答案),关注我的公众号:Linux运维实战派,回复“面试题” 免费领取。