长衫大佬可以坐下来,听听我讲(tree)故(new)事(bee):

【DDoS】TCP DDoS攻击防范

作者

今年中秋节那天去北京,这篇文章写于火车上。

TCP DDoS分类?什么是TCP?什么是TCP DDoS?

这个话题有点久远,现在我们已经很少听到TCP DDoS了,因为现代传统防火墙已经完全可以防御TCP层的DDoS攻击了,当然,你一定知道SYN Flood攻击,通俗的说SYN Flood就是攻击者作为客户端发送大量的SYN报文,但是不发送ACK报文,消耗服务端的TCP连接队列,也就是消耗服务端的资源,消耗完了,服务端就无法新建TCP连接,导致服务端网站无法提供正常的服务。

再来抓包看看TCP连接的整个过程:

划重点,考试考序号,进阶的同学请掌握TCP/IP状态转换图。

//三次握手阶段
1.(c->s)syn seq=3126253162 ack=0
2.(s->c)syn,ack seq=1566394084 ack=3126253163
3.(c->s)ack seq=3126253162 ack=1566394085
//HTTP交互过程
4.(c->s)get /hackbiji.html seq=3126253163 ack=1566394085
5.(s->c)ack seq=1566394085 ack=3126253249 (249-163=86 TCP载荷长度 GET)
6.(s->c)200OK  seq=1566394085 ack=3126253249
7.(c->s)ack seq=3126253249 ack=1566394325 (325-085=240 TCP载荷长度 200OK)
//四次挥手阶段
8.(c->s)fin,ack syn=3126253249 ack=1566394325
9.(s->c)fin,ack syn=1566394325 ack=3126253250
10.(c->s)ack syn=3126253250 ack=1566394326

TCP首部大小20字节

你需要掌握的网络编程基础是什么?

IPv4套接字地址结构

struct in_addr{
  in_addr_t s_addr; // 32位无符号整型 网络序 IP地址
}
struct sockaddr_in{
  uint8_t sin_len; // 8位无符号整型
  sa_family_t sin_family; // 8或16位无符号整型 地址族
  in_port_t sin_port; // 16位无符号整型 端口号
  struct in_addr sin_addr; // IP地址
  char sin_zero[8];
}

通用套接字地址结构

struct sockaddr{
  uint8_t sa_len;
  sa_family_t sa_family;
  char sa_data[14];
}

通用套接字地址结构的唯一用途就是:

对指向特定于协议的套接字地址结构的指针执行类型强制转换

函数

int socket(int family,int type,int protocol);
返回:成功非负描述符 出错-1
参数1:AF_INET IPv4协议
参数2:SOCK_STREAM 字节流套接字
     SOCK_DGRAM 数据报套接字
     SOCK_RAW 原始套接字
参数3:IPPROTO_TCP TCP传输
     IPPROTO_UDP UDP传输

AFXXX和 的区别?其实他们的实现是一致的。

AF_表示地址族

PF_表示协议族

函数

int connect(int sockfd,const struct sockaddr* servaddr,socklen_t addrlen);
建立与TCP服务器的连接
返回:成功0 出错-1
参数1:socket函数返回的套接字描述符
参数2:指向一个套接字地址结构的指针
参数3:该地址结构的大小

bind函数

int bind(int sockfd,const struct sockaddr* myaddr,socklen_t addrlen);
把一个本地协议地址赋予一个套接字
返回:成功0 失败-1
参数1:socket函数返回的套接字描述符
参数2:指向一个特定于协议的地址结构的指针
参数3:该地址结构的大小

服务器在启动时绑定它们众所周知端口。

函数

int listen(int sockfd,int backlog);
TCP服务器调用,侦听连接
返回:成功0 失败-1
参数1:socket函数返回的套接字描述符
参数2:规定内核应该为相应的套接字排队的最大连接数

函数

int accept(int sockfd,struct sockaddr* cliaddr,socklen_t* addrlen);
返回:成功返回非负描述符 失败-1
TCP服务器调用,用于从已完成队列队头返回下一个已完成连接
参数1:socket函数返回的套接字描述符
参数2:出参客户进程的协议地址
参数3:出参该地址的大小

close函数

int close(int sockfd);
返回:成功0 失败-1
关闭套接字
参数1:套接字描述符

什么叫网络字节序?

其实就是大端存储

笔试/面试题:请编程判断系统是大端存储还是小端存储?

什么叫大端?

高字节在低位

什么叫小端?

高字节在高位

TCP伪造源IP的攻击的原始套接字是怎么实现的?

为了隐藏自己的攻击者身份,黑客们通常都会用虚假的源IP,里面的智慧只有玩过狼人杀游戏才会明白。如何伪装?请看我的这篇文章:SYN Flood隐藏源IP攻击

:SYN Flood隐藏源IP攻击

accept函数_函数ACCRINT_函数ACCT是什么意思

TCP反射型DDoS是什么?什么是代理?什么是反向代理?

什么是代理?

相信很多大佬都玩过VPN,用于科学上网或者逛逛暗网,VPN服务器就是代理。代理的特点就是对服务器而言,他不知道客户端是谁?比如我的VPN账号可以给我的朋友用,我朋友和我都在使用VPN访问谷歌,谷歌服务器不知道请求客户端是我还是我的朋友。

什么是反向代理?

你拨打10010,有联通客服接你电话,给你办事,你不管具体是谁给你办事,反正有人给你办事,10010就是反向代理。反向代理的特点就是对客户端来说,他不知道服务端是谁?10010有很多客服,你打电话的时候,并不知道哪一个客服接了你的电话?如果机会好的话,还会接到男客服的电话。

TCP反射型DDoS则是利用公网中的代理或反向代理服务器,黑客冒充代理服务器给目标服务器发送TCP报文accept函数,目标服务器将会应答攻击报文,并将应答报文发往代理服务器,代理服务器有完整的协议栈accept函数,自然会真实的应答目标服务器的TCP报文,导致他们2个掐架起来,攻击者躲在暗处开心

传统防火墙是如何防御TCP DDoS攻击的?


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注