使用Oneinstack部署网页环境并部署WAF防火墙

视频教程
Y2B:https://youtu.be/Sfq_DBQFGLw
Bilibili:https://www.bilibili.com/video/av22863011

部署LNMP环境
首先访问https://oneinstack.com/auto/获取一键安装代码。'

部署CC攻击防御
这时候我们来用一台VPS去做简单的CC测试

TIM截图20180501191301.png
TIM截图20180501191356.png

可以看到,无论是攻击静态资源还是动态网页,都给服务器造成了毁灭性的打击,而这攻击的成本基本上可以忽略不计。

这时候一般我们有两种选择,给网站接入CLOUDFlare等CDN防御,或者给服务器增加IP封禁脚本和访问控制。
因为各种原因,免费的CDN往往访问速度较慢,甚至节点IP被Q。这完全浪费我们VPS的优质网络。以及SSL加密,回源等问题,所以很多人不回去接入免费的CDN。

我们这时候只有一个选择,就是折腾服务器内部服务。

考虑到利用Nginx占用小,高并发的优势,以及Lua语言的轻快,所以在高性能,高负载的服务器上,使用Nginx+Lua作为防御时最好的选择,这就是我们一开始建站使用OpenResty的原因。

这次我们采用一个基于Nginx+Lua的WAF

Git作者:https://github.com/loveshell/ngx_lua_waf

防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
CC攻击防御

我们进入Nginx的配置目录,安装WAF的Lua文件

cd /usr/local/openresty/nginx/conf
wget https://raw.githubusercontent.com/chiakge/mysh/master/waf.tar.gz
tar zxf waf.tar.gz
rm -rf waf.tar.gz

配置修改介绍
默认url黑名单会禁止phpMyAdmin访问,推荐使用命令mv /data/wwwroot/default/phpMyAdmin /data/wwwroot/default/新文件夹名来修改,修改后访问ip/新文件夹名访问phpMyAdmin。
url白名单第一条为phpMyAdmin.css放行,请勿删除。

ip白名单
修改/usr/local/openresty/nginx/conf/waf/wafconf/config.lua中的ipWhitelist。
可以填写多个ip,多个ip中用,分割,例如{"127.0.0.1","192.168.1.1"}。

url白名单
修改/usr/local/openresty/nginx/conf/waf/wafconf/whiteurl,一行一个,取字符段验证,只取uri,通常用于api链接放行,不能带参数。
例如https://xxx.xxx.xxx/94ish.php?xxx=xxxxxxxxxxxx,我们填入^/94ish.php(.)*$即可放行全部以/94ish.php开头的uri。
以^开头,(.)*$结尾。

启动waf
基本上修改过这些参数我们就可以进行启动测试了。
首先我们要给予日志目录写入权限,输入chmod -R 775 /data/wwwlogs/
然后打开/usr/local/openresty/nginx/conf/nginx.conf,将以下字段添加到http{}中

lua_shared_dict limit 10m;
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/openresty/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/openresty/nginx/conf/waf/waf.lua";
最后我们输入/etc/init.d/nginx restart重启nginx即可。

效果测试
现在我们可以测试下效果,连着刷新主页10次。

TIM截图20180501212022.png

访问关键词匹配的目录。

TIM截图20180501212334.png

CC流量测试

CC

CC CPU测试

TIM截图20180501212617.png

可以看到效果还是非常显著的。

配置文件备注
在这里我简单说下我们需要修改的配置文件

RulePath = "/usr/local/openresty/nginx/conf/waf/wafconf/"
--规则存放目录
attacklog = "on"
--是否开启攻击信息记录,需要配置logdir
logdir = "/data/wwwlogs/"
--log存储目录,该目录需要用户自己新建,需要nginx用户的可写权限
UrlDeny="on"
--是否拦截url访问
Redirect="on"
--是否拦截后重定向
CookieMatch = "on"
--是否拦截cookie攻击
postMatch = "off"
--是否拦截post攻击
whiteModule = "on"
--是否开启URL白名单
black_fileExt={"php","jsp"}
--填写不允许上传文件后缀类型
ipWhitelist={"127.0.0.1"}
--ip白名单,多个ip用逗号分隔
ipBlocklist={"1.0.0.1"}
--ip黑名单,多个ip用逗号分隔
CCDeny="on"
--是否开启拦截cc攻击
CCrate = "10/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址10次

正常情况下我们只需修改ip白名单与url白名单。

本套规则的判断优先级是ip白名单>ip黑名单>url白名单>UA检测>cc防御>SQL注入检测>url黑名单>cookie攻击

标签: none

评论已关闭