1 WAF介绍
所谓WAF,即Web Application Firewall,网络应用防火墙,是通过一系列执行针对HTTP/HTTPS的安全策略来为web应用提供安全防护的产品。有别于传统的防火墙,WAF专门针对应用层web应用而设计,能够起到防止流量攻击、SQL注入、XSS攻击等作用。
1.1 WAF分类
通常而言,WAF可以分为以下4类:
软件型WAF:本身是一个软件,部署在服务器上,检测是否存在web攻击。
硬件型WAF:本身是一款硬件,可以有多种部署方式,如果是串联到链路中,则可以拦截恶意流量,如果是以旁路的形式部署,则只能记录攻击但是不能拦截。硬件型WAF一般而言比软件型WAF更加昂贵,但是检测速度快,不易成为网站瓶颈。
云WAF:我们可以将云WAF简单理解为带有WAF功能的CDN(内容分发网络),因为其实现机理与CDN基本相同,都是通过更改目标站点的DNS记录,使其指向云WAF,然后对站点的访问进行过滤。云WAF通常以反向代理的方式进行工作,其最大的优点是方便快捷,但是如果攻击者能够找到站点的真实IP地址,那么云WAF就存在被直接绕过的风险。
站点内置WAF:所谓站点内置WAF,即网站的开发者考虑到站点的安全性,将一些过滤功能写成代码,嵌入到站点内,或者直接嵌入到页面代码中,或者以一个单独的文件列出,然后被相关页面所引用。这种WAE的灵活性非常高,因为是直接开发在页面上,因此可以针对一项非常具体的业务,乃至一个微小的功能来实现检测和规律,但是相应的其通用型就比较低了。
1.2 WAF常见功能
①审计设备:对于系统自身安全相关的下列事件产生审计记录
管理员登录后进行的操作行为;
对安全策略进行添加、修改、删除等操作行为;
对管理角色进行增加、删除和属性修改等操作行为;
对其他安全功能配置参数的设置或更新等行为。
②访问控制设备:用来控制对Web应用的访问,既包括主动安全模式也包括被动安全模式。
③架构及网络设计工具:当运行在反向代理模式,他们被用来分配职能,集中控制,虚拟基础结构等。
④WEB应用加固工具。
这些功能增强了被保护Web应用的安全性,它不仅能够屏蔽WEB应用固有弱点,而且能够保护WEB应用编程错误导致的安全隐患。
1.3 WAF防护原理
WAF之所以能够起到对网络应用进行防护的作用,主要是基于以下手段:
异常检测机制:拒绝不符合HTTP标准的请求。
白名单/黑名单:采取白名单或者黑名单的方式,对HTTP内容进行验证。
基于规则和基于异常的保护:定义一些安全规则或者异常状态,基于此对服务器进行安全防护。
状态管理:对会话进行防护。
信息泄露保护:防止服务器信息泄露。
扫描器识别:WAF对于一些扫描器会进行识别并禁止扫描,常用的扫描器识别技术有
①扫描器指纹。
②单IP+cookie指定时间内访问触发规则次数。
③验证码验证。
2 openresty
2.1 介绍
Openresty是在Nginx 的基础上集成开发了 Lua 语言实现高性能的扩展功能,在不降低原来Nginx 性能的情况下通过Lua 语言的功能增加诸如更细致的访问控制、集成数据库和缓存访问、web 应用安全访问等多种功能。
2.2 安装(CentOS 7)
1、更新软件
yum -y update
2、添加openresty仓库
1 |
|
3、安装openresty
yum -y install openresty
4、安装命令行工具resty
yum install -y openresty-resty
5、发布新版本后,更新软件
1 |
|
6、启动naigx
/usr/local/openresty/nginx/sbin/nginx
7、访问http://[ip]:80
8、切换root,修改配置
其他系统安装,参考官方文章:
https://openresty.org/cn/installation.html
2.3 配置
2.3.1 防火墙
不能从别的IP访问,查看防火墙状态:systemctl status firewalld
关闭防火墙命令:
1 |
|
关闭防火墙后可以从其他IP访问
2.3.2 创建网页
默认安装路径是/usr/1oca1/openresty
,修改nginx配置文件,可以创建自己的网页
1 |
|
测试配置文件并重启:
1 |
|
2.3.3 配置PHP
1、安装php
yum install -y php
2、修改配置文件usr/local/openresty/nagix/conf/nginx.conf
1 |
|
3、找到php.ini
centos中文件路径为:/etc/php.ini
找不到配置文件时,可以使用命令搜索文件:find/*-name php.ini
去掉cgi.fix_pathinfo=1
前面的注释
4、开启php-cgi:
php-cgi -b 127.0.0.1:9000 -c /etc/php.ini
5、重载nginx配置:
/usr/local/openresty/nginx/sbin/nginx -s reload
之后再去目录下php文件可以执行解析。
3 WAF使用
3.1 部署WAF
1、克隆WAF代码:git clone https://github.com/unixhot/waf.git
2、将下载的waf文件夹复制到/usr/local/openresty/nginx/conf/
1 |
|
3、修改waf中的config.lua文件,配置日志文件、规则文件路径、跳转地址,并根据需要修改触发WAF的显示信息
1 |
|
4、赋予日志文件权限:chmod -R 777 /var/log/nginx
5、开启WAF:打开/usr/local/openresty/nginx/conf/nginx.conf
,在http{}
中增加如下内容:
1 |
|
6、建立resty的软连接:
1 |
|
7、检查配置文件并重载nginx服务:
1 |
|
WAF部署好了,现在访问木马文件会被拦截。
管理者查看日志目录:/var/log/nginx
扫描工具大面积403说明目标网站有WAF。
3.2 理解WAF
WAF简单描述,就是解析HTTP请求(协议解析模块),规则检测(规则模块),做不同的防御动作(动作模块),并将防御过程(日志模块)记录下来。所以本文中的WAF的实现由五个模块(配置模块、协议解析模块、规则模块、动作模块、错误处理模块)组成。
支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝。
支持URL白名单,将不需要过滤的URL进行定义。
支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持CC攻击防护,单个URL指定时间的访问次数,超过设定值,直接返回403。
支持Cookie过滤,匹配自定义规则中的条目,然后进行处理(返回403)。
支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些,返回403。
支持URL参数过滤,原理同上。
支持日志记录,将所有拒绝的操作,记录到日志中去。
日志记录为JSON格式,便于日志分析,例如使用ELK进行攻击日志收集、存储、搜索和展示。
3.3 配置过滤规则
waf/access.lua文件配置了检测顺序:
1 |
|
过滤规则在waf/relu-config/下,可根据需求自行调整,每条规则需换行,或者用|分割。
3.3.1 IP白名单
waf/rule-config/whiteip.rule
添加IP地址,对于这些地址发起的请求,WAF不会拦截。
3.3.2 IP黑名单
waf/rule-config/blackip.rule
添加IP地址
3.3.3 user-agent配置
WAF可以检测请求中user-agent字段,并拦截带有指定user-agent值的请求。
waf/rule-config/useragent.rule
添加
3.3.4 其他过滤规则
args.rule里面的规则get参数进行过滤的
url.rule是只在get请求url过滤的规则
post.rule是只在post请求过滤的规则
cookie.rule是对cookie中数据的过滤规则
whiteurl.rule是这是url的白名单