新一代CC防火墙(SHIELD2.0)

社区CC防火墙是公司对外提供服务的WEB站点的一层防护屏障,可以过滤访问请求,识别出攻击者,并与之屏蔽,保证WEB站点安全稳定的运行,新一代的CC防火墙产品是前一代的基础上在架构及功能上的一次重大革新

  • 新算法的应用,可缓解、抵御所有web站点遭到CC的攻击强度。
  • 整合不同部门的防火墙类产品,降低开发成本,增强用户体验。
  • 针对攻击IP的访问行为进行特征分析,增加分析维度

Architecture

公共服务

  • Flume : Sheild日志收集组件,进行原始日志的收集
  • Kafka:Sheild整体数据总线,维护多组件的数据交互
  • Strom : 流式数据分析组件,进行算法运算与数据统计
  • Zookeeper : 内存型分布式的配置文件存储
  • Mysql : 持久化数据存储

SHEILD组件

  • Shield Guard : WEB项目,提供被封停的IP展示页面,支持在此界面上输入验证码信息后进行解封
  • Shield Agent : 提供接收来自于Shield Analyzer的封停IP数据,进行IP封停;提供被封停的IP跳转
  • Shield Analyzer : 提供原始访问日志分析,并根据规则进行封停通知操作
  • Shield Logger : Shield日志组件,存储Shield内分析数据
  • Shield FE : Shield WEB化管理前端

组件设计

Shield Guard

Sheild guard 根据GET型参数确定所属项目,抓取当前用户访问的IP地址信息(此IP信息不允许用户自行修改),并采用多种随机验证码验证形式,当用户成功输入验证码后将根据所属的项目将解封信息推送至Kafka的对应Topic中。

Shield Agent

1、Shield Agent默认消费kafka数据进行解封与封停操作(若封停则将来自于此IP的所有数据包重定向到自身服务端口)。
安装初始化:
1、初始化ipset与iptables组件
将ipset内存在的ip的访问http端口(默认为80,可以更换)SNAT至本机的shield Agent Block Port
2、开启自身端口跳转99888,用户访问99888端口则默认跳转至Shield Guard页面
2、Sheild Agent 提供当前信息查询接口:
封停IP数量
封停IP列表

重点配置文件:

1
2
3
4
5
ProjectUUID = 16位随机码                : 进行URL跳转时使用
BlockType = all/self : 进行封停操作时是全封停还是真对发送至自身的数据进行封停
AgentIP = 127.0.0.1 : agent ip 地址,此IP地址将注册至zookeeper
BlockPort = 99988 : agent提供跳转服务的IP地址
ThriftPort = 100010 :RPC服务端口

ZK结构

1
2
3
4
5
6
7
8
9
10
11
12
13
Tree:
Sheild
ProjectName
config(永久节点)
agent_list
Ip1(永久节点)
{
"agentname":"HP",
"blockcnt":""
}

online(临时节点)
ip2(永久节点)

Shield Analyzer

分析程序,程序首次启动将从mysql读取数据写入ZK。
KafkaSpout : 消费Kafka原始数据(Topic:sheild-data),为确保时间有序,只采用一个
LogFormartBolt : KafkaSpout将数据按照项目发送至此Bolt,此Bolt采用多个,进行数据的格式化处理,转换为JAVA对象
IpanalysisBolt : Formart后将数据按照AgentIP-UserIP规则随机分发至此Bolt进行规则判断
BlockBolt : Ipanalysis判断需要封停后将数据发送至此Bolt,此Bolt将需要封停的IP数据推送至Kafka中(topic:对应项目)。

其中IpanalysisBolt 与 BlockBolt 设置定时器进行数据分析,将数据分析结果推送至Kafka(topic:sheild-log)

zk结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Tree:
Sheild
ProjectName
config(永久节点)
{
"uuid":"xxxxx",
"pname":"SQ",
"readpass":"Md5",
"writepass":"MD5"
"startcnt": "100",
"threshold_sec": "20",
"rulelevel": "3",
"blockflag": "false"
"block_second": "864000",
}
white_list
Ip
{
"127.0.0.1":"memo",
"125.93.148.63:"memo"
}
Apiip
{
"http://111":{
"memo":"",
"tickt":"",
"catchflag":"",
"catchtime":""
}
}

Url
[
"http://iplisturl":"memo"
]
special_rule
Spurl:
"reg.gyyx.cn/Login/Async": {
"startcnt": "100",
"rulelevel": "3",
"blockflag": "true",
"threshold_sec": "100",
"block_second": "864000"
}

数据库模型

Shield Logger

消费kafka数据(topic:sheild-log)进行数据的分析入库,并对外提供RESUTFUL API供外部数据调用

Shield FE

shield前端管理界面


本版本为技术设计草稿,预计开发工期2017-11-06至2017-11-20,团队成员 1名PO,1名TO,3名DEV。期待产品上线!