Linux 系统遭遇DDOS攻击,如何进行缓解

计算操作系统技术服务知识库
问题描述

当Linux系统遭遇轻型DDOS攻击后,如何在主机层面进行缓解

问题分析

可以使用iptables丢掉相关包、限制syn包速率、SYN Cookies来缓解轻型DDOS攻击。

解决方案

关于如何排查DOS,您可以参考此文档。 1、使用netstat 查看SYN_RECEIVED 状态的连接,如下:

root@iv-ybmpz656q12udbnkjbmr:~# netstat -n -p | grep SYN_RECV
tcp        0      0 192.168.128.128:80      192.168.0.182:26619     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26611     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26605     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26614     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26615     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26622     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26623     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26624     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26620     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26626     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26616     SYN_RECV    -                   
tcp        0      0 192.168.128.128:80      192.168.0.182:26617     SYN_RECV    -                   
......

从输出结果中,可以发现大量 SYN_RECV 状态的连接,并可以看到其Ip。 我们可再通过wc来统计所有SYN_RECV装填的连接数,如下:

root@iv-ybmpz656q12udbnkjbmr:~# netstat -n -p | grep SYN_RECV | wc -l
179

2、上面找到了源IP后,可以使用iptables丢掉相关的包,如下:

root@iv-ybmpz656q12udbnkjbmr:~# iptables -I INPUT -s 192.168.0.182 -p tcp -j REJECT

查看iptables配置,如下: 图片 然后再通过netstat进行查看,如下:

root@iv-ybmpz656q12udbnkjbmr:~# netstat -n -p | grep SYN_RECV
root@iv-ybmpz656q12udbnkjbmr:~# 

可以发现特定IP的SYN_RECV状态的连接已经被丢弃。 3、当源IP很多的时候,使用iptables进行拒绝可能会很麻烦,此时可以通过限制syn包的速率来进行缓解。

限制syn并发数为每秒2次
root@:~# iptables -A INPUT -p tcp --syn -m limit --limit 2/s -j ACCEPT

限制单个IP60秒新建立的连接数为20
root@:~# iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 20 -j REJECT

我们通过限制速率来缓解了DDOS的攻击。 **4、上述方法都是在可以登录到机器的前提下,如果已经无法登录到机器,那上述方法便无效,所以我们应提前做一些优化。 ** 将半连接数量调大,如下:

root@:~# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
net.ipv4.tcp_max_syn_backlog = 1024

将连接SYN_RECV失败的自动重试次数调小,如下:

root@:~# sysctl -w net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_synack_retries = 1

开启SYN Cookies,如下:

root@:~# sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1

需要注意:

1、通过sysctl 命令修改的配置都是临时的,重启后这些配置就会丢失。为了保证配置持久化,应该把这些配置,写入 /etc/sysctl.conf 文件中。 2、以上方法为主机层面缓解DDOS方法,并不是解决DDOS方法。 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论