• 个人理解TCP中SYN Cookie


      说起SYN Cookie还是得从TCP3次握手开始说起,先给出计网的体系结构图

     然后解释一下SYN,seq,ack,ACK的相关名词

    SYN(建立连接) ACK(确认后全部为1) PSH(传送) FIN(结束) RST(重置) URG(紧急)

    产生SYN Flood(一种dos攻击方式):在建立三次握手的情况时,第二、三次握手,双方分别分配缓存和变量供建立连接使用,如此在第一次握手时,如果攻击者不断发送TCP SYN包给服务器,那么就会造成服务器很大的系统开销进而导致系统不能正常工作

    解决方法:(SYN Cookie):就是在服务器端第一次收到客户端的SYN包时不分配数据区,而是由seq计算一个Cookie值附带到SYN Ack的初始序列号(在第二次握手的包中)中,下一次(即第三次握手)时如果序列号=初始序列+1(这里说明一下,第一次客户端seq是个随机数,服务器收到后也发送seq随机数,但是ack却是客户端的seq+1值,同理客户端也是这样,客户端的ack是服务器的seq+1),就分配资源.  简单来说就是发送给客户端,返回消息检查后才分配资源,而之前是一来就分配好了

    细化SYN Cookie实现过程:

     1 实现的关键在于cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。
     2 
     3 
     4 cookie的计算:
     5 
     6 
     7 服务器收到一个SYN包,计算一个消息摘要mac。
     8 
     9 
    10 mac = MAC(A, k);
    11 
    12 
    13 MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。
    14 
    15 
    16 在Linux实现中,MAC函数为SHA1。
    17 
    18 
    19 A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND
    20 
    21 
    22 k为服务器独有的密钥,实际上是一组随机数。
    23 
    24 
    25 t为系统启动时间,每60秒加1。
    26 
    27 
    28 MSSIND为MSS对应的索引。
  • 相关阅读:
    基于python创建一个简单的HTTP-WEB服务器
    基于python自动化测试平台与虚拟化技术结合的思考
    Net分布式系统之六:微服务之API网关
    Net分布式系统之五:C#使用Redis集群缓存
    Net分布式系统之二:CentOS系统搭建Nginx负载均衡
    Net分布式系统之一:系统整体框架介绍
    .Net微服务架构之运行日志分析系统
    Net分布式系统之七:日志采集系统(1)
    程序员如何选择未来的职业路线
    NET技术公众号已上线
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/11482477.html
Copyright © 2020-2023  润新知