【黑客·DDoS系列】钟南山:对抗DDoS的5大手段!

冉椿林

共 5222字,需浏览 11分钟

 ·

2021-07-04 14:22

一、【暴力 | 有效】减少暴露端口

使用防火墙,或云服务器的安全组功能,配置端口访问黑白名单

尽量避免将非业务必须的服务端口暴露在公网上,从而避免与业务无关的请求和访问。通过配置防火墙或安全组可有效防止系统被扫描或者意外暴露。

3273db353b16375e96314e7988c65394.webp二、【云服务 | 花钱】增加带宽、服务器

短期内,如果没有很好的其他解决办法,可以通过氪金的方式,临时增加服务配置,短期提升抗压能力

1.通过负载均衡等方法,分摊攻击流量

架构更多服务器(一般云服务器有镜像复制功能,可快速复制构建),使用Nginx等将用户访问流量均衡分配到各个服务器上,降低单台服务器的压力,提升整体业务吞吐处理能力,可有效缓解一定流量范围内的DDoS攻击。

2.增加单台服务器配置

可短期弹性地增加单台服务器配置或带宽,保证DDoS攻击时间段内,服务的正常可用。

当然,一般来说,方案1更省钱一些!

三、【灵活 | 免费】防DDoS软件

1、使用Nginx,防HTTP DDoS攻击

以下模块,可根据需要,任选其N!

ngx_http_limit_req_module模块,限制每秒请求数

通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。

