计算机系统应用教程网站

网站首页 > 技术文章 正文

TCP协议与TCP SYN Flood 攻击

btikc 2024-09-02 16:47:34 技术文章 18 ℃ 0 评论

传输层(transport layer)的作用

完成端到端的信息传输

传输层常用的协议

tcp(Transmission Control Protocol ) , udp

tcp协议

tcp协议头

tcp 协议三次握手

  1. 客户端将SYN标志位置为1,并发送一个随机序列号A,然后进入SYN-SEND状态。
  2. 服务器端发送SYN和ACK标志位,并发送一个随机序列号B和一个ACK序列号A+1到客户端,然后进入SYN-RECEIVED状态
  3. 客户端发送ACK标志位到服务器端,并发送一个序列号B+1,客户端进入ESTABLISH状态,服务器端收到确认后也进入ESTABLISH状态

SYN—SEND:客户端在发送完连接请求后,等待对方的连接请求

SYN—RECEIVED:服务器端在收到SYN请求后,发送一个ACK确认信息和一个SYN请求信息,等待客户端确认

ESTABLISH:可以进行数据传输的状态

tcp 协议四次挥手

  1. 发送端发送FIN数据包,请求接收端断开连接,发送端进入FIN-WAIT1状态
  2. 接收端接收FIN数据包后,发送ACK数据包,进入CLOSE-WAIT状态,再发送FIN数据包,进入LAST—ACK状态
  3. 发送端接收到ACK包后进入FIN-WAIT2状态,发送端接收到FIN包后进入TIME-WAIT状态
  4. 发送端等待2MSL后进入CLOSED状态,接收端接收到发送端的ACK确认后进入CLOSED状态

FIN-WAIT1:等待一个结束请求或者一个前面发送的结束请求的确认

CLOSE-WAIT:等待本地发送中断请求FIN

LAST-ACK:等待先前发送的FIN信息的确认信息

FIN-WAIT2:等待对端发送的中断请求

TIME-WAIT:等待足够的时间确保对端能收到FIN的确认信息

MSL(Maximum Segment Lifetime):保证服务器端收到ack数据包

常见TCP攻击方式

syn 洪水攻击

客户机向服务器发送SYN数据包,并伪造源IP地址,服务器在收到SYN数据包时,会将连接加入SYN QUEUE,并向源IP发送SYN-ACK数据包,并等待ACK数据包,以完成三次握手建立连接。 由于源IP地址是伪造的不存在主机IP,所以服务器无法收到ACK数据包,并会不断重发,同时SYN QUEUE队列被不断被攻击的SYN连接占满,导致无法处理正常的连接 并在服务器端出现大量的SYN-RECEIVED状态

此时服务器端的syslog会报错

kernel: [3649830.269068] TCP: Possible SYN flooding on port 9999. Sending cookies. 

解决办法:

  • 内核级方法: 开启服务器syn-cookies 减少SYN-ACK数据包的重发次数 增加SYN QUEUE 队列
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
#开启syncookies,其作用是检查客户端能否收到服务器端的ACK包,如果无法收到则舍弃客户端的syn包
net.core.somaxconn = 10240
#The maximum number of connections that can be queued for acceptance
net.ipv4.tcp_max_syn_backlog = 8192
# ?How many half-open connections for which the client has not yet sent an ACK response can be kept in the queue 
net.core.netdev_max_backlog =  8192
#The maximum number of packets in the receive queue that passed through the network interface and are waiting to be processed by the kernel.
net.ipv4.tcp_syn_retries=3 
#设置ACK重传次数为3,默认为5

参考:https://serverfault.com/questions/875035/sane-value-for-net-ipv4-tcp-max-syn-backlog-in-sysctl-conf

  • 脚本方法封禁IP,详情请查看DDoS deflate使用
下载DDoS deflate安装脚本,并执行安装。
[root@t ~]# wget http://www.inetbase.com/scripts/ddos/install.sh
[root@t ~]# chmod 0700 install.sh
[root@t ~]# ./install.sh
  • 防火墙方法
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s
#限制单个IP每秒syn并发
  • 硬件防火墙方法

硬件防火墙可设置

  • 购买高防服务器

在各大云上均有卖

  • 提高自己的服务器数量

当服务器吞吐能力大于攻击能力时,就防御了攻击(钱多的企业可以搞)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表