使用Nginx+Lua实现waf

技术内容来自:https://github.com/loveshell/ngx_lua_waf

软件包需求:

1 .Nginx兼容性【最后测试到1.13.6】

[root@baolin src]# wget http://nginx.org/download/nginx-1.13.6.tar.gz

2 .PCRE为Nginx编译安装关系的依赖

[root@baolin src]# wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz

3 .下载luajit解释器和ngx_devel_kit以及lua-nginx-module模块

[root@baolin src]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
[root@baolin src]# wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.0.tar.gz
[root@baolin src]# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz

4 .文件解压:

[root@baolin src]# tar xf nginx-1.13.6.tar.gz pcre-8.42.tar.gz LuaJIT-2.0.5.tar.gz v0.3.0.tar.gz v0.10.13.tar.gz

5 .安装LuaJIT Luajit是Lua即时编译器

[root@baolin src]# cd LuaJIT-2.0.5/
[root@baolin LuaJIT-2.0.5]# make && make install

6 .添加环境变量

[root@baolin src]# export LUAJIT_LIB=/usr/local/lib
[root@baolin src]# export LUAJIT_INC=/usr/local/include/luajit-2.0

7 .安装Nginx并加载模块【注意目录位置以及版本】

  • --prefix=/usr/local/nginx-1.13.6 # nginx 安装目录
  • --with-pcre=/usr/local/src/pcre-8.42 # pcre 所在目录
  • --add-module=../ngx_devel_kit-0.3.0/ # ngx_devel_kit 所在目录
  • --add-module=../lua-nginx-module-0.10.13/ # lua-nginx-module 所在目录
  • -j2 调用编译CPU的核数
[root@baolin src]# cd nginx-1.13.6/
[root@baolin nginx-1.13.6]# ./configure --user=www --group=www --prefix=/usr/local/nginx-1.13.6 --with-pcre=/usr/local/src/pcre-8.42 --with-http_stub_status_module --with-http_sub_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --add-module=../ngx_devel_kit-0.3.0/ --add-module=../lua-nginx-module-0.10.13/
[root@baolin nginx-1.13.6]# make -j2 && make install

8 .添加链接文件

[root@baolin src]# ln -s /usr/local/nginx-1.13.6 /usr/local/nginx
[root@baolin src]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

应用配置

1 .调用lua测试,编辑Nginx.conf 添加/hello

[root@baolin conf]# vim /usr/local/nginx/conf/nginx.conf
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello,lua")';
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

2 .语法检查并启动

[root@baolin conf]# /usr/local/nginx/sbin/nginx -t
[root@baolin conf]# /usr/local/nginx/sbin/nginx [root@baolin conf]# curl 192.168.55.110/hello
hello,lua

WAF部署

1 .下载waf源码:

[root@baolin conf]# cd /usr/local/nginx/conf/
[root@baolin conf]# git clone https://github.com/loveshell/ngx_lua_waf.git
[root@baolin conf]# mv ngx_lua_waf/ waf

2 .文件注释

config.lua     # 配置文件
init.lua # 规则函数
waf.lua # 逻辑关系
# wafconf # 正则匹配关系目录
wafconf/args # 里面的规则get参数进行过滤的
wafconf/url # 是只在get请求url过滤的规则
wafconf/post # 是只在post请求过滤的规则
wafconf/whitelist # 是白名单,里面的url匹配到不做过滤
wafconf/user-agent # 是对user-agent的过滤规则

3 .config.lua 注释:

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~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写

4 .修改Nginx配置文件引用WAF功能【http段加入】

    lua_shared_dict limit 50m;
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/nginx/conf/waf/waf.lua";

5 .详情:

[root@baolin conf]# cat nginx.conf
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
lua_shared_dict limit 50m;
lua_package_path "/usr/local/nginx/conf/waf/?.lua";
init_by_lua_file "/usr/local/nginx/conf/waf/init.lua";
access_by_lua_file "/usr/local/nginx/conf/waf/waf.lua";
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello,lua")';
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

6 .创建日志目录给予www用户权限:

[root@baolin conf]# mkdir /usr/local/nginx/logs/hack/
[root@baolin conf]# chown www.www /usr/local/nginx/logs/hack/

7 .启动Nginx 并测试:

[root@baolin conf]# /usr/local/nginx/sbin/nginx -t
[root@baolin conf]# /usr/local/nginx/sbin/nginx -s reload

8 .测试是否阻止请求:

