云服务器安全设计
0x00 产品定位
目前越来越多的初创企业把自己的业务系统架设在公有云上,包含:阿里云、Ucloud、青云、华为云和AWS。在云上的安全怎么保证,是目前摆在我们面前的最大问题,因为,互联网公司业务系统在不断迭代,迭代周期最少的有3天,而且架构也不断在改变。在这种频繁改变的过程中,云安全应该怎么保证?,云主机安全服务平台(Cloud security as a service),为多租户提供云主机安全服务的产品,减少用户业务系统攻击面,防止恶意的定向攻击(APT)。造成企业敏感信息泄露等,避免影响企业业务的安全事件的发生。
0x01 国外竞争产品分析
目前在云主机安全ToB的国外厂商归纳总结有以下几家:
技术方向 | 厂商 |
---|---|
云安全信息和事件管理产品 | Splunk、AlienVault |
云主机安全产品 | CloudPassage、Illumio、vArmour、FortyCloud |
私有云服务器安全 | TrendMicro、Symantec、McAfee |
厂家 | 描述 |
---|---|
Illumio | 自适应安全 |
FortyCloud | Cloud Network Firewall as a Service |
vArmour | 利用大数据分析技术,通过扫描进入网络的每一块数据来筛查疑似非法数据并对其进行标记,跟踪。 |
CloudPassage | 服务器的安全配置管理、托管防火墙管理、入侵检测、服务器账号审计、事件报告与告警 |
Splunk | 从海量机器数据中提取有价值的信息,并进行实时分析和展现 |
AlienVault | 为客户提供SIEM解决方案。同时,AlienVault结合众包威胁情报平台提供了一个混合威胁管理解决方案。 |
TrendMicro,McAfee,Symantec | VMware、Hyper-v、Linux KVM私有云虚拟机安全解决方案 |
0x02 产品目标
针对互联网金融中小企业用户。获取用户改进产品,互联网金融目标用户行业分析如下:
业务模式名称 | 业务模式详细描述 | 代表企业:安全业务需求 |
---|---|---|
第三方支付企业模式 | 第三方支付企业指在收付款人之间作为中介机构提供网络支付、预付卡发行预受理、银行卡收单以及其他支付服务的非金融机构 | 支付宝、易宝支付、拉卡拉、财付通为代表的互联网支付企业,快钱、汇付天下为代表的金融型支付企业。 |
P2P网络小额信贷模式 | 通过P2P网络融资平台,借款人直接发布借款信息,出借人了解对方的身份信息、信用信息后,可以直接与借款人签署借贷合同,提供小额贷款,并能及时获知借款人的还款进度,获得投资回报。 | 代表企业:美国的prosper和lendingclubP2P公司,国内的人人贷、拍拍贷、红岭创投等 陆金所 |
众筹融资模式 | 所谓众筹平台,是指创意人向公众募集小额资金或其他支持,再将创意实施结果反馈给出资人的平台。网站为网友提供发起筹资创意,整理出资人信息,公开创意实施结果的平台,以与筹资人分成为主要赢利模式 | 代表企业:国外最早和最知名的平台是kickstarter,国内有点名时间、众筹网、淘梦网等 京东众筹、人人投、追梦网、大家投 |
虚拟电子货币模式 | 虚拟货币是一种计算机运算产生或者网络社区发行管理的网络虚拟货币,可以用来购买一些虚拟的物品,比如网络游戏当中的衣服、帽子、装备等,只要有人接受,也可以使用像比特币这样的虚拟货币购买现实生活当中的物品。 | 代表企业:国外的比特币、亚马逊币、Facebook币,国内的Q币等。 |
基于大数据的金融服务平台模式 | 通过打造类似去哪儿这样的金融产品垂直搜索引擎的方式,把有借款需求的个人和有放款需要的中小银行和小贷机构在一个平台上进行对接;然后通过广告费或者交易佣金的方式获得收入。 | 代表企业:国外的Bankrate(银率网),国内的融360、好贷网、金融界理财等 |
互联网银行模式(Internet bank or E-bank) | 借助现代数字通信、互联网、移动通信及物联网技术,通过云计算、大数据等方式在线实现为客户提供存款、贷款、支付、结算、汇转、电子票证、电子信用、账户管理、货币互换、P2P金融、投资理财、金融信息等全方位无缝、快捷、安全和高效的互联网金融服务机构。互联网银行的便利性、高效性将给传统银行带来较大的挑战 | |
互联网理财 | 通过互联网进行更高效的更便捷的钱生钱的事业 | 铜板街、格上理财、招财宝 - 蚂蚁金服、积木盒子、火球 |
0x03 市场机会
3.1 我们的机会在哪里
国内云主机安全服务平台有以下几家:
厂商名称 | 产品介绍 |
---|---|
乌云唐朝巡航 | 借助众测试等社区运营模式产生的云主机安全解决方案,主要是及时响应服务器安全漏洞。 |
阿里云盾 | DDoS防护,主机入侵防护,以及漏洞检测、木马检测等一整套安全服务 |
安全狗 | 基于主机WAF 和anti-DDoS功能 |
知道创宇 | 加速乐、云安全监控平台、ZoomEye大数据安全扫描平台 |
百度安全宝 | 云WAF企业版、DDoS云防护、应急响应 |
青藤云安全 | 自适应安全理念的产品化的国内第一家厂商 |
面对这些公司的竞争,我们的竞争力在于获得种子用户,完全开源的策略。提供安全运维服务。二次开发等服务。
3.2 如何成功?
支持云方式部署方式,快速获取用户。免费安装模式。
如果用户打算使用我们的解决方案,可以独立部署或者开放源代码。
KPI考核
统计安装用户数量、留存率,月付费用户转化率。免费用户
3.3 项目里程碑
0x04 产品功能详细架构设计(Product Proposal)
4.1 产品定位
通过以上国内外云安全公司产品分析,我认为云主机安全平台需要具备以下四个大功能模块。
开发的优先级如下:
- 基于日志大数据收集分析平台(P1)
- 基于基于Agent收集云主机相关精确的安全信息 (P2) 本模块需要大量的开发人员完成,如果获得天使轮融资后可以开发。
- 威胁情报模块(P2) 威胁情报这部分可以对接国内的威胁情报系统 例如:微步等。
- SDN网络安全防火墙模块(P2)防火墙模块目前还需要做更多的研究才能集成,建议使用linux主机上自带iptable实现。
4.2、产品功能详细设计
针对P1需要完成的功能,建立基于大数据分析平台,防范APT攻击。产品概念设计可以 为:基于日志的态势感知功能。
处理Web日志数据结构如下:
所选择的实现技术手段:
由于前期数据量没有到达一定的数量级,可以使用传统的关系型数据实现。当然如果本系统应用到大公司的时候可以迭代技术架构、hadoop或者storm来解决问题。
业务流程图:
核心界面设计:通过visio原型图表现。
核心界面首先,要画出原型图,那么,和用户接触最多的是web前端,所以,设计要精致。
(1)Web前端
Web前端分为四大功能模块
- Dashboard:显示攻击类型和攻击源
- Analysis:图形化分析详细的攻击方式
- Reporting: 以数据形式展示攻击类型、攻击源和详细攻击方式
- Configuration:参数配置(非核心模块就不展示了)
(2)Web管理后台
交互流程设计:正常应该通过Axure动画表现,由于本次设计不是特别复杂,只是几个功能模块的切换就不画交换流程图了。
0x05 产品技术架构设计
由于目前产品设计需要考虑高扩展性,所以技术选型大致如下:
0x06 Demo搭建
根据技术选型后,需要建立Demo 环境技术难点集中在服务器端和Web后端。那么下面说明一下这两部分搭建:
6.1 服务器端
组件名称 | 详细描述 |
---|---|
操作系统 | Centos 6.7 Final |
Web前端服务器 | Nginx/1.8.1 |
Web服务器 | Django/1.7 |
Python解析器 | uwsgi |
Python语言 | Python 2.7.10 |
Restful API架构 | Tastypie |
看到这个架构其实很多小朋友会问为啥要这么设计,太繁琐了?其实设计原则主要是为了将来的扩展性。Web前端服务器:本系统是一个公有云安全平台,用户量将来要不断的增加,使用Nginx可以做到横向扩展。
6.1.1 Nginx安装部署
Nginx部署过程:
-
rpm -ivh
http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
-
yum -y install nginx
-
service nginx restart
-
chkconfig nginx on
配置nginx
在/etc/nginx/conf.d/中增加MyPythonServer.conf,内容如下:
http { #负载均衡 upstream production_site{ server web1.xxx.com:8080 weight=6 max_fails=3 fail_timeout=20s; server web2.xxx.com:8080 weight=3 max_fails=3 fail_timeout=20s; server web3.xxx.com:8080 weight=7 max_fails=3 fail_timeout=20s; server web4.xxx.com:8080 weight=8 max_fails=3 fail_timeout=20s; } server { listen 8090; server_name web1.xxx.com,web2.xxx.com,web3.xxx.com,web4.xxx.com; charset utf-8; client_max_body_size 75M; location / { uwsgi_pass django; include uwsgi_params; } }
6.1.2 Django&uwsgi安装配置
[root@localhost venv]# pip install Django 安装uWSGI [root@localhost venv]# pip install uwsgi [uwsgi] home=/data/Mydata/env chdir=/data/Mydata/ uid=root gid=root wsgi-file=/data/Mydata/wsgi.py socket=127.0.0.1:8001 master=true workers=8 pidfile=/data/Mydata/uwsgi.pid vacuum=true thunder-lock=true enable-threads=true harakiri=30 post-buffering=4096 daemonize=/data/Mydata/uwsgi.log logger=file:/data/Mydata/uwsgi.log
6.2 Web后端
6.2.1 Php-fpm安装
nginx 安装忽略
cd /usr/local/src/ wget http://php.net/distributions/php-5.6.8.tar.gz tar --zxvf php-5.6.8.tar.gz yum install -y libxml2 libxml2-devel openssl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libmcrypt libmcrypt-devel mcrypt mhash ./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --enable-fpm --disable-ipv6 --enable-pdo --with-pdo-mysql --with-openssl --with-mcrypt --with-mhash --enable-json --enable-mbstring --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-native-ttf --enable-gd-jis-conv --enable-zip make make install cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf cp /usr/local/src/php-5.6.8/sapi/fpm/init.d.php-fpm /usr/local/php5/sbin/ cd /usr/local/php5/sbin/ chmod 755 init.d.php-fpm ./init.d.php-fpm start Starting php-fpm done
配置Nginx来支持PHP
cd /etc/nginx/ vi nginx.conf #打开gzip gzip on;
配置vhost,假设域名为www.xxx.com
cd /etc/nginx/conf.d/ vi www.xxx.com.conf #内容如下 server { listen 80; server_name www.xxx.com xxx.com; location / { #开启ssi支持shtml ssi on; ssi_silent_errors on; ssi_types text/shtml; index index.shtml index.php index.htm index.html; root /data/www/www.xxx.com; #框架路由设置 if ( !-e $request_filename ) { rewrite ^(.*)$ /index.php?url=$1 last; } } location ~.php$ { root /data/www/www.xxx.com; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~.(jpg|jpeg|png|js|css) { root /data/www/www.xxx.com; expires 30d; } }
测试一下 配置文件是否有错误
/etc/init.d/nginx configtest nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
新建info.php测试文件,内容为
<?php phpinfo(); ?>
然后:
vim /etc/hosts 127.0.0.1 www.xxx.com cd /usr/local/src/php-5.6.8 cp php.ini-production /usr/local/php5/etc/php.ini
至此nginx+php-fpm设置完成。
6.2.2 Mysql扩展安装
yum install mysql-devel
由于之前没有安装mysql服务,也没有安装php的mysql扩展,用是PDO方式,为适应老版本的joomla程序,再添加mysql.so扩展
方法如下:
1、进入php源代码目录:
cd /usr/local/src/php-5.6.8/ext cd mysql yum install autoconf
调用已经编译好的php可执行程序phpize,phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
phpize的规则:去哪个目录下运行phpize文件,那么就会在该目录下生成一个configure文件。
/usr/local/php5/bin/phpize ./configure --with-php-config=/usr/local/php5/bin/php-config --with-mysql --with-zlib-dir=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/ make && make install
完成后,可以看到no-debug-non-zts-20131226目录下生成了mysql.so文件
修改php.ini,去掉 ;extension=php_mysql.so
前面的分号。将 php_mysql.so
改成我们生成的 mysql.so
。
重启 php-fpm
后可以从phpinfo看到mysql扩展已经生效。
6.2.3 Yaf扩展安装
wget https://github.com/laruence/yaf/archive/master.zip unzip master.zip ./configure --with-php-config=/usr/local/php5/bin/php-config make && make install vim /usr/local/php5/etc/php.ini extension=yaf.so