nginx+lua实现简单的waf网页防火墙功能
原文:http://www.2cto.com/net/201608/534272.html
安装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();
或者直接在网页上请求
结果都是如下图所示,被拦截了。
此外,在/home/wwwlogs/attack目录下已经有日志文件记录下整个攻击的日志了。
一些说明:
过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割
args里面的规则get参数进行过滤的
url是只在get请求url过滤的规则
post是只在post请求过滤的规则
whitelist是白名单,里面的url匹配到不做过滤
user-agent是对user-agent的过滤规则
默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可。
拦截到的非法请求,记录在日志文件名称格式如下:虚拟主机名_sec.log
说明:
这玩意貌似只能防止一些简单的sql注入类的语句,对于一些精心构造的恶意语句还是拦截不了的。
另外,我在公司的服务器上装了它,后台客服反应会出现form表单中图片无法上传的情况。
nginx+lua实现简单的waf网页防火墙功能的更多相关文章
- nginx+lua实现灰度发布/waf防火墙
nginx+lua 实现灰度发布 waf防火墙 课程链接:[课程]Nginx 与 Lua 实现灰度发布与 WAF 防火墙(完)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 参考博客 Nginx ...
- nginx+lua构建简单waf网页防火墙
需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...
- nginx + lua 构建网站防护waf(一)
最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下 ...
- 使用NGINX+LUA实现WAF功能 和nginx 防盗链
使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...
- Nginx + Lua 搭建网站WAF防火墙
前言 对于项目里面只是使用代理等常用功能,在线安装即可,如需制定化模块,则推荐编译安装 PS:本文不仅仅包含Nginx相关的知识点,还包含了逆天学习方法(对待新事物的处理) 官方网站:https:// ...
- 使用Nginx+Lua实现waf
使用Nginx+Lua实现waf 技术内容来自:https://github.com/loveshell/ngx_lua_waf 软件包需求: 1 .Nginx兼容性[最后测试到1.13.6] [ro ...
- Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙
Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...
- 使用Nginx+Lua实现自定义WAF
使用Nginx+Lua实现自定义WAF 版权声明:全部抄自赵班长的GitHub上waf项目 功能列表: 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝. 支持URL白名单,将不需要过滤的URL ...
- Nginx+Lua+MySQL/Redis实现高性能动态网页展现
Nginx结合Lua脚本,直接绕过Tomcat应用服务器,连接MySQL/Redis直接获取数据,再结合Lua中Template组件,直接写入动态数据,渲染成页面,响应前端,一次请求响应过程结束.最终 ...
随机推荐
- Infinite V1 Release Note
游戏地址 PLAY 玩法说明 WASD 控制角色移动 更新内容 - 初步完成了角色移动(攻击状态) 开发心得 独立做游戏 其实最耽误时间的就是在自己的短板上, 对于我来说 就是3D建模和动作制作. ...
- C++中的"未定义的行为"
2.1 位运算 位运算的运算对象是整数类型的,并且把运算对象看成是一个二进制位的集合.运算对象可以是带符号也可以是无符号.如果是带符号且值为负,那么位运算如何处理运算对象的符号位依赖于机器.而且此时的 ...
- iOS 如何在Label中显示html的文本
if (self.messageModel) { NSString * htmlString = self.messageModel.contentText; NSAttributedString * ...
- Java操作Excel: POI不能创建xlsm问题的方法(源自StackOverFlow)
write to xlsm (Excel 2007) using apache poi POI的下载(记得把其中的jar包全部加到工程里哦)http://mirror.bit.edu.cn/apach ...
- c++减法高精度算法
c++高精度算法,对于新手来说还是一大挑战,只要克服它,你就开启了编程的新篇章,算法. 我发的这个代码并不是很好,占用内存很多而且运行时间很长(不超过0.02秒),但是很好理解,很适合新手 高精算法的 ...
- java实现二分查找
/** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...
- 论文阅读(Lukas Neuman——【ICDAR2015】Efficient Scene Text Localization and Recognition with Local Character Refinement)
Lukas Neuman--[ICDAR2015]Efficient Scene Text Localization and Recognition with Local Character Refi ...
- Node.js中的Session,不要觉得简单哦。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...
- 机器学习实战4:Adaboost提升:病马实例+非均衡分类问题
Adaboost提升算法是机器学习中很好用的两个算法之一,另一个是SVM支持向量机:机器学习面试中也会经常提问到Adaboost的一些原理:另外本文还介绍了一下非平衡分类问题的解决方案,这个问题在面试 ...
- 定位和xml解析和gson解析加上拉加载,下拉刷新
这里的上拉加载,下拉刷新用到是依赖包 Mainactivity,xml解析和定位 package com.exmple.autolayout; import java.util.List; impor ...