NG+WAF实现应用安全访问

一、基本概念

什么是waf?

Web应用防火墙(waf)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品,WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。

什么是ngx_lua_waf?

ngx_lua_waf是一个基于ngx_lua的web应用防火墙,Nginx支持开启waf模块,主要功能有:

支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝(新增cdip功能支持ip段)

支持URL白名单,将不需要过滤的URL进行定义

支持User-Agent的过滤,匹配自定义规则中的条目,然后进行处理

支持CC攻击防护,单个URL指定时间的访问次数,超过设定值(新增针对不同域名)

支持Cookie过滤,匹配自定义规则中的条目,然后进行处理

支持URL过滤,匹配自定义规则中的条目,如果用户请求的URL包含这些

支持URL参数过滤,原理同上

支持日志记录,将所有拒绝的操作,记录到日志中去

新增支持拉黑缓存(默认600秒)

二、为啥要做NG+WAF

原有网络架构中硬件waf是侧挂在防火墙上,在现网防护过程中,请求中https解析,攻击防护等操作会经常出现大量的占用cpu的使用情况,导致waf的cpu利用率居高不下,严重时甚至会影响正常业务的使用。

Nginx加载waf插件后,客户端流量先经防火墙,再到LVS四层负载均衡分发到应用层Nginx上 ,然后将请求流量先传到WAF,WAF通过检测后,再允许Web节点的响应返回 。Nginx还可根据地址端口配置,分发到不同的WAF上;不同Nginx流量也可以分发到同一个WAF。如果WAF发生故障超时后Nginx直接响应,不会造成业务中断 。

三、安装加载ngx_lua_waf模块

1、安装系统依赖软件包

yum -y install gcc gcc-c++ autoconf automake make unzip

yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

2、下载ng支持模块

安装过程中需要的LuaJIT、lua-nginx-module和ngx_dev_kit模块、以及nginx和waf模块放在资源中,可下载离线安装。

https://download.csdn.net/download/vincent0920/88752133

3、将下载的离线包拷贝至/usr/local/src目录中

4、安装LuaJIT2.0

LuaJIT是Lua的即时编译器,简单来说,LuaJIT是一个高效的Lua虚拟机。

进入目录

cd /usr/local/src/

解压

tar xf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5

编译

make

安装

make install PREFIX=/usr/local/lj2

建立软连接

ln -s /usr/local/lj2/lib/libluajit-5.1.so.2 /lib64/

添加环境变量

export LUAJIT_LIB=/usr/local/lj2/lib/

export LUAJIT_INC=/usr/local/lj2/include/luajit-2.0/

5、安装ngx_devel_kit

kit模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。

进入目录

cd /user/local/src/

解压

unzip xf ngx_devel_kit.gz

6、安装lua-nginx-module

ngx_lua_module 是一个nginx http模块,它把 lua 解析器内嵌到 nginx,用来解析并执行lua 语言编写的网页后台脚本。

安装

进入目录

cd /user/local/src/

解压

unzip lua-nginx-module.gz

7、 安装Nginx

进入目录

cd /user/local/src/

解压

tar xf nginx-1.21.0.tar.gz

进入nginx目录

cd nginx-1.21.0

编译

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --add-module=/usr/local/src/lua-nginx-module --add-module=/usr/local/src/ngx_devel_kit --with-stream

安装

make && make install

添加nginx配置,在server块里添加下面内容

vim /usr/local/nginx/conf/nginx.conf

location /lua {

default_type 'text/plain';

content_by_lua 'ngx.say("hello, lua")';

}

检查语法

/usr/local/nginx/sbin/nginx -t

启动

nginx

测试

curl 127.0.0.1:80/lua

8、安装ngx_lua_waf

进入目录

cd /user/local/src/

#解压目录

unzip master.zip -d /usr/local/nginx/conf/

更改目录名

mv /usr/local/nginx/conf/ngx_lua_waf-master /usr/local/nginx/conf/waf

在nginx.conf的http段添加

lua_package_path "/usr/local/nginx/conf/waf/?.lua";

lua_shared_dict limit 10m;

init_by_lua_file /usr/local/nginx/conf/waf/init.lua;

access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

在nginx.conf最外层添加用户运行

user www;

#操作系统新增www用户

#useradd www

创建日志目录

mkdir /usr/local/nginx/logs/hack

chown www /usr/local/nginx/logs/hack

9、waf规则文件介绍

/usr/local/nginx/conf/waf/wafconf

args里面的规则get参数进行过滤的

cookie是对请求过滤的cookie过滤

url是只在get请求url过滤的规则

post是只在post请求过滤的规则

whiteurl是白名单,里面的url匹配到不做过滤

user-agent是对user-agent的过滤规则

/usr/local/nginx/conf/waf/ config.lua

规则存放路径

RulePath = "/usr/local/nginx/conf/waf/wafconf/"

是否开启攻击信息记录,需要配置logdir

attacklog = "on"

log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限

logdir = "/usr/local/nginx/logs/hack/"

是否拦截url访问

UrlDeny="on"

是否拦截后重定向

Redirect="on"

是否拦截cookie攻击

CookieMatch="on"

是否拦截post攻击

postMatch="on"

是否开启URL白名单

whiteModule="on"

填写不允许上传文件后缀类型

black_fileExt={"php","jsp"}

ip白名单,多个ip用逗号分隔

ipWhitelist={"127.0.0.1"}

ip黑名单,多个ip用逗号分隔

ipBlocklist={"192.168.10.1"}

是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)

CCDeny="off"

设置cc攻击频率,单位为秒.

默认1分钟同一个IP只能请求同一个地址100次

CCrate="100/60"

告警内容

html= []

10、启动测试验证

加载Nginx

nginx -s reload

#访问带有参数的URL

四、经验总结

在NG+WAF使用过程中,可以做到接收方向的流量全检测,但是响应方向的流量暂不支持检测,也不支持防篡改功能, http flood功能,无法做反向探测。改造后的架构对性能影响较小,默认1秒超时,若超时waf依然没有响应,nginx自动转发.对nginx的压力暂时未达到瓶颈,且在当前架构中nginx支持横向扩容,所以不会影响nginx的并发。

同时nginx和waf之间的交互对http/1.1流量利用率有了提高,且所有的流量解析工作都是nginx完成,大大降低了waf的工作量。另外通过XXF头来记录源地址,保证了溯源的顺利进行。

相关推荐
爱吃涮毛肚的肥肥(暂时吃不了版)10 分钟前
计算机网络34——Windows内存管理
网络·计算机网络·udp
kinlon.liu19 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
码哝小鱼1 小时前
firewalld封禁IP或IP段
linux·网络
sec0nd_2 小时前
1网络安全的基本概念
网络·安全·web安全
AORO_BEIDOU2 小时前
防爆手机+鸿蒙系统,遨游通讯筑牢工业安全基石
5g·安全·智能手机·信息与通信·harmonyos
青柠视频云2 小时前
青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
服务器·网络·音视频
网安CILLE2 小时前
2024年某大厂HW蓝队面试题分享
网络·安全·web安全
沐风ya2 小时前
Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)
网络
SUGERBOOM2 小时前
【网络安全】网络基础第一阶段——第一节:网络协议基础---- OSI与TCP/IP协议
网络·网络协议·web安全