• Linu性能调优:面对DDOS攻击,我们如何缓解局面?


    1、看现象,例如访问连接超时

    1. # --connect-timeout表示连接超时时间
    2. # -w 设置完成后输出的格式
    3. $ curl -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null --connect-timeout 10 http://192.168.0.30
    4. ...
    5. Http code: 000
    6. Total time:10.001s
    7. curl: (28) Connection timed out after 10000 milliseconds

    2、检查网络状况

    1. # -n 网络统计
    2. # DEV 网卡 1(代表第一个网卡)
    3. $ sar -n DEV 1
    4. 08:55:49 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
    5. 08:55:50 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    6. 08:55:50 eth0 22274.00 629.00 1174.64 37.78 0.00 0.00 0.00 0.02
    7. 08:55:50 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

    3、利用tcpdump抓包

    1. # -i eth0 只抓取eth0网卡,-n不解析协议名和主机名
    2. # tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
    3. $ tcpdump -i eth0 -n tcp port 80
    4. 09:15:48.287047 IP 192.168.0.2.27095 > 192.168.0.30: Flags [S], seq 1288268370, win 512, length 0
    5. 09:15:48.287050 IP 192.168.0.2.27131 > 192.168.0.30: Flags [S], seq 2084255254, win 512, length 0
    6. 09:15:48.287052 IP 192.168.0.2.27116 > 192.168.0.30: Flags [S], seq 677393791, win 512, length 0
    7. 09:15:48.287055 IP 192.168.0.2.27141 > 192.168.0.30: Flags [S], seq 1276451587, win 512, length 0
    8. 09:15:48.287068 IP 192.168.0.2.27154 > 192.168.0.30: Flags [S], seq 1851495339, win 512, length 0
    9. ...

    3、利用netstat查看TCP连接状态

    1. # -n表示不解析名字,-p表示显示连接所属进程
    2. $ netstat -n -p | grep SYN_REC
    3. tcp 0 0 192.168.0.30:80 192.168.0.2:12503 SYN_RECV -
    4. tcp 0 0 192.168.0.30:80 192.168.0.2:13502 SYN_RECV -
    5. tcp 0 0 192.168.0.30:80 192.168.0.2:15256 SYN_RECV -
    6. tcp 0 0 192.168.0.30:80 192.168.0.2:18117 SYN_RECV -
    7. ...

    4、统计TCP连接数量

    1. $ netstat -n -p | grep SYN_REC | wc -l
    2. 193

    5、找到攻击源以后,使用防火墙策略,干掉它(缓解途径一)

    $ iptables -I INPUT -s 192.168.0.2 -p tcp -j REJECT

    6、限制TCP发送SYN包的速率(缓解途径二)

    1. # 限制syn并发数为每秒1次
    2. $ iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
    3. # 限制单个IP在60秒新建立的连接数为10
    4. $ iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT

    7、由于目标主机一直无法收到源主机的TCP确认包,导致超时,所以需要增大半开状态连接数量,放置终端无法连接主机,默认是256(缓解途径三)

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

    8、由于目标主机等不到源主机的ACK确认包,导致超时,但内核还会自动重试建立连接,默认的重试次数是5次,优化成1次。(缓解途径四)

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

    9、TCP SYN Cookies 也是一种专门防御 SYN Flood 攻击的方法,开启SYN Cookies后,就不需要维护半开连接状态了,进而也就没有了半连接数的限制。注意,开启TCP syncookies,内核 net.ipv4.tcp_max_syn-backlog也就无效了。(缓解途径五)

            9.1 临时开启

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

            9.2 为了保证配置持久化,你还应该把这些配置,写入 /etc/sysctl.conf 文件中,执行 sysctl -p 命令后,才会动态生效。

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

  • 相关阅读:
    vue-cli搭建uniapp项目过程及踩坑记录
    vue.js毕业设计,基于vue.js前后端分离图书购物商城系统(H5移动项目) 开题报告
    vue实现搜索文字高亮功能
    MobileViT v3论文超详细解读(翻译+精读)
    移动端App应用
    UE4插件 - 编辑器工具栏按钮
    (十四)Spring之回顾代理模式
    C语言 Cortex-A7核 SPI 实验
    高通Android 12/13 设置和获取ADB状态
    vue.js毕业设计,基于vue.js前后端分离在线小说电子书阅读小程序系统 开题报告
  • 原文地址:https://blog.csdn.net/qq_39507436/article/details/125911239