zoukankan      html  css  js  c++  java
  • SYN Flood 防范


    简介:

    SYN Flood 是 DoS( 拒绝服务攻击 )与 DDoS( 分布式拒绝服务攻击 )的方式之一,这是一种利用 TCP 协议缺陷,发送大量伪造 TCP

    连接请求,从而使得服务器资源耗尽( CPU 满负载或内存不足 )的攻击方式。

    TCP 三次握手:

    1、客户端发送一个包含 SYN 标志的 TCP 报文到服务端,报文指明客户端使用的端口及 TCP 连接的初始序列号。

    2、服务器在收到客户端的 SYN 报文后,将返回一个 SYN+ACK 报文,表示接受请求,同时 TCP 序列号加一,ACK确认。

    3、客户端收到后,返回一个确认报文 ACK 给服务器,同时 TCP 序列号加一,到此建立连接完成。

      SYN Flood :

          当客户端将 TCP 连接请求发给服务器后,自己死机或掉线无法收到服务器发回的 SYN+ACK 应答报文,这时服务器会隔一段时间去重新发送

          应答报文,重试次数上限后,如果客户端还没有响应,即丢弃这个未完成的连接。如果恶意的模拟这种情况,服务器将使用很多资源去维护这个

          半连接表,还需去重试这些恶意的半连接请求,从而对正常的访问请求失去响应或变的非常缓慢,这就是 SYN Flood 攻击。( TCP 洪水攻击 )

      如何确认是否为 SYN Flood 攻击:

          通常情况,服务器负荷突然升高甚至失去响应,使用 netstat -ant 可以看到大量的 SYN_RCVD 的半连接,数量大于 500 或超过总连接数的

          10% ,系统日志 messages 中有 SYN Flooding 字样等,则可认定为遭到 SYN Flood 攻击。

    防范一、更改内核参数(只能有效降低)、临时封源 IP 地址

    net.ipv4.tcp_synack_retries = 0 ( 默认 5

        ## TCP 连接三次握手中第二次握手请求次数,每次等待 30 ~ 40 秒,如果对方没有回应第三个握手包(ACK),即:重试。

        面临 SYN Flood 即 TCP 洪水攻击时,可以将此参数改为 0 ,即:回应第二个握手包给客户端后,如果收不到客户端回应的第三个握手包,

        不进行重试,加快半开连接的回收,防止系统资源被耗尽。弊端:当网络状态很差时,有可能客户端没有收到服务器发出的第二个握手包,那

        么连接服务器可能会失败。但是问题并不大,客户端也有第一次握手重试次数。

    net.ipv4.tcp_syncookies = 1 ( 默认 0

        ## 开启 SYN Cookies ,当半连接队列溢出时,向请求连接的 IP 分配 Cookies ,短时间内连续收到某 IP 的重复 SYN 报文,即认为受到攻击,

        之后收到此 IP 地址来的包都会被丢弃,可阻止少量 SYN 攻击。

    net.ipv4.tcp_max_syn_backlog = 2048

        ## SYN 队列长度,可容纳更多的半连接数,最大限度接受客户端请求。(这个取值范围没弄明白,现在是按一倍内存取的)

        netstat -ant | grep 'SYN_RECV' > SYN.txt 分析 IP 地址,使用 iptables 干掉它。

    防范二、使用硬件防火墙来抵挡(成本高)

        可以让客户端先跟硬防建立 TCP 连接,连接成功后才转发到后端服务器。

  • 相关阅读:
    python2.7 pip
    opencv
    运维url收集
    转 string和byte[]的转换 (C#)
    Thrift
    Oracle AWR
    并发编程
    LED相关
    java mail 使用 gmail smtp 发送邮件
    jquery动画总结
  • 原文地址:https://www.cnblogs.com/wangxiaoqiangs/p/5639878.html
Copyright © 2011-2022 走看看