
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/
检查日志
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)