http {    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;  //触发条件,所有访问ip 限制每秒10个请求    server {        location  ~ \.php$ {                limit_req zone=one burst=5 nodelay;     //执行的动作,通过zone名字对应               }           }     }

参数说明:

$binary_remote_addr:二进制访问IPzone=one:10m:定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话rate=10r/s:限制频率为每秒10个请求burst=5:允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。nodelay:超过的请求不被延迟处理,设置后15个请求在1秒内处理。

ngx_http_limit_conn_module模块,限制IP连接数

http {    limit_conn_zone $binary_remote_addr zone=addr:10m;     //触发条件    server {        location /download/ {            limit_conn addr 1;    //限制同一时间内1个连接,超出的连接返回503                }           }     }

ngx_lua_waf模块,实现应用级防火墙功能经常使用宝塔的人应该知道,nginx配置中,有个include luawaf.conf的配置。实际上,这就是大名鼎鼎的ngx_lua_waf防火墙!

它的一般功能包括:

防止SQL注入,本地包含,部分溢出,fuzzing测试,XSS,SSRF等Web攻击防止SVN/备份之类文件泄漏防止ApacheBench之类压力测试工具的攻击屏蔽常见的扫描黑客工具,扫描器屏蔽异常的网络请求屏蔽图片附件类目录php执行权限防止WebShell上传

同时,它也具备基本的CC攻击拦截功能:可针对访问IP,记录其访问次数,当在一定时间内达到指定访问次数,则会进行拦截处理。

博主针对其lua脚本,做了一些修改,可动态配置封禁时长。使用方法(宝塔):

1.Nginx配置文件开启include luawaf.conf;2.将下载的文件,覆盖到/www/server/nginx/waf 3.重要配置说明(下载得到的config.lua文件,可自行酌情修改):

--是否开启拦截cc攻击CCDeny="on"--a/b-c 表示如果同一IP在b秒内请求超过a次,则禁用该IP c秒CCrate="100/50-60"    

附下载地址:https://download.csdn.net/download/localhost01/18964545

c2fa51f474089f8b4bab11468e98da1b.webp

2、使用iptables,防DDoS攻击

#限制SYN_RECV连接,每秒一次-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
#限制IP碎片,每秒钟只允许100个碎片,用来防止DoS攻击-A FORWARD -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
#限制ping,每秒一次,10个后重新开始-A FORWARD -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
#限制ICMP回应请求,每秒一次-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
#防御大量DOS攻击连接,可允许外网每个IP最多15个初始连接,超过的则丢弃,第二条是在第一条的基础上允许已经建立的连接和子连接数量(--connlimit-mask 32为主机掩码,32即为一个主机ip,也可以是网段)iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 --connlimit-mask 32 -j DROPiptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#抵御DDOS,允许外网最多24个初始连接,然后服务器每秒新增12个,访问太多超过的丢弃,第二条是允许服务器内部每秒1个初始连接进行转发iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPTiptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#允许单个IP访问服务器的80端口的最大连接数为20iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT
#对访问本机的3306端口进行限制,每个ip每小时只能连接5次,超过的拒接,1小时候重新计算次数iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROPiptables -A INPUT -p tcp --dport 3306 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT

3、使用Linux内核参数,削弱DDoS攻击

以下均是linux内核参数,可使用命令echo 2 > /proc/sys/net/ipv4/下述key来进行设值。

#表示开启 SYN Cookies功能,当出现 SYN 等待队列溢出时, 启用 Cookies 来处理, 可防范少量SYN攻击net.ipv4.tcp_syncookies = 1
#新建TCP连接请求,需要发送一个SYN包,该值决定内核需要尝试发送多少次syn连接请求才决定放弃建立连接。默认值是5. 对于高负载且通信良好的物理网络而言,调整为2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_synack_retries = 2
#0:不进行源地址校验;#1:严格模式,即RFC3704定义的严格反向路径;每个入向报文都要经过FIB进行反向路径检验,如果反向路径的出向端口不是最优的,则检测失败。默认情况下,丢弃检验失败的报文,在某些特殊情况下可能会丢包造成业务异常;#2:松散模式,即RFC3704定义的松散反向路径过每个入向报文的源地址都要经过FIB检验,如果入向报文的源地址不能通过反向路径的任何出向端口到达,则检测失败。#RFC3704文档建议使用严格模式,防止IP欺骗的DDos攻击。如果使用非对称路由或者其他复杂路由,建议使用松散模式net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1
#表示套接字由本端要求关闭,这个参数决定了他保持在 FIN_WAIT_2 状态的时间,默认值是 60 秒net.ipv4.tcp_fin_timeout = 15
#忽略ICMP广播请求,启动设置为1:从 ICMP 的角度出发,为了避免 ICMP 主机探测、ICMP Flood 等各种网络问题,你可以通过内核选项,来限制 ICMP 的行为,避免放大攻击net.ipv4.icmp_echo_ignore_broadcasts = 1
#开启恶意icmp错误消息保护net.ipv4.icmp_ignore_bogus_error_responses = 1
#系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降低这个限制。net.ipv4.tcp_max_orphans = 16384
#永久禁 ping,一定程度上在互联网上隐藏自己防止一些批量扫描软件探测主机,减少被入侵的几率,不过却减少了使用上的便利性net.ipv4.icmp_echo_ignore_all = 1

4、使用DDoS deflate等专业软件

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址。

在检测到某个结点超过预设的阈值时,该程序会通过apf或iptables禁止或阻挡这些IP。

DDoS deflate官方网站:http://deflate.medialayer.com/

四、【复杂 | 定制化】业务系统过滤

我们可以通过ELK日志分析,结合具体业务情况,在业务系统层面编写一定的过滤逻辑,实现有效的DDoS过滤。

ELK这里不多讲,大家自行百度。下面放几张之前排查CC攻击的kibana统计图:

a7875de986e36dea9707d71728fa5f11.webp

X轴为所有IP(由于较多,所以看起来密密麻麻,几近全黑),Y轴为每个IP访问总次数,然后按照访问次数由高到低排序。

可以看到,90%的IP,访问次数在250以下,而少部分,达到了500以上。

68cc574699ca72cc19a637fb3ae8a395.webp

X轴为不同IP,Y轴为各IP访问不同URL的次数(每一个点就是一个URL)。

可以看出,正常IP访问的页面,基本恒定在1-5次(本业务决定了访问比较恒定),而异常IP,每个页面数,则不固定,有多有少。

抽样出异常IP,网络威胁分析结果:9c7a2da56649231b7e6ebfe54300fa27.webp


由上,通过日志统计分析,不难看出:

1.正常、异常访问的PV明显

通过清晰的PV阈值(PV:页面访问量),结合WAF软件,进行合理拦截;

一般网站,正常和异常的访问分布,比起上图可能会更加清晰明显。

2.访问IP来源异常

通过抽样一些IP,结合到本身业务场景分析:

如是否应该存在境外IP?是否应该存在IDC(云服务器)、VPS、VPN、Proxy等类型IP?

因此可利用纯真数据库,通过访问IP的归属,进行智能过滤。

3.自行脑补……

bb862433b501d1f38231efaa8b9218e1.webp五、【贵 | 好用】购买高防服务

1、高防服务器和带流量清洗的ISP 百度谷歌关键字:高防DDoS,搜到一大批,优劣自行判断。

2、流量清洗服务 例如:akamainexusguard,费用比较贵。

3、CDN 例如:蓝讯网宿cloudflare等,CDN针对DDOS的分布式特点,将流量引流分散,同时对网站又有加速作用,效果好,成本相对低。

968be8091bcfb46f0d0bc4adc29e3b95.webp

好了,今天的分享就到这儿了。

如果喜欢本文,请关注公众号:开猿笔记,里面会有持续更新噢!

浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报