让Nginx支持Lua导入过滤规则担任WAF角色

Posted 运维沙龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让Nginx支持Lua导入过滤规则担任WAF角色相关的知识,希望对你有一定的参考价值。

 

       对于互联网业务威胁比较大的网络攻击,大部分是应用层接口的入侵威胁,常见的“拖库”导致企业数据外泄,近年来发生多起,一般以WEB为入侵接口。WAFWeb应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

       一般企业,可以使用nginx + Lua 的方式,在企业网站前端,拦截一些一般攻击,如果是企业互联网业务规模大,依然建议专人专事,站在巨人的肩膀上处理问题,去寻求更专业的解决方案,下面简单的描述一下,Nginx + Lua 的解决方法:

 

前提技术基础:

1nginx + php-fpm,能编译完成基本的Nginx + PHP环境。

 

项目软件源:

1 https://github.com/loveshell/ngx_lua_waf

2 http://tengine.taobao.org/

注:tengine 是基于Nginx 的开源项目,也可以选用原生的Nginx


 

下载文件:

https://codeload.github.com/loveshell/ngx_lua_waf/zip/master/ngx_lua_waf-master.zip

http://tengine.taobao.org/download/tengine-2.1.2.tar.gz

 

安装一些常见的系统组件:

yum install wget gcc gcc-c++ pcrepcre-devel openssl openssl-devel zlib zlib-devel

yum install lua

 

编译安装Tengine,目标让Tengine 支持Lua,正则表达式等等,缺的插件包可以搜索得到。

 

cd tengine-2.1.2

./configure--add-module=../ngx_cache_purge-2.1 --add-module=../ngx_devel_kit-0.2.17rc2/--add-module=../lua-nginx-module-0.7.4/ --with-http_sub_module--with-http_gzip_static_module --with-pcre-jit

 

make

make install

 

WAF 文件放入到Nginx 目录下:

mkdir nginx/conf/waf

unzip ngx_lua_waf-master.zip

mv ./ngx_lua_waf-master/* nginx/conf/waf

 

nginx.conf  里,添加如下配置:

 

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; 


启动Nginx


测试访问:

 

 

其他扩展学习:


扩展1:以下的这些项目,建议综合看一下:

https://github.com/oneinstack/ngx_lua_waf

https://github.com/whsir/ngx_lua_waf/

https://github.com/search?o=desc&q=ngx_lua_waf&s=stars&type=Repositories

 

扩展2

 

配置config.lua里的waf规则目录(一般在waf/conf/目录下) 
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.confhttp段增加lua_shared_dict limit 10m;)
    CCrate = "100/60"
    --设置cc攻击频率,单位为秒.
    --默认1分钟同一个IP只能请求同一个地址100
    html=[[Please go away~~]]
    --警告内容,可在中括号内自定义
   备注:不要乱动双引号,区分大小写

 


文章来源于网友投稿、网络转载、自写自撰等,

如果有争议请联系。


以上是关于让Nginx支持Lua导入过滤规则担任WAF角色的主要内容,如果未能解决你的问题,请参考以下文章

开源nginx_lua_waf部署安装

nginx+ngx_lua支持WAF防护功能

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

Nginx 配置支持 WAF

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

软WAF的另一种思路:基于Openresty+Naxsi的WAF实现