跳转至

Dos

Dos简介

DOS 攻击(Denial of Service 拒绝服务攻击)是一种网络攻击,它的目的是通过发送大量无效或伪造的数据请求,使得网络或计算机系统无法处理正常的数据流量,从而导致系统崩溃或无法正常运行。这种攻击通常会导致网站无法访问,甚至整个网络都会受到影响。

WAF插件

Hango 通过集成 WAF 插件的方式支持防御 Dos 攻击;WAF(Web应用防火墙)插件是一种特殊的软件,它用于保护网站或Web应用程序免受恶意攻击的影响。它通过实时监测Web流量,并根据特定的规则和算法来识别和阻止恶意活动。WAF插件通常会包含一些基本的安全功能,例如防止SQL注入攻击和跨站点脚本攻击(XSS),并提供其他高级功能,如对抗DDoS攻击和安全日志记录等。

Dos 攻击防御是 WAF 插件中的一项功能,关于 Dos 的可配置项包括请求的统计时间窗口、请求阈值、请求拒绝时间这3项;我们做如下配置

配置项 配置值
统计时间窗口(s) 10
请求阈值 100
请求拒绝时间(s) 5

基于上述配置,可以在 10s 内对访问 Hango 网关的请求数进行统计, 若请求数超过了 100 则将对其他请求进行拒绝,拒绝的时间窗为 5s 。通过拒绝请求的方式,可以在关键时刻对恶意的请求洪流进行拦截,起到保护系统的作用。

除了比较典型的 Dos 攻击防御功能外, WAF 插件还提供了非常多安全防护的能力。

具体配置

名称 类型 必选项 范围 描述
kind string 是 waf 插件类型(值固定)
wafRule.dosSwitch boolean 否 - 是否打开dos功能
wafRule.dosConfig.dos_burst_time_slice integer 否 [0, 3600] dos配置:统计时间窗
wafRule.dosConfig.dos_counter_threshold integer 否 [0, 99999999] dos配置:请求数量阈值
wafRule.dosConfig.dos_block_timeout integer 否 [0, 86400] dos配置:请求拒绝时间
scannerSwitch boolean 否 - 防止扫描攻击开关
lfiSwitch boolean 否 - LFI攻击开关
rfiSwitch boolean 否 - RFI攻击开关
rceSwitch boolean 否 - RCE攻击开关
phpInjectionSwitch boolean 否 - PHP代码注入攻击开关
xssSwitch boolean 否 - XSS攻击开关
sqliSwitch boolean 否 - SQL注入攻击开关
sessionFixationSwitch boolean 否 - Session Fixation攻击开关
javaInjectionSwitch boolean 否 - Java代码注入攻击开关
cgiDataLeakagesSwitch boolean 否 - CGI数据泄露攻击开关
sqlDataLeakagesSwitch boolean 否 - SQL数据泄露攻击开关
javaDataLeakagesSwitch boolean 否 - JAVA数据泄露攻击开关
phpDataLeakagesSwitch boolean 否 - PHP数据泄露攻击开关
iisDataLeakagesSwitch boolean 否 - IIS数据泄露攻击开关

对于各项开关功能有对应如下释义

功能 解释 CRS id 配置
DOS 防止拒绝服务攻击,针对 ip 级别的请求数统计实现防御 912 是
Scanner 防止扫描攻击,检查某些开源或商业的扫描攻击的默认 User-Agent 和 Headers 913 否
LFI 防止利用本地文件包含漏洞进行攻击,检查headers、cookie或者 uri 中是否包含目录遍历、系统文件等 930 否
RFI 防止利用远程文件包含漏洞进行攻击,检查 url 参数中是否包含 ip 地址、body 中是否包含 include关键字等 931 否
RCE 防止利用远程命令执行漏洞进行攻击,检查 cookie、url 参数等是否包含Unix Command、Windows Command、Windows PowerShell Command 等 932 否
PHP Injection 防止 PHP 代码注入 ,检查 headers、cookie、rl 参数等是否包含可能的 php 文件、关键字之类 933 否
XSS 防止跨站脚本攻击,检查 headers、cookie、rl 参数等是否包含可能的网页脚本 941 否
SQLi 防止 SQL 注入,检查 headers、cookie、rl 参数等是否包含可能的 sql 语句等 942 否
Session Fixation 阻止利用Session会话ID不变的漏洞进行攻击 943 否
Java Injection 防止 Java 代码注入,检查 headers、cookie、rl 参数等是否包含可能的 java 文件、关键字之类 944 否
Data Leakages 防止数据泄露(CGI、SQL、JAVA、PHP、IIS),检查 response body 中是否包含相应语言的关键字或者错误输出等 950-954 否

前置条件

以下curl命令中存在变量,使用前需要替换为真实环境数据,变量以{{}}符号包裹,例如{{ 网关ID }}需要根据网关的实际ID进行替换;创建插件命令中PluginConfiguration(插件配置)需要根据实际需要进行配置

创建

curl -XPOST -v -H "Content-Type:application/json" -d '{
  "BindingObjectId": {{ 路由ID }},
  "BindingObjectType": "routeRule",
  "GwId": {{ 网关ID }},
  "PluginConfiguration": "{\"wafRule\":{\"dosSwitch\":true,\"dosConfig\":{\"dos_burst_time_slice\":\"10\",\"dos_counter_threshold\":\"100\",\"dos_block_timeout\":\"5\"},\"scannerSwitch\":true,\"lfiSwitch\":true,\"rfiSwitch\":true,\"rceSwitch\":true,\"phpInjectionSwitch\":true,\"xssSwitch\":true,\"sqliSwitch\":true,\"sessionFixationSwitch\":true,\"javaInjectionSwitch\":true,\"cgiDataLeakagesSwitch\":true,\"sqlDataLeakagesSwitch\":true,\"javaDataLeakagesSwitch\":true,\"phpDataLeakagesSwitch\":true,\"iisDataLeakagesSwitch\":true},\"kind\":\"waf\"}",
  "PluginType": "waf"
}' http://{{ hango-portal ip:port }}/gdashboard?Action=BindingPlugin&Version=2019-09-01

测试

## 如下命令展示了用命令调用 100 次请求的案例,可修改 for 中的请求次数,进行 Dos 测试,测试是否会进行请求拒绝
for((i=0;i<100;i++));do curl -v "http://{{ 网关IP }}/{{ 路由path }}" -H "host:{{ 网关关联域名 }}";done

删除

curl -v -H "Content-Type:application/json" http://{{ hango-portal ip:port }}/gdashboard?PluginBindingInfoId={{ 插件ID }}&Action=UnbindingPlugin&Version=2019-09-01

界面配置方法

详见hango-gateway工程文档插件配置方法

Back to top