重新打包了tengine,集成了开箱即用的基于lua的web应用防火墙,特别感谢agentzh和loveshell 。
由于lua属于解释性的脚本语言,因此可以不用重启nginx,就可以方便地修改lua脚本中的规则。
二进制软件包内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# rpm -qpl tengine-1.5.2-3.waf.el6.x86_64.rpm
/etc/logrotate
.d
/nginx
/etc/nginx
/etc/nginx/browsers
/etc/nginx/conf
.d
/etc/nginx/conf
.d
/default
.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime
.types
/etc/nginx/module_stubs
/etc/nginx/modules
/etc/nginx/nginx
.conf
/etc/nginx/waf/config
.lua
/etc/nginx/waf/init
.lua
/etc/nginx/waf/rules
.d
/etc/nginx/waf/rules
.d
/args
/etc/nginx/waf/rules
.d
/cookie
/etc/nginx/waf/rules
.d
/post
/etc/nginx/waf/rules
.d
/url
/etc/nginx/waf/rules
.d
/user-agent
/etc/nginx/waf/rules
.d
/whiteurl
/etc/nginx/waf/waf
.conf
/etc/nginx/waf/waf
.lua
/etc/nginx/win-utf
/etc/rc
.d
/init
.d
/nginx
/etc/sysconfig/nginx
/usr/sbin/dso-tool
/usr/sbin/nginx
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x
.html
/usr/share/nginx/html/index
.html
/var/cache/nginx
/var/log/nginx
|
所谓web 应用防火墙,即WAF,实际上就是一个基于正则的黑名单,对于web请求中的不安全行为进行过滤,比如特殊的请求参数,url等。
注意:本文的WAF 工作在nginx的http段,而不是server段。
假设访问一个不存在的文件,本应该在server段匹配后,返回404,但是有了WAF,非法访问来不及到server段,就被拦截了,直接返回http 200 。
比如waf规则中禁止访问下载后缀名为sql的文件,不论文件是否存在,则直接被拦截,返回http200。
效果图如下:
如果你觉得直接返回 “Blocked by WAF”比较暴力,
可以尝试编辑/etc/nginx/waf/config.lua ,修改最后一行,我们让它跳转到百度或网站主页
1
|
html=[[<html><script language=
'javascript'
>document.location =
'http://www.baidu.com'
<
/script
><
/html
>]]
|
由于agentzh推荐使用luajit,而不是lua,所以附件加上了一个luajit的srpm软件包。
(从fedora 19 移植而来)
参考文章
http://ju.outofmemory.cn/entry/36187
https://github.com/loveshell/ngx_lua_waf
注:附件上传时直接加了zip后缀,无需解压。
update 2014-08-07
发现一个小bug,lua无法写攻击日志,改变/var/log/nginx 目录权限即可
1
|
chown
nginx:nginx
/var/log/nginx
|
本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1416917,如需转载请自行联系原作者