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

Nginx+Lua实现WAF

参考地址:http://www.2cto.com/Article/201303/198425.html

2016年8月2日

安装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 --add-module=/root/ngx_devel_kit-master --add-module=/root/lua-nginx-module-master --with-ld-opt=-Wl,-rpath,/usr/local/lib

我这里已经安装过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();

或者直接在网页上请求

结果都是如下图所示,被拦截了。(写博客的时候51cto抽了,图片传不上来了)

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

(写博客的时候51cto抽了,图片传不上来了)

一些说明:

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

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

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

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

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

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

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

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

说明:

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

时间: 2024-08-08 17:29:41

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

nginx + lua 构建网站防护waf(一)

最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下.话不多说直接开始. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击 防止svn/备份之类文件泄漏 防止ApacheBench之类压力测试工具的攻击 屏蔽常见的扫描黑客工具,扫描器 屏蔽异常的网络请求 屏蔽图片附件类目录php执行权限 防止web

使用Nginx+Lua实现waf

使用Nginx+Lua实现waf 软件包需求: 1 .Nginx兼容性[最后测试到1.13.6] wget http://nginx.org/download/nginx-1.13.6.tar.gz 2 .PCRE为Nginx编译安装关系的依赖 wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz 3 .下载luajit解释器和ngx_devel_kit以及lua-nginx-module模块

使用nginx lua实现网站统计中的数据收集

使用nginx lua实现网站统计中的数据收集 导读 网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于javascript的.在此简要分析数据收集的原理,并按照步骤,带领大家一同搭建一个实际的数据收集系统. 数据收集原理分析 简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页.点击某按钮.将商品加入购物车等)及行为附加数据(如某下单

nginx lua 安装spdy

关于spdy 摘自 http://zh.wikipedia.org/wiki/SPDY SPDY SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 .Google最早是在Chromium中提出的SPDY协议[1].目前已经被用于Google Chrome浏览器中来访问Google的SSL加密服务. SPDY当前并不是一个标准协议,但SPDY的开发组已经开始推动SPDY成为正式标准(现为互联网草案),Google Chrome,Mozilla Firefox,Opera和Inte

高频访问IP限制 --Openresty(nginx + lua) [反爬虫之旅]

嗯-.本人是从写爬虫开始编程的,不过后面做web写网站去了,好了,最近web要搞反爬虫了,哈哈哈,总算有机会把之以前做爬虫时候见识过的反爬一点点给现在的网站用上了~ 做爬虫的同志,有怪莫怪喽~还有求别打死 > < 首先要提一下AJAX,现在普天下网页几乎都是往特定的数据接口请求数据了,除了什么首屏渲染这种服务端渲染好html以外,几乎没有什么静态网页了.我看了有一些帖子说AJAX让爬虫难做,可是我觉得结合一些工具(比如chrome的开发者工具),找到AJAX所请求的后端数据接口一点也不难,而且

使用Nginx+Lua代理Hadoop HA

一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNode.YARN 的ResourceManager.HDFS的web页面只有通过Active的NameNode才能正常访问,同样地,YARN的web页面也只有通过Active的ResouceManager才能正常访问. (1) HDFS HA的Web访问 正常使用Nginx的proxy_pass代理单

使用Nginx+Lua(OpenResty)开发高性能Web应用

在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Nginx团队也开始意识到这个问题,开发了nginxScript:可以在Nginx中使用JavaScript进行动态配置一些变量和动态脚本执行:而目前市面上

nginx lua redis 访问频率限制(转)

1. 需求分析 Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的需求. Nginx处理请求的过程一共划分为11个阶段,分别是: post-read.server-rewrite.find-config.rewrite.post-rewrite. preaccess.access.post-access.try-files.content.log. 在openre

Nginx+Lua(OpenResty)开发高性能Web应用

使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开发主要是以C/C++模块的形式进行,整体学习和开发成本偏高:如果有一种简单的语言来实现Web应用的开发,那么Nginx绝对是把好的瑞士军刀:目前Ngin