服务稳定性及应用防攻击方案

一、 服务稳定性

1. 基本监控

基本监控推荐使用Zabbix,开源分布式企业级监控系统,能满足目前我们监控的需求

a.  系统监控,包括CPU、内存、磁盘、网络等,能够对系统级别的风险进行报警,目前已经实现并线上运行
b.  服务进程及端口监控,能够监控服务异常退出,目前已经实现并线上运行
c.  自定义脚本程序模拟接口登陆访问结合Zabbix监控日志文件功能,能够对自定义的错误进行报警,目前已经实现并线上运行
d.  以上默认系统监控会自动添加,服务进程端口及自定义监控有需要时添加

2. 日志收集

日志收集推荐使用Elastic Stack协议栈,可以满足收集海量日志需求,而且便于后续分析、报表、报警操作

a.  日志包括服务正常访问日志及错误日志
b.  访问日志可以收集客户端IP、响应时间、HTTP状态码、发送字节、Referer、Agent等,也可以自定义字段
c.  错误日志可以收集自定义字段错误字段,例如登陆失败、连接超时、后端无响应等
d.  以上需要提前准备好日志及定义好日志字段

3. 指标分析

a.  访问日志指标,例如HTTP状态码统计、响应时间分布、其他字段统计
b.  错误日志指标,例如一段时间内某某错误出现的次数、一段时间内各项错误比例分布、错误出现趋势、错误出现时间、错误出现区域等
c.  以上都可以通过Elasticsearch支持的Lucene语言或者Kibana Dev Tools编辑DSL语言进行精确或模糊匹配来分析

4. 报表制作

a.  Kibana通过visualize及dashboard来实现饼图、趋势图、表格、直方图、地图、Metric、热力图、Markdown等形式的报表
b.  Grafana结合Data Sources及Plugins来实现饼图、趋势图、直方图、Html等形式的报表

5. 异常报警

a.  Elastalert通过Elasticsearch Python API编辑报警策略实现报警,例如一段时间内匹配某项DSL语法结果出现的次数大于或小于某值报警、两段对比时间段内匹配结果的值对比后大于或者小于某一基数、一段时间内匹配的值进行聚合运算后大于或小于某值报警、其他自定义语法获得结果异常报警
b.  Grafana可以对趋势设置Alert阈值并通过邮件报警
c.  以上工程量都比较大而且难度系数也不小但都能实现

二、应用防攻击

1.主要是基于Nginx与Iptables实现(目前CLB不支持这些配置)

a.  限速
利用ngx_http_limit_conn_module及ngx_http_limit_req_module模块,首先在http区域里定义好限速限制连接数策略,再在具体的域名上使用,具体限速及限制连接数需要根据实际情况评估,超过的连接会默认直接返回503不转发到袁征
b.  屏蔽IP
方法一使用ngx_http_access_module模块allow、deny控制,缺点是通过remote_addr来屏蔽IP的,支持CIDR等格式地址
方法二使用自定义客户端IP变量$clientRealIp来屏蔽,IP需要写成正则形式的,支持IP穿透,所以通过CDN的域名这种方法也能生效
方法三自定义屏蔽IP,结合Elasticsearch查询异常IP可自动化屏蔽IP,前两种方法易于实现但是只能手动屏蔽
c.  屏蔽reffer
例如屏蔽某些流氓网站友情链接
d.  屏蔽agent
例如屏蔽爬虫agent
e.  屏蔽url
例如屏蔽有漏洞url禁止外部访问
f.  其他自定义
设置故障域,怎样都防不住可以通过error_page功能,转发流量到备用源站

2.第三方腾讯云产品通过网站管家WAF与大禹BGP高防包实现

a.  网站管家WAF高级版放在CLB前面
b.  大禹BGP高防放在WAF前面