热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   根域文章 -   正文

自建WAF系统的步骤

zhiliaoadmin
2021-05-29 09:51:28
0

基于开源软件自建WAF是个不错的选择,本节以春哥的OpenResty以及unixhot开源的WAF为基础,以Centos系统为例,介绍如何建立WAF。unixhot开源的WAF虽然功能比较简单,但其代码逻辑清晰,对于理解WAF的基本原理非常有帮助,然而应用在实际环境中还有许多需要修改的地方。我会在unixhot的基础上提供一个升级版本,有兴趣的读者可以参考本书配套GitHub的code/waf。

1.OpenResty简介

OpenResty是一个基于Nginx与Lua的高性能Web平台,其内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。OpenResty通过汇聚各种设计精良的Nginx模块,从而将Nginx有效地变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,快速构造出足以胜任10K乃至1000K以上单机并发连接的高性能Web应用系统。OpenResty的目标是让你的Web服务直接运行在Nginx服务内部,充分利用Nginx的非阻塞I/O模型,不仅仅对HTTP客户端请求,甚至于对诸如MySQL、PostgreSQL、Memcached以及Redis等的远程后端都进行一致的高性能响应。

2.安装OpenResty

首先安装依赖的库:

yum install -y readline-devel pcre-devel openssl-devel

然后下载OpenResty并编译安装,安装路径在/home/maidou/opt/openresty:

wget https://openresty.org/download/ngx_openresty-1.9.3.2.tar.gz

./configure ——prefix=/home/maidou/opt/openresty ——with-luajit ——with-http_stub_status_module ——with-pcre ——with-pcre-jit

gmake

gmake install

3.安装unixhot

从GitHub同步对应的代码:

git clone https://github.com/unixhot/waf.git

将WAF的Lua文件复制到Nginx配置文件目录:

cp -fr waf /home/maidou/opt/openresty/nginx/conf/

修改Nginx配置文件nginx.conf,在HTTP标签处增加WAF相关配置,其中lua_package_path表示Lua脚本对应的目录,init_by_lua_file表示Lua初始化脚本,access_by_lua_file表示处理每个请求的Lua脚本:

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

#WAF相关配置

lua_shared_dict limit 50m;

lua_package_path "/home/maidou/opt/openresty/nginx/conf/waf/?.lua";

init_by_lua_file "/home/maidou/opt/openresty/nginx/conf/waf/init.lua";

access_by_lua_file "/home/maidou/opt/openresty/nginx/conf/waf/access.lua";

Nginx重新加载配置文件生效:

./nginx -s reload

4.Nginx反向代理

Nginx+Lua WAF很重要的一个基础功能,即反向代理功能,假设需要保护网站:

http://www.douwaf.com

解析域名对应的IP地址为112.80.255.48:

nslookup www.douwaf.com

www.douwaf.com canonical name = xi.n.shifen.com.

Name: xi.n.shifen.com

www.douwaf.com canonical name = xi.n.shifen.com.

Name: xi.n.shifen.com

Address: 180.76.234.74

使用页面访问,可以正常使用,说明反向代理配置生效。测试阶段也可以不进行DNS切换,修改/etc/hosts文件也可以达到同样效果:

180.76.234.74 www.douwaf.com

查看访问日志,可以看到对应的访问记录:

61.135.169.80 - - [21/Jul/2017:19:09:03 +0800] "GET / HTTP/1.1" 200 11762 "-" "curl/7.51.0"

5.基于Nginx+Lua的WAF

可以把Lua理解为一个进程,贯穿在整个Nginx服务的HTTP报文处理的流程中,可以针对HTTP报文的任何字段进行处理,如图2-7所示。这里只是为了方便理解,事实上Lua就像胶水一样粘入了Nginx的处理流程,其实并没有真实存在一个Lua进程。下面以unixhot的WAF为例,我们一起来理解WAF的运行原理。


大家都在看

知了汇智与成都世纪超体签订战略合作协议

2021-05-29 浏览次数:0

Java语言的学习中,这一点也同样适用

2021-05-29 浏览次数:0

2023年网络安全就业现状怎么样?现在开始学网络...

2021-05-29 浏览次数:0

女生适合学前端还是后端?前端和后端的剖析

2021-05-29 浏览次数:0

成都网络安全培训机构哪家靠谱?

2021-05-29 浏览次数:0

“知了杯”第一届网页设计大赛在川职圆满落幕

2021-05-29 浏览次数:0
最新资讯