zoukankan      html  css  js  c++  java
  • SYN-Flood防御方法之一Synproxy

    SYN-Flood攻击:

           攻击者发送大量的SYN给服务器. 服务器必须针对每一个SYN请求回送一个SYN-ACK 应答包,此时服务器就必须保持一条半开放的连接,直到接收到一个对应的ACK应答包为止. 保持如此数目巨大的半开放连接,将会持续消耗掉服务器的资源,直到资源枯竭

    什么是SYN-PROXY?

    SYNPROXY是一个TCP握手代理,该代理截获TCP连接建立的请求,它可以保证只有与自己完成整个TCP握手(该握手过程非常轻量级,采用Syncookie机制,不会涉及任何关于socket的逻辑)的连接才被认为是正常的连接,此时才会由代理真正发起与真实服务器的TCP连接

    SYN-PROXY作用:

     主要用SYN-PROXY来进行防御SYN-Flood 攻击。

    Syncookie机制:

    当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。在SYN cookies中,根据客服端发来的SYN包计算出一个cookie值。这个cookie作为将要返回的SYN ACK包的初始序列号。当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,否则被认为是SYN-Flood攻击

    关键部分是cookie的计算,cookie的计算应该包含本次连接的状态信息,使攻击者不能伪造。

    cookie的计算:

    服务器收到一个SYN包,计算一个消息摘要mac。

    mac = MAC(A, k);         

    MAC是密码学中的一个消息认证码函数,也就是满足某种安全性质的带密钥的hash函数,它能够提供cookie计算中需要的安全性。

    在Linux实现中,MAC函数为SHA1。

    A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t || MSSIND

    k为服务器独有的密钥,实际上是一组随机数。

    t为系统启动时间,每60秒加1。

    MSSIND为MSS对应的索引。

    SYN-PROXY原理:

          图中红线部分是由代理模拟发出的

         上图流程

    • 1: Client 与 Proxy 三次握手
    • 2: Proxy 与 Server 三次握手
    • 3:Client与Server之间传输数据
    • 利用 Syn Cookie 原理,实现对非 Syn 包有 Cookie 检测,不符合Cookie算法数据包直接丢弃
    • 只有在 Client 与 Proxy 三次握手之后才会与 Server 连接,实现了对Syn Flood的防御
  • 相关阅读:
    PHP unicode与普通字符串的相互转化
    PHP 日期之间所有日期
    PHP Excel导入日期单元格处理
    JS base64文件转化blob文件
    Mvc 刷新PartialView
    WebGL绘制变幻光斑
    WebGL笔记(四):初步封装
    WebGL笔记(目录)
    [JavaScript/canvas] 创建基于坐标访问的图形数据对象
    WebGL笔记(五):封装顶点和颜色等数组数据(二)
  • 原文地址:https://www.cnblogs.com/dapingguo/p/10457696.html
Copyright © 2011-2022 走看看