如何抵御频发的 DDOS 攻击?

2016年5月,不法黑客针对全球范围内的多家银行网站发动了一系列的DDoS攻击 。导致约旦、韩国以及摩纳哥等央行网络系统陷入了半小时的瘫痪状态,无法进行正常工作 。
2016年11月,俄罗斯五家主流银行遭遇长达两天的DDoS攻击 。来自30个国家2.4万台计算机构成的僵尸网络持续不断发动强大的DDOS攻击 。
2017年4月初,江苏省某网络公司服务器频繁遭到DDoS流量攻击,导致挂载在服务器上的多个网站无法正常运营,损失严重 。
2018年3月,Github遭受了迄今为止记录的最大的DDoS攻击 。攻击者通过公共互联网发送小字节的基于UDP的数据包请求到配置错误的memcached服务器,作为回应,memcached服务器通过向Github发送大量不成比例的响应,形成巨大规模的DDoS攻击 。
2019年9月初,北京市公安局网络安全保卫总队以及一个加密种子(如系统启动时间),计算出一个哈希值(SHA1) , 这个哈希值称为 cookie 。
这个 cookie 就被用作序列号,来应答 SYN+ACK 包 , 并释放连接状态 。当客户端发送完三次握手的最后一次 ACK 后 , 服务器就会再次计算这个哈希值,确认是上次返回的 SYN+ACK 的返回包,才会进入 TCP 的连接状态 。因而,开启 SYN Cookies 后,就不需要维护半开连接状态了,进而也就没有了半连接数的限制 。
注意开启 TCP syncookies 后 , 内核选项 net.ipv4.tcp_max_syn_backlog 也就无效了 。可以通过下面的方式开启:
$ sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1
优化网络相关的内核参数
当遭遇攻击时 , 请求数会较大,你可能会看到大量处于TIME. WAIT状态的连接 。
linux查看tcp的状态命令:
netstat -nat查看TCP各个状态的数量;
lsof -i:port可以检测到打开套接字的状况;
sar -n SOCK查看tcp创建的连接数;
tcpdump -iany tcp port 6000对tcp端口为6000的进行抓包 。
[root@centos ~]
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.10.58:22 13.136.182.140:23107 TIME_WAIT
tcp 0 48 192.168.10.58:22 13.136.182.140:61282 TIME_WAIT
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
TCP状态及其描述:
状态描述LISTEN等待来自远程TCP应用程序的请求SYN_SENT发送连接请求后等待来自远程端点的确认 。TCP第一次握手后客户端所处的状态SYN-RECEIVED该端点已经接收到连接请求并发送确认 。该端点正在等待最终确认 。TCP第二次握手后服务端所处的状态ESTABLISHED代表连接已经建立起来了 。这是连接数据传输阶段的正常状态FIN_WAIT_1等待来自远程TCP的终止连接请求或终止请求的确认FIN_WAIT_2在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求CLOSE_WAIT该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求CLOSING等待来自远程TCP的连接终止请求确认LAST_ACK等待先前发送到远程TCP的连接终止请求的确认TIME_WAIT等待足够的时间来确保远程TCP接收到其连接终止请求的确认它们会占用大量内存和端口资源 。这时,我们可以优化与TIME_ WAIT状态相关的内核选项,比如采取下面几种措施:
增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets,并增大连接跟踪表的大小net.netfilter.nf_conntrack_max 。
减小 net.ipv4.tcp_fin_timeout和net.netfilter.nf_conntrack_tcp_timeout_time_wait,让系统尽快释放它们所占用的资源 。
开启端口复用 net.ipv4.tcp_tw_reuse 。这样,被TIME_WAIT状态占用的端口,还能用到新建的连接中 。
增大本地端口的范围 net.ipv4.ip_local_port_range 。这样就可以支持更多连接,提高整体的并发能力 。
增加最大文件描述符的数量 。你可以使用fs.nr_open和fs.file-max,分别增大进程和系统的最大文件描述符数;或在应用程序的systemd配置文件中,配置LimitNOFILE,设置应用程序的最大文件描述符数 。
通过专业的流量清洗系统来防范DDOS攻击
流量清洗服务是一种针对对其发起的DOS/DDOS攻击的监控、告警和防护的一种网络安全服务 。在不影响正常业务的前提下 , 清洗掉异常流量 。它会分析和过滤异常流量,将异常的攻击流量阻挡在门外,从而为正常的请求提供服务 。
一般这类系统由专门的服务商提供,大多数会提供10 Gpbs~100Gpbs 的防护能力 。
【如何抵御频发的 DDOS 攻击?】以上就是朝夕生活(www.30zx.com)关于“如何抵御频发的 DDOS 攻击?”的详细内容 , 希望对大家有所帮助!

猜你喜欢