Openresty增加waf配置

1. Ngx lua waf 说明

防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击

防止svn/备份之类文件泄漏

防止ApacheBench之类压力测试工具的攻击

屏蔽常见的扫描黑客工具,扫描器

屏蔽异常的网络请求

屏蔽图片附件类目录php执行权限

防止webshell上传

2. 下载 waf

使用git

git clone https://github.com/loveshell/ngx_lua_waf.git

使用wget

wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip

3. 安装

下载解压后,将整 ngx_lua_waf 放到 nginx conf 目录中,并命名为 waf;

4. 配置

nginx安装路径假设为:/usr/local/nginx/conf/ ;以下都将以此配置为例进行说明

4.1. 在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;

4.2. 配置config.lua

--配置waf规则目录
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --修改失败提示
html=[[{"retcode":"21000","messages":"请求失败,请稍后再试","body":{}}]] --开启cc攻击,需要在nginx.conf http 段配置lua_shared_dict
CCDeny="on" -- 设置cc攻击频率,单位为秒 (如:同一个ip请求同一个地址,每秒最多请求50次)
CCrate = "50/1"

4.3. 其他详细配置说明

    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~~]]
--警告内容,可在中括号内自定义

5 修改 waf/init.lua 文件

替换sys_html 函数:

function say_html()
if Redirect then
ngx.header.content_type = "text/html;charset=UTF-8"
ngx.status = ngx.HTTP_FORBIDDEN
ngx.say(html)
ngx.exit(ngx.status)
end
end

替换denycc 函数:

function denycc()
if CCDeny then
local uri=ngx.var.uri
CCcount=tonumber(string.match(CCrate,'(.*)/'))
CCseconds=tonumber(string.match(CCrate,'/(.*)'))
local token = getClientIp()..uri
local limit = ngx.shared.limit
local req,_=limit:get(token)
if req then
if req > CCcount then
ngx.header.content_type = "application/json;charset=UTF-8"
local ret={returncode='22000',messages='请求拒绝,请稍后再试',body={}}
--ngx.header['Content-Type']="text/html;charset=UTF-8"
ngx.say(json.encode(ret))
ngx.exit(200)
return true
else
limit:incr(token,1)
end
else
limit:set(token,1,CCseconds)
end
end
return false
end

6. 启用waf

然后重启nginx,或reload 即可:
/user/local/nginx/sbin/nginx -s reload

7. 测试

curl http://www.test.cn/test/index?id=../etc/passwd

返回:{"retcode":"21000","messages":"请求失败,请稍后再试","body":{}} 说明生效

Openresty增加waf配置的更多相关文章

  1. 安装Nginx+Lua+OpenResty开发环境配置全过程实例

    安装Nginx+Lua+OpenResty开发环境配置全过程实例 OpenResty由Nginx核心加很多第三方模块组成,默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用. ...

  2. [转]通过继承ConfigurationSection,在web.config中增加自定义配置

    本文转自:http://www.blue1000.com/bkhtml/2008-02/55810.htm 前几天写了一篇使用IConfigurationSectionHandler在web.conf ...

  3. Tomcat增加Context配置不带项目名访问导致启动的时候项目加载两次

    eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/.现在需要改成这样访问http://localhost.修 ...

  4. webstorm增加内存配置参数

    webstorm增加内存配置参数 找到WebStorm.exe.vmoptions这个文件,路径如下 webstorm安装主目录>bin>WebStorm.exe.vmoptions 更改 ...

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

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

  6. 使用IConfigurationSectionHandler在web.config中增加自定义配置

    一. 场景    这里仅举一个简单应用的例子,我希望在web.config里面增加网站的基本信息,如:网站名称,网站版本号,是否将网站暂时关闭等.二. 基本实现方法1. 定义配置节点对应的类:Site ...

  7. 为OpenResty增加ngx_pagespeed模块进行优化

    1.下载ngx_pagespeed模块 wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.8.31.4-beta.zip unzip ...

  8. nopcommerce 4.1 core 学习 增加商城配置属性

    需求:  原本是想用nop 来做国际版的商城,可以像亚马逊那样 国内外通用,  专门增加一个跨进元素属性. 学习里面的一些架构思想.  国内的行情还是 像himall  会比较实用. 这是在商城的综合 ...

  9. 基于openresty的https配置实践

    最近机器人项目的子项目,由于和BAT中的一家进行合作,人家要求用HTTPS连接,于是乎,我们要改造我们的nginx的配置,加添HTTPS的支持. 当然了,HTTPS需要的证书,必须是认证机构颁发的,这 ...

随机推荐

  1. dubbo+maven多模块项目单元测试

    基本上就是记录各种报错的解决办法.基本上就是将散落在项目各个模块中的配置文件复制到测试模块中. 目录结构: ——src ——java ——test ——java ——DaoTest.java ——re ...

  2. window系统下调度数据库类型资源库中的kettle job

    已经存在kettle的一个资源库enfo,在目录/works/wxj下面有一个job (testmailsuccess.kjb)如何实现手工在kettle外部执行此job和让系统每天定时的调用此job ...

  3. (转)NGUI类关系图

  4. 创建并发布node.js module

      创建node.js module. 创建一个文件夹,用来存放module. Cd到新创建的文件夹,运行npm init,会提示输入package的信息. 可以按照这个视频的来输入.Test com ...

  5. Android实现Material Design风格的设置页面(滑动开关控件)

    前言 本文链接 http://blog.csdn.net/never_cxb/article/details/50763271 转载请注明出处 參考了这篇文章 Material Design 风格的设 ...

  6. CDN具体解释(篇一)

    CDN是一个致力于使内容传输更快.更高效的针对webserver的全局分布式网络.通过CDN来复制使这些内容能够在非常多地方同一时候存在. 比較有名的CDN厂商有AKamari,Amazon Clou ...

  7. HDU1698:Just a Hook(线段树区间更新)

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...

  8. jprofiler_windows-x64_9_1注册码

    L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038 L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257

  9. Eventually Consistent(最终一致性)(转)

    应该说搞分布式系统必读的文章了,转过来,这是2008年12月Werner revise过的版本,先贴上内容简介:分布式系统的CAP理论 CAP理论(data consistency, system a ...

  10. Eclipse 批量创建多级文件夹

      Eclipse 批量创建多级文件夹 CreateTime--2018年3月8日08:23:24 Author:Marydon 1.选中要建立文件夹的父级目录-->右键-->New--& ...