当前位置: 首页 > article >正文

安装lua-nginx-module实现WAF功能

1、首先NGINX安装lua模块,参考前面文章

Nginx(编译)+Lua脚本+Redis 实现自动封禁访问频率过高IP-CSDN博客

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

ngx_lua模块的原理

1. 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
2. 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
3. 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
4. Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
5. I/O等异步操作完成时还原相关协程上下文数据,并继续运行

2、安装

# 进入目录
cd /user/local/src/
 
# 下载v0.10.9rc7.tar.gz
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
 
# 解压
tar -xzvf v0.10.9rc7.tar.gz

#安装Nginx和依赖模块
# 进入目录
cd /user/local/src/
 
# 下载
wget http://nginx.org/download/nginx-1.21.0.tar.gz
 
# 解压
tar xf nginx-1.21.0.tar.gz
 
# 进入nginx目录
cd nginx-1.21.0
 
# 编译加入如下语句
 --add-module=/usr/local/src/lua-nginx-module-0.10.9rc7 
 
# 安装
make 

make install #这步视情况执行,之前编译过NGINX不需要执行,没编译过需执行


# 添加nginx配置,在server块里添加下面内容
[root@localhost]# vim /usr/local/nginx/conf/nginx.conf
 location /lua {
    default_type 'text/plain';
    content_by_lua 'ngx.say("hello, lua")';
}
 
# 检查语法
[root@localhost]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
# 启动
[root@localhost]# nginx
 
# 测试
curl 127.0.0.1/lua

 #安装ngx_lua_waf
# 进入目录
cd /user/local/src/

# 把ngx_lua_waf下载到conf目录下
wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip
 
# 解压命名为waf
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;

# 创建日志目录
mkdir /usr/local/nginx/logs/hack
chown www /usr/local/nginx/logs/hack

# Lua_waf 配置
[root@localhost]# cat 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= []
 
# 规则文件
[root@localhost]# ll wafconf/
total 24
-rw-r--r-- 1 root root 749 Apr  6  2016 args
-rw-r--r-- 1 root root 652 Apr  6  2016 cookie
-rw-r--r-- 1 root root 733 Apr  6  2016 post
-rw-r--r-- 1 root root 335 Apr  6  2016 url
-rw-r--r-- 1 root root 177 Apr  6  2016 user-agent
-rw-r--r-- 1 root root   8 Apr  6  2016 whiteurl
 
args里面的规则get参数进行过滤的
cookie是对请求过滤的cookie过滤
url是只在get请求url过滤的规则
post是只在post请求过滤的规则
whiteurl是白名单,里面的url匹配到不做过滤
user-agent是对user-agent的过滤规则
 
# 加载Nginx
[root@localhost]# nginx -s reload
#测试效果  
访问带有参数的URL

http://192.168.20.205/?id=<script

 

知识点:

如果我想自定义规则怎么办?

1:比如说,我想拦截带admin的访问,怎么做?

在url规则里面加入admin

效果展示:

总结:
Nginx使用Lua模块实现WAF的功能很强大,可以对代码进行修改二次开发,修改成为自己想要的效果,不妨试试看看。同样Nginx+Lua实现的WAF也能完成xss、sql注入等注入型的web攻击。


http://www.kler.cn/a/387384.html

相关文章:

  • 灵活就业,真的等同于失业吗?“三无人员”如何齐短板获贷款
  • btstack协议栈实战篇--SDP Client - Query Remote SDP Records
  • Kubebot:一款Google云平台下的Slackbot安全测试工具
  • el-input 正则表达式校验输入框不能输入汉字
  • 面经—科大讯飞
  • 浅析pytorch中的常见函数和方法
  • 瞬间对大模型与NLP的兴趣达到了1000000000%
  • 腾讯混元3D-1.0:文本到三维和图像到三维生成的统一框架
  • websphere CVE-2015-7450反序列化和弱口令,后台Getshell
  • 【赵渝强老师】Redis的AOF数据持久化
  • Spring——入门
  • MySQL 数据表常用编码类型解析
  • Java | Leetcode Java题解之第554题砖墙
  • 怎么把图片快速压缩变小?图片在线压缩的3款简单工具
  • 跨境访问难题?SD-WAN跨境加速专线加速电商社交媒体推广
  • 静态NAT和NAPT的区别
  • MySQL数据库专栏(四)MySQL数据库链接操作C#篇
  • 字节青训营刷题--完美偶数计数【简单】
  • Unity 读取文本文档 方法总结
  • mtk Android7定制修改
  • Ascend Extension for PyTorch的源码解析
  • WPF自定义翻页控件
  • 简单的TCP程序
  • RK3568笔记1:BootRom
  • 【Linux 29】传输层协议 - UDP
  • 28-在CARLA包中获取地图