使用Oneinstack部署网页环境并...
 
Notifications
Clear all

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

1 Posts
1 Users
0 Likes
1,033 Views
(@taichi)
Member
Joined: 4 years ago
Posts: 408
Topic starter  

视频教程

Y2B: https://youtu.be/Sfq_DBQFGLw
Bilibili: https://www.bilibili.com/video/av22863011

 

部署LNMP环境

首先访问 https://oneinstack.com/auto/ 获取一键安装代码

TIM截图20180430190337.png

TIM截图20180430190337.png

 

Nginx必须要使用OpenResty分支,其他可以自行选择

wget -c  http://mirrors.linuxeye.com/oneinstack-full.tar.gz  && tar xzf oneinstack-full.tar.gz && ~/oneinstack/install.sh --nginx_option 3 --php_option 5 --phpcache_option 1 --php_extensions gmagick --phpmyadmin  --db_option 4 --dbinstallmethod 1 --dbrootpwd h19z1jyd --redis --iptables  --reboot

如果你不知道如何该如何选择组件,复制上面一段放入vps运行即可。

安装完成后服务器会自动重启,我们这时可以访问服务器ip地址查看是否安装成功。

TIM截图20180501020013.png

TIM截图20180501020013.png

 

安装成功后我们回到ssh,我们先来重置一下mysql的root密码

cd oneinstack
./reset_db_root_password.sh

TIM截图20180501021610.png

TIM截图20180501021610.png

 

 

创建站点

接下来我们来创建站点

./vhost.sh

vhost.png

vhost.png

 

使用命令创建数据库

mysqladmin -u root -p create 数据库名

TIM截图20180501022057.png

TIM截图20180501022057.png

 

然后我们把站点源码上传到网站目录下,这里演示使用的是wordpress博客程序。

cd /data/wwwroot/test.94ish.me
wget  https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz 
tar zxf wordpress*.tar.gz
mv wordpress/* .
rm -rf wordpress*.tar.gz wordpress
#网站备份文件的还原也与差不多。

最后再设置一下网站目录权限

chown -R www.www /data/wwwroot/
find /data/wwwroot/ -type d -exec chmod 755 {} \;
find /data/wwwroot/ -type f -exec chmod 644 {} \;

输入创建站点的域名,我们即可访问

TIM截图20180501023444.png

TIM截图20180501023444.png
TIM截图20180501023535.pngTIM截图20180501023535.png

 

输入信息,网站很快就安装完成了。

TIM截图20180501023655.png

TIM截图20180501023655.png

 

 

部署CC攻击防御

这时候我们来用一台VPS去做简单的CC测试

TIM截图20180501191301.png

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

 

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

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

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

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

这次我们采用一个基于Nginx+LuaWAF

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截图20180501212022.png

 

访问关键词匹配的目录。

TIM截图20180501212334.png

TIM截图20180501212334.png

 

CC流量测试

CC

CC

 

CC CPU测试

TIM截图20180501212617.png

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攻击


   
Quote
Share: