问题描述
当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
限制单个IP在60秒新建立的连接数为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方法。 如果您有其他问题,欢迎您联系火山引擎技术支持服务