NGINX安全防护之基于ngx_lua的web应用防火墙

NGINX安全防护之基于ngx_lua的web应用防火墙,第1张

NGINX安全防护之基于ngx_lua的web应用防火墙

NGINX安全保护

安装说明文件

作者github地址:

https://github.com/loveshell/ngx_lua_waf

来自作者的描述文档:

ngx_lua_waf是我一个基于ngx_lua的web应用防火墙。 代码很简单,开发初衷主要是使用简单,高性能和轻量级。 现在开源出来.其中包含我们的过滤规则。如果大家有什么建议和想fa,欢迎和我一起完善。   用途: 用于过滤post,get,cookie方式常见的web*** 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,×××F等web*** 防止svn/备份之类文件泄漏 防止ApacheBench之类压力测试工具的*** 屏蔽常见的扫描***工具,扫描器 屏蔽异常的网络请求 屏蔽图片附件类目录php执行权限 防止webshell上传   推荐安装: 请自行给nginx安装ngx_lua模块,推荐lujit2.0做lua支持 请提前新建/data/logs/hack/目录***日志,并赋予nginx用户对该目录的写入权限。   配置文件添加: 在http段添加 lua_need_request_bodyon;(开启post请求) access_by_lua_file/usr/local/nginx/conf/waf.lua;   规则更新: 考虑到正则的缓存问题,动态规则会影响性能,所以暂没用共享内存字典和redis之类东西做动态管理。 规则更新可以把规则文件放置到其他服务器,通过crontab任务定时下载来更新规则,nginx reload即可生效。以保障ngx lua waf的高性能 只记录过滤日志,不开启过滤,在代码里在check前面加上–注释即可,如果需要过滤,反之   一些说明: 过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割 global是全局过滤文件,里面的规则对post和get都过滤 get是只在get请求过滤的规则 post是只在post请求过滤的规则 whitelist是白名单,里面的url匹配到不做过滤 user-agent是对user-agent的过滤规则   默认开启了get和post过滤,需要开启cookie过滤的,编辑waf.lua取消部分–注释即可 日志文件名称格式如下:虚拟主机名_sec.log 欢迎大家到http://bbs.linuxtone.org多多交流 weibo:[@ppla](http://weibo.com/opscode) 感谢ngx_lua模块的开发者[@agentzh](https://github.com/agentzh/),春哥是我见过开源精神最好的人之一   本文记录如何安装ngx_lua模块 nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力


http://wiki.nginx.org/HttpLuaModule

1下载luajit2.0并安装

http://luajit.org/download.html

wgethttp://luajit.org/download/LuaJIT-2.0.4.tar.gz

使用源代码制作&;进行安装

所以lib和include直接放在/usr/local/lib和usr/local/include中。

2下载nginx源代码并解压

wgethttp://nginx.org/download/nginx-1.2.7.tar.gz

注意版本号。如果机器上已经安装了nginx,不想升级,请使用/to/nginx/sbin/nginx-v检查版本号。

塔尔-zxvfnginx-1.8.0.tar.gz

3下载ngx_devel_kit并解压

https://github.com/simpl/ngx_devel_kit/tags

wgethttps://github.com/simple/ngx_devel_kit/archive/v0.2.18.tar.gz

tar-zxvfv0.2.18

4下载nginx_lua_module解压

https://github.com/chaoslawful/lua-nginx-module/tags

wgethttps://github.com/openresty/Lua-nginx-module/archive/v0.10.1RC1.tar.gz

塔尔-zxvfv0.10.1rc1.tar.gz

进入nginx源文件夹。

cdnginx-1.2.7/

6导入环境变量,编译

exportlajit_lib=/usr/local/lib#这可能是不同的

ExportLuajit_Inc=/usr/local/include/luajit-2.0#这个可能不一样

。/configure–prefix=/usr/local/nginx\#nginx安装路径

-add-module=/usr/local/src/ngx_devel_kit-0.2.18\#ngx_devel_kit的源路径

–add-module=-add-module=/usr/local/src/Lua-nginx-module-0.10.1rc1#nginx_Lua_module源路径

