WAF (Web 应用防火墙)通过检查 HTTP/HTTPS 流量来实现内容过滤, 可以防止针对 Web 应用程序漏洞的攻击,如 SQL 注入、跨站点脚本(XSS)、文件包含漏洞以及安全配置错误等。 CC 防护功能可以降低攻击对系统的影响,通过自定义规则可以灵活有效的阻止非法流量,保证应用的稳定运行。 WAF 部署在负载均衡器(LoadBalancer)之上,本指南旨在介绍如何通过配置 WAF 来实现内容防护。
WAF 是跟负载均衡器(LoadBalancer)一起部署的,所以新建 WAF 需要新建负载均衡器并对其配置。 WAF 的策略配置项在这里可以修改,下面会分别讲到。
第一步:创建一个负载均衡器
第二步:新建监听器
第三步:配置 WAF 域名防护策略
第四步:配置 WAF 检测规则
创建好域名防护策略之后,WAF 就会加载系统的默认检测规则,这些规则由青云维护并更新:
![]()
用户也可以根据自己 Web 应用的特点,定制 WAF 检测规则,点击自定义规则下的 “创建” 可以弹出新建窗口:
![]()
规则的行为可配置为观察模式或者阻断模式,观察只记录不阻断对业务系统无影响。
注解
新增规则时请配置为观察模式,待规则稳定之后再修改为阻断模式。
![]()
规则配置要填写要检测的 HTTP 协议字段内容,当前一条规则支持配置检查 5 个协议变量,提交修改之后可以看到填写的内容。
![]()
除了可以配置自定义的规则,还可以配置自定义的黑白名单以及 CC 防护功能,点击 “黑白名单” 下的 “创建”:
![]()
注解
配置的 IP 是将被检查的请求源 IP,包含可选的子网掩码。
![]()
注解
配置的 URL 将进行路径前缀匹配,例如 /abc 可以匹配 /abc/123。
![]()
注解
配置的 URL 将进行完全匹配,这里请填写完整的 URL 路径。
配置完之后可以看到规则列表:
![]()
第五步:绑定 WAF 域名防护策略
第六步:全局 WAF 配置组
WAF 配置组是针对负载均衡器的全局配置,这里可以针对 WAF 功能做微调,比如配置 WAF 日志发送的地址等,可修改的选项如下:
![]()
logcenter_ip: WAF 的日志服务器地址,不填则不发送
logcenter_port: WAF 的日志服务器端口
syslog_facility: WAF 的 syslog facility
syslog_level: WAF 的 syslog level
event_to_local: 是否在本地记录 WAF 日志,0 不记录
max_local_event_num: 本地记录的 WAF 的日志最大条目
max_cc_nodes: 支持检测的 CC 节点的数量
cc_expire_secs: CC 检测的节点超时时间
cc_block_ratio: CC 检测的阻断惩罚速率
cc_suspect_ratio: CC 检测的可疑惩罚速率
max_block_ratio: 系统最大阻断率
max_connect_check_time: 系统保活探测次数
max_system_ratio: WAF 最大资源利用率
module_cc_enable: 是否开启 CC 功能,0 不开启
module_check_enable: 是否开启规则检查功能,0 不开启
module_iplist_enable: 是否开启 IP 黑白名单功能,0 不开启
module_urllist_enable: 是否开启 URL 黑白名单功能,0 不开启
注解
配置之后要点击 “应用修改” 来更新。
第七步:查看 WAF 监控日志
开启 WAF 之后可以查看检测的监控统计,在监听器的右边点击 WAF 的按钮选择 “监控”:
![]()
![]()
这里是针对每个监听器,按命中的规则和黑白名单来分别统计。
也可以查看整个负载均衡的监控情况,点击 “WAF监控” 选择 “监控”:
![]()
点击 “WAF监控” 选择 “日志” 可以查看本地保存的攻击日志:
![]()
注解
本地日志默认保存 2000 条,要保存更多日志可以配置 WAF 的日志服务器,WAF 的检测日志可以通过 syslog 的方式发送出去。
WAF 的日志可以通过syslog的格式发送到日志服务器,可以修改配置组中的 logcenter_ip 和 logcenter_port 参数来配置。 同时,可以将日志倒入 ELK 来分析处理,需要使用 logstash-input-syslog 来接收syslog日志,并配置 grok 过滤参数如下:
- grok {
- match => { “message” => “%{WORD:method} %{HOSTNAME:domain} %{URIPATHPARAM:url} %{NOTSPACE:client_ip} %{WORD:action} %{INT:impact} %{WORD:module} %{NOTSPACE:attack_type} %{NOTSPACE:rule_id} %{NOTSPACE:ua} %{GREEDYDATA:post}” }
}
可配置的 dashboard 效果如下:
![]()
WAF 需要做规则匹配,所以需要更多的 CPU 处理时间和内存,QPS 也有少许下降:
CPU: 根据规则数量和请求的不同 CPU 的使用率有 2% - 30% 的升高
内存: 根据规则数量和请求的不同需要 128M 以上的内存
QPS: 根据规则数量和请求的不同 QPS 有 4% - 10% 的下降
注解
该数据仅供参考,可根据自己的业务系统做测试来获得第一手资料。