`

nginx+lua实现简单的waf网页防火墙功能

阅读更多

安装LuaJIT

http://luajit.org/download/LuaJIT-2.0.4.tar.gz

tar xf LuaJIT-2.0.4.tar.gz

cd LuaJIT-2.0.4

make && make install 即可

下载ngx_devel_kit

https://codeload.github.com/simpl/ngx_devel_kit/zip/master

unzip ngx_devel_kit-master.zip

解压后的路径为:root/ngx_devel_kit-master

下载nginx_lua_module解压

https://github.com/openresty/lua-nginx-module#readme

unzip lua-nginx-module-master.zip

cd lua-nginx-module-master

安装nginx或给nginx打补丁

nginx -v 查看nginx的版本号

# nginx -v

nginx version: nginx/1.8.0

nginx -V 查看以前的编译参数

# nginx -V

nginx version: nginx/1.8.0

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-google_perftools_module

我这里已经安装过nginx1.8了。

那么下面就是给nginx打补丁的事情了。如下:

进到nginx1.8的源代码目录下。执行下面的一系列命令:

# 导入环境变量,编译

# exportLUAJIT_LIB=/usr/local/lib #这个很有可能不一样

# exportLUAJIT_INC=/usr/local/include/luajit-2.0#这个很有可能不一样

# cd /home/tools/lnmp1.2-full/src/nginx-1.8.0

#./configure \

--user=www --group=www \

--prefix=/usr/local/nginx \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_spdy_module \

--with-http_gzip_static_module \

--with-ipv6 \

--with-http_sub_module \

--with-google_perftools_module \

--add-module=/root/ngx_devel_kit-master\

--add-module=/root/lua-nginx-module-master\

--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"

# make -j4 && make install

准备nginx的攻击日志目录

# mkdir -p /home/wwwlogs/attack

# chown www.www /home/wwwlogs/attack

# chmod -R 755 /home/wwwlogs/attack

安装nginx的Lua_waf模块

官方地址:https://github.com/loveshell/ngx_lua_waf

# wget https://codeload.github.com/loveshell/ngx_lua_waf/zip/master

# unzip ngx_lua_waf-master.zip

# cd ngx_lua_waf-master

# mkdir /usr/local/nginx/conf/waf

# cp -a ./ /usr/local/nginx/conf/waf

修改nginx的配置文件,在http段加入如下内容:

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

lua_shared_dict limit 10m; 开启拦截cc攻击必须加这条规则

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

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

修改/usr/local/nginx/conf/waf/config.lua中如下2部分内容即可:

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

attacklog = "on"

logdir ="/home/wwwlogs/attack"

UrlDeny="on"

Redirect="on"

CookieMatch="on"

postMatch="on"

whiteModule="on"

black_fileExt={"php","jsp"}

ipWhitelist={"127.0.0.1"}

ipBlocklist={"1.0.0.1"}

CCDeny="on"

CCrate="100/60"

配置文件说明:

RulePath = "/usr/local/nginx/conf/waf/wafconf/" --规则存放目录

attacklog = "off" --是否开启攻击信息记录,需要配置logdir

logdir ="/usr/local/nginx/logs/hack/"--log存储目录,该目录需要用户自己新建,需要nginx用户的可写权限

UrlDeny="on" --是否拦截url访问

Redirect="on" --是否拦截后重定向

CookieMatch = "on" --是否拦截cookie攻击

postMatch = "on" --是否拦截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攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)

CCrate ="100/60" --设置cc攻击频率,单位为秒. 默认1分钟同一个IP只能请求同一个地址100次

html=[[Please go away~~]] --警告内容,可在中括号内自定义

备注:不要乱动双引号,区分大小写

重启nginx

# nginx -t

# /etc/init.d/nginx restart 重启nginx

恶意访问测试

# curl http://xxxx/test.php?id=../etc/passwd

# curl http://192.168.2.12/index.php?cmd=phpinfo();

或者直接在网页上请求

结果都是如下图所示,被拦截了。

 

wKioL1ekf3_xPgUdAAB7idVmlh0081.png
 

 

此外,在/home/wwwlogs/attack目录下已经有日志文件记录下整个攻击的日志了。

 

wKioL1ekf4Cj-cLBAAAaAgoKr2M737.png

 

 

wKiom1ekf37ApnUsAABXpW02Dew226.png

 

一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

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

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

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

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

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

默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可。

拦截到的非法请求,记录在日志文件名称格式如下:虚拟主机名_sec.log

说明:

这玩意貌似只能防止一些简单的sql注入类的语句,对于一些精心构造的恶意语句还是拦截不了的。

另外,我在公司的服务器上装了它,后台客服反应会出现form表单中图片无法上传的情况。

分享到:
评论

相关推荐

    lua版waf web防火墙 redis+nginx版

    **lua版WAF Web防火墙**是针对Web应用程序的安全防护系统,主要利用Lua脚本语言进行规则编写和处理。Web应用程序防火墙(WAF)的主要目的是保护网站免受各种恶意攻击,如SQL注入、跨站脚本攻击(XSS)、文件包含漏洞...

    WEB应用防火墙 《Nginx+Lua在网络安全方面的应用》理财范 周为 - elasticsearch.zip

    WEB应用防火墙 《Nginx+Lua在网络安全方面的应用》理财范 周为 - elasticsearch 威胁情报 应急响应 安全体系 恶意软件 数据安全

    Centos 7 64 +[nginx+ngx_lua 模块] 支持WAF防护功能

    本文将介绍如何在CentOS 7 64位系统上配置Nginx服务器,集成ngx_lua模块以支持Web应用防火墙(WAF)防护功能。Nginx是一款轻量级、高性能的Web服务器和反向代理服务器,因其高效并发处理能力而被广泛应用于各大...

    linux-使用NginxLua实现的WAF

    在Nginx Lua实现的WAF中,我们可以编写Lua脚本来实现这些功能。 **3. Nginx Lua WAF实现步骤** (1)**安装Nginx Lua模块**:首先,我们需要确保Nginx服务器已经安装了Lua模块,这通常需要编译Nginx时添加lua-...

    Nginx-Lua-WAF是一款基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙.zip

    Nginx-Lua-WAF是一款基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙.zip

    nginx-lua-waf:Nginx-Lua-WAF是一种基于Nginx的使用Lua语言开发的灵活高效的Web应用层防火墙

    OpenResty是Nginx的一个发行版,集成了LuaJIT,使得开发者可以直接在Nginx配置文件中编写Lua脚本,实现动态处理和复杂逻辑,这为构建WAF提供了可能。Lua语言简洁、轻量,且易于学习,因此成为Nginx-Lua-WAF的理想...

    ngx_lua_waf-master.zip_lua_nearly11h_nginx_ngx_lua_waf

    ngx_lua_waf是一个基于Nginx的Web应用防火墙,其核心是利用了Nginx的ngx_lua模块,通过Lua脚本实现灵活且强大的安全防护功能。ngx_lua_waf项目名称中的“master”通常指的是该项目的主分支或最新版本。"nearly11h...

    Nginx知识体系入门实践.zip

    目录网盘文件永久链接 01.Nginx快速入门 02.Nginx常用模块 03.Nginx提供静态资源WEB服务 ...10Nginx+Lua-实战代码灰度发布实战-WAF防火墙 11.Nginx性能优化与压测工具 12.Nginx常见问题 13.Nginx架构总结 资料

    ngnix_lua_waf 黑白名单

    Nginx Lua WAF(Web Application Firewall)是一种基于Nginx服务器并利用Lua脚本实现的Web应用防火墙。它通过在HTTP请求到达应用程序之前进行过滤,来保护Web应用免受恶意攻击。Lua是一种轻量级、高性能的脚本语言,...

    lua-resty-waf:基于OpenResty堆栈的高性能WAF

    `lua-resty-waf`是一个高效的Web应用防火墙(WAF),它构建在OpenResty平台上,利用Lua语言的强大功能为Nginx提供动态的安全策略执行。OpenResty集成了Nginx与LuaJIT,使得我们可以编写高性能的、动态的网络应用和...

    lua-nginx-module-0.10.9rc7

    Lua-nginx-module,一个强大的扩展模块,为Nginx服务器带来了动态脚本处理能力,特别是在Web服务性能优化、复杂逻辑处理和自定义功能实现方面,展现出了其独特的优势。此版本为0.10.9rc7,兼容Nginx 1.21,是开发者...

    5.多角度对抗.WAF.的思路与实例.pdf

    此外,“Nginx-lua-waf”可能存在识别错误,正确应为“Nginx Lua WAF”,指的是一套使用Lua脚本语言编写的WAF规则集。还有“Modsecurity”后跟随的“(cid:60)(cid:2)(cid:105)(cid:90)(cid:9)(cid:118)(cid:81)”...

    第08篇:Bypass ngx_lua_waf SQL注入防御(多姿势)1

    本文将详细介绍三种独特的绕过ngx_lua_waf SQL注入防御的方法,并提供具体的实现细节。 #### 0x01 环境搭建 在深入讨论具体的绕过技术之前,我们需要构建一个能够运行ngx_lua_waf的环境。可以通过GitHub获取源码并...

    第三篇:Bypass ngx_lua_waf SQL注入防御(多姿势)1

    ngx_lua_waf是一款基于ngx_lua的Web应用防火墙,以其高性能和轻量级著称。它内置了一系列针对常见攻击手段(如SQL注入)的防御规则。然而,任何安全系统都有其边界和局限性。本文将探讨三种绕过ngx_lua_waf SQL注入...

    VeryNginx:基于lua-nginx-module(openresty)的功能强大且友好的nginx,可提供WAF,控制面板和仪表板

    它实现了高级防火墙(waf),访问统计信息和其他一些功能。 它增强了Nginx的功能,并提供了友好的Web界面。用户名/密码: verynginx / verynginx 完整的配置指南可以在以下网站找到: 。Nginx运行状态分析每秒请求...

    Nginx Module Extension

    - **安全模块**:增强安全性,如实现DDoS防护或WAF(Web应用防火墙)功能。 #### 知识点四:书籍内容概述 - **作者介绍**:本书作者Usama Dar拥有超过13年的软件系统工作经验,曾在多家知名公司任职,并积极参与...

    nginx上传下载之openresty-1.15.8.2.tar.gz

    - **安全防护**:通过Lua编写规则,实现WAF(Web应用防火墙)功能。 **6. 开发工具与社区资源** 为了提升开发效率,OpenResty社区提供了很多工具,如RESTy CLI工具、Luarocks包管理器等。同时,OpenResty的官方...

    Linux下给nginx安装waf模块

    ngx_lua_waf是一个基于ngx_lua的web应用防火墙。代码很简单,开发初衷主要是使用简单,高性能和轻量级。下面我们来看看如何在为nginx安装waf模块

    配合openresty使用waf模块

    标题 "配合openresty使用waf模块" 涉及的核心技术是Web应用程序防火墙(Web Application Firewall,简称WAF)以及如何将其与OpenResty集成。OpenResty是一款基于Nginx的全功能Web服务框架,它集成了LuaJIT编程语言,...

Global site tag (gtag.js) - Google Analytics