示例:

。/配置\

-user=www-group=www\

-prefix=/usr/local/nginx\

-使用-http_stub_status_module\

-with-http_ssl_module\

-with-http_spdy_module\

-with-http_gzip_static_module\

-使用-ipv6\

-with-http_sub_module\

-with-ld-opt=-ljemalloc\

-with-OpenSSL=/usr/local/src/OpenSSL-1.0.1c\

-with-pcre=/usr/local/src/pcre-8.30\

-with-zlib=/usr/local/src/zlib-1.2.8\

-add-module=/usr/local/src/ngx_devel_kit-0.2.18\

-add-module=/usr/local/src/Lua-nginx-module-0.10.1rc1\

制造

安装lua模块时发现的问题:

我在编译安装Nginx的第三方模块时,遇到了一个错误:

viewplaincopyprint?

/usr/local/nginx/sbin/ngXin-sreload

/usr/local/nginx/sbin/nginx:加载共享库时出错:libluajit-5.1.so.2:无法打开sharedobject文件:没有这样的文件或目录

。/sbin/nginx-t

如果出现错误:

加载共享库时出错:libluajit-5.1.so.2:无法打开共享对象文件:没有这样的文件或目录

Maybe-conf-path在以下情况下未配置。/configure,或者#ln-s/usr/local/lib/libluajit-5.1.so.2/lib64/libluajit-5

7请事先新建一个/data/logs/hack/directory***日志,并赋予nginx用户对该目录的写权限。

mkdir-p/data/logs/hack/

Www账号运行的是nginx和php-fpm。

chown-Rwww:www/usr/local/nginx/logs/hack/

chmod-R755/usr/local/nginx/logs/hack/

8安装ngx_lua_waf模块

wgethttps://github.com/loveshell/ngx_Lua_waf/archive/master.zip–no-check-certificate

将该文件解压缩到

nginx的conf目录下。

然后将其添加到nginx.conf中的http配置中

http{

Lua_package_path"/usr/local/nginx/conf/waf/?。Lua”;

lua_shared_dictlimit10m

init_by_Lua_file/usr/local/nginx/conf/waf/init.Lua;

access_by_Lua_file/usr/local/nginx/conf/waf/waf.Lua;

rulepath="/usr/local/nginx/conf/waf/wafconf/"

-规则存储目录

attacklog="off"

-是否打开***信息记录,需要配置logdir。

logdir="/usr/local/nginx/logs/hack/"

-日志存储目录,需要用户自己新创建,需要nginx用户的可写权限。

UrlDeny="on"

-是否阻止url访问

重定向="开"

-是否拦截和重定向?

CookieMatch="on"

-是否阻止cookie****

postMatch="开"

-是否阻止帖子***

whiteModule="on"

-打开网址白名单?

black_fileExt={"php","jsp"}

-填写不允许上传的文件的后缀类型。

IP白名单={"127.0.0.1"}

-ip白名单,多个ip用逗号隔开。

ipBlocklist={"1.0.0.1"}

-ip黑名单,多个ip用逗号隔开。

CCDeny="开"

-是否开启拦截cc***(在nginx.conf的http部分增加lua_shared_dictlimit10m)

CCrate="100/60"

-以秒为单位设置cc***频率。

-默认情况下,同一IP每分钟只能请求同一地址100次。

html=[[请走开~~]]


9过滤器配置说明:

过滤规则可以根据wafconf下的要求进行调整,每个规则都需要用|进行换行或除法运算。

Global是一个全局过滤文件,其中的规则同时过滤post和get。

Get是一个只过滤get请求的规则。

Post是一个只要求在post中过滤的规则。

白名单就是白名单,里面的网址匹配不过滤。

用户代理是用户代理的过滤规则。

注意:每次修改waf.lua代码都需要重新加载nginx-s!


测试


模仿网络***

curlhttp://xxxx/test.php?id=../etc/passwd


使用apacheab工具测试压力控制。

ab-n50-c10http://xxxxx/


检查日志

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/778750.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-03
下一篇2022-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存