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头来记录源地址,保证了溯源的顺利进行。

相关推荐
ac-er888814 分钟前
MySQL如何实现PHP输入安全
mysql·安全·php
xiaoxiongip66627 分钟前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
JaneJiazhao33 分钟前
HTTPSOK:智能SSL证书管理的新选择
网络·网络协议·ssl
CXDNW33 分钟前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
无所谓จุ๊บ1 小时前
树莓派开发相关知识十 -小试服务器
服务器·网络·树莓派
道法自然04021 小时前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
EasyCVR2 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
明月看潮生3 小时前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
jjyangyou3 小时前
物联网核心安全系列——物联网安全需求
物联网·算法·安全·嵌入式·产品经理·硬件·产品设计
龙哥说跨境4 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