http://192.168.55.110/hello?id=../etc/passwd

9 .通过ab模仿cc攻击:

[root@nq waf]# ab -c 100 -n 1200 http://192.168.55.110/hello

其他

一个页面版WAF--VeryNginx: https://github.com/alexazhou/VeryNginx

知识点:

#启动服务
/opt/verynginx/openresty/nginx/sbin/nginx #停止服务
/opt/verynginx/openresty/nginx/sbin/nginx -s stop #重启服务
/opt/verynginx/openresty/nginx/sbin/nginx -s reload web密码配置:
/opt/verynginx/verynginx/lua_script/VeryNginxConfig.lua Nginx 配置文件nginx.conf
/opt/verynginx/openresty/nginx/conf/nginx.conf 规则配置:
/opt/verynginx/verynginx/configs/config.json

使用Nginx+Lua实现waf的更多相关文章

  1. 使用NGINX+LUA实现WAF功能 和nginx 防盗链

    使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...

  2. Nginx + Lua 搭建网站WAF防火墙

    前言 对于项目里面只是使用代理等常用功能,在线安装即可,如需制定化模块,则推荐编译安装 PS:本文不仅仅包含Nginx相关的知识点,还包含了逆天学习方法(对待新事物的处理) 官方网站:https:// ...

  3. nginx+lua实现灰度发布/waf防火墙

    nginx+lua 实现灰度发布 waf防火墙 课程链接:[课程]Nginx 与 Lua 实现灰度发布与 WAF 防火墙(完)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 参考博客 Nginx ...

  4. Nginx基础 - Nginx+Lua实现灰度发布与WAF

    1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...

  5. Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙

    Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...

  6. 使用Nginx+Lua实现自定义WAF

    使用Nginx+Lua实现自定义WAF 版权声明:全部抄自赵班长的GitHub上waf项目 功能列表: 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝. 支持URL白名单,将不需要过滤的URL ...

  7. nginx+lua构建简单waf网页防火墙

    需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...

  8. 安装nginx+ngx_lua支持WAF防护功能

    安装nginx+ngx_lua支持WAF防护功能 nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.nginx以 ...

  9. 使用Nginx+Openresty实现WAF功能

    什么是WAF Web应用防护系统(也称为:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针 ...

随机推荐

  1. MAVEN打包同时引入本地jar包

    方法一(pom文件指定jar包目录进行引入) 1.将需要手动引入的包放在项目目录下,如lib目录下: 修改pom文件,引入依赖并且将scope设置为system 2.同时配置maven打包插件 方法二 ...

  2. kms访问数据库的方式(该篇只是作为个人笔记,不具有任何公共参考意图)

    项目类型:winform 语言:C# 服务程序:webservice(webservice我本人也不了解,在下一章中会总结一下对它的概念的简单理解) 情景描述:简单创建一个窗体,实现学生信息(姓名.性 ...

  3. Borůvka algorithm

    Borůvka algorithm 我好无聊啊,直接把wiki的算法介绍翻译一下把. wiki关于Borůvka algorithm的链接:链接 Borůvka algorithm是一个在所有边权都是 ...

  4. Python菜鸟快乐游戏编程_pygame(1)

    Python菜鸟快乐游戏编程_pygame(博主录制,2K分辨率,超高清) https://study.163.com/course/courseMain.htm?courseId=100618802 ...

  5. Linux性能优化实战:系统的swap变高(09)

    一.实验环境 1.操作系统 root@openstack:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu ...

  6. js根据毫米/厘米算像素px

    <html><meta http-equiv="content-type" content="text/html;charset=utf-8" ...

  7. 代理模式-JDK Proxy(Java实现)

    代理模式-JDK Proxy 使用JDK支持的代理模式, 动态代理 场景如下: 本文例子代理了ArrayList, 在ArrayList每次操作时, 在操作之前和之后都进行一些额外的操作. Array ...

  8. 认识Modbus协议

    1.什么是Modbus? Modbus协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间,控制器经由网络(例如以太网)和其它设备之间可以通信.Modbus协议定义了一个控制器能认识使用 ...

  9. Hper-V卸载

    1.txt文件输入以下内容,后缀改为cmd,以管理员身份执行 mountvol X: /s copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\ ...

  10. Leetcode#442. Find All Duplicates in an nums(数组中重复的数据)

    题目描述 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次. 找到所有出现两次的元素. 你可以不用到任何额外空间并在O(n)时间复杂度内解 ...