当前位置: 代码迷 >> 综合 >> Linux性能优化实战 39 :怎么缓解 DDoS 攻击带来的性能下降问题?
  详细解决方案

Linux性能优化实战 39 :怎么缓解 DDoS 攻击带来的性能下降问题?

热度:85   发布时间:2023-12-21 15:24:37.0

一、模拟DDOS攻击

      运行 hping3 命令

      

       如果现象不明显,那么把参数里面的 u10 调小,或者加上–flood 选项;

 

二、确认DDOS攻击

1. 执行命令变慢,正常客户端的连接超时了,并没有收到 Nginx 服务的响应。

2. sar命令查看网络收发状况

  接收的 PPS 已经达到了 20000 多,但是 BPS 却只有 1174 kB,这样每个包的大小就只有54B(1174*1024/22274=54)。

  这明显就是个小包了

3. tcpdump 抓包极客时间

Flags [S] 表示这是一个 SYN 包。大量的 SYN 包表明,这是一个 SYN Flood 攻击。

 

三、缓解DDOS

1.  封IP

(1) DDOS是客户端发送了SYN包,但不发送ACK包。这时服务端处于SYN_RECEIVED 状态。

(2) 用 netstat 命令查看

    

    确认IP是192.168.0.2

(3) 使用iptables限制IP

 

2. 限制SYN并发和连接数

     SYN Flood 攻击中的源 IP 并不是固定的。比如,可以在 hping3 命令中,加入 --rand-source 选项,来随机化源 IP。这时上面1的方法就不适用了。

    这时可使用下面的方法来限制syn 包的速率:

    # 限制 syn 并发数为每秒 1 次
    $ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

    # 限制单个 IP 在 60 秒新建立的连接数为 10
    $ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT


3. 加大半连接容量

    如果是多台机器同时发送 SYN Flood,这种方法就无效了。

    这时可使用下面的方法:

(1) 加大半连接容量,从256改成1024

$ sysctl -w net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog = 1024

(2) 减少重试次数,从5改为1

$ sysctl -w net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_synack_retries = 1
 

4. 直接不维护半连接队列

如果情况继续严重,就开启 SYN Cookies ,不需要维护半开连接状态了

$ sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1

为了保证配置持久化,你还应该把这些配置,写入 /etc/sysctl.conf 文件中。

$ cat /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_syn_backlog = 1024

 

5. 外围设备的防护措施

购置专业的入侵检测和防御设备,配置流量清洗设备阻断恶意流量等。