nginx+lua实现简单的waf网页防火墙功能

简介:

Nginx+Lua实现WAF

参考地址:http://www.2cto.com/Article/201303/198425.html

201682

安装LuaJIT

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

tar xf LuaJIT-2.0.4.tar.gz

cd LuaJIT-2.0.4

make && make install 即可

 

下载ngx_devel_kit

https://codeload.github.com/simpl/ngx_devel_kit/zip/master

unzip ngx_devel_kit-master.zip

解压后的路径为:root/ngx_devel_kit-master

下载nginx_lua_module解压

https://github.com/openresty/lua-nginx-module#readme

unzip lua-nginx-module-master.zip

cd lua-nginx-module-master

安装nginx或给nginx打补丁

nginx -v 查看nginx的版本号

# nginx -v

nginx version: nginx/1.8.0


nginx -V 查看以前的编译参数


# nginx -V

nginx version: nginx/1.8.0

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) 

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-google_perftools_module


我这里已经安装过nginx1.8了。

那么下面就是给nginx打补丁的事情了。如下:

进到nginx1.8的源代码目录下。执行下面的一系列命令:

导入环境变量,编译

# exportLUAJIT_LIB=/usr/local/lib    #这个很有可能不一样

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

 

# cd /home/tools/lnmp1.2-full/src/nginx-1.8.0

#./configure \

--user=www --group=www \

--prefix=/usr/local/nginx \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_spdy_module \

--with-http_gzip_static_module \

--with-ipv6 \

--with-http_sub_module \

--with-google_perftools_module \

--add-module=/root/ngx_devel_kit-master\

--add-module=/root/lua-nginx-module-master\

--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"

 

# make -j4 && make install

 

准备nginx的攻击日志目录

# mkdir -p /home/wwwlogs/attack

# chown www.www /home/wwwlogs/attack

# chmod -R 755 /home/wwwlogs/attack

 

安装nginxLua_waf模块

官方地址:https://github.com/loveshell/ngx_lua_waf

# wget https://codeload.github.com/loveshell/ngx_lua_waf/zip/master

# unzip ngx_lua_waf-master.zip

# cd ngx_lua_waf-master

# mkdir /usr/local/nginx/conf/waf

# cp -a ./ /usr/local/nginx/conf/waf

 

修改nginx的配置文件,在http加入如下内容:

    lua_package_path"/usr/local/nginx/conf/waf/?.lua";

    lua_shared_dict limit 10m;  开启拦截cc攻击必须加这条规则

   init_by_lua_file /usr/local/nginx/conf/waf/init.lua;

   access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

 

修改/usr/local/nginx/conf/waf/config.lua中如下2部分内容即可:


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

attacklog = "on"

logdir ="/home/wwwlogs/attack"

UrlDeny="on"

Redirect="on"

CookieMatch="on"

postMatch="on"

whiteModule="on"

black_fileExt={"php","jsp"}

ipWhitelist={"127.0.0.1"}

ipBlocklist={"1.0.0.1"}

CCDeny="on"

CCrate="100/60"


 

配置文件说明:

    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

# nginx -t

# /etc/init.d/nginx restart   重启nginx

 

恶意访问测试

# curl http://xxxx/test.php?id=../etc/passwd

# curl http://192.168.2.12/index.php?cmd=phpinfo();

或者直接在网页上请求


结果都是如下图所示,被拦截了。

wKioL1ekf3_xPgUdAAB7idVmlh0081.png

此外,在/home/wwwlogs/attack目录下已经有日志文件记录下整个攻击的日志了。

wKioL1ekf4Cj-cLBAAAaAgoKr2M737.png

wKiom1ekf37ApnUsAABXpW02Dew226.png

一些说明:

过滤规则在wafconf下,可根据需求自行调整,每条规则需换行,或者用|分割

   args里面的规则get参数进行过滤的

    url是只在get请求url过滤的规则

   post是只在post请求过滤的规则

   whitelist是白名单,里面的url匹配到不做过滤

   user-agent是对user-agent的过滤规则

 

默认开启了getpost过滤,需要开启cookie过滤的,编辑waf.lua取消部分--注释即可。

拦截到的非法请求,记录在日志文件名称格式如下:虚拟主机名_sec.log

 

说明:

这玩意貌似只能防止一些简单的sql注入类的语句,对于一些精心构造的恶意语句还是拦截不了的。

另外,我在公司的服务器上装了它,后台客服反应会出现form表单中图片无法上传的情况。










本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1833724,如需转载请自行联系原作者
目录
相关文章
|
监控 安全 数据可视化
浅谈下一代防火墙与Web应用防火墙的区别
浅谈下一代防火墙与Web应用防火墙的区别
745 0
|
安全 算法 Linux
CentOS7下部署长亭科技雷池Web应用防火墙(WAF)开源社区版
CentOS7下部署长亭科技雷池Web应用防火墙(WAF)开源社区版
2968 0
|
存储 缓存 Java
Openresty(lua+nginx)-Guava-Redis做多级缓存
Openresty(lua+nginx)-Guava-Redis做多级缓存
385 1
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
|
云安全 数据采集 安全
阿里云热门云安全产品简介:Web应用防火墙与云防火墙产品各自作用介绍
在阿里云的安全类云产品中,Web应用防火墙与云防火墙是用户比较关注的两款安全产品,二者在作用上各有侧重,共同构成了阿里云强大的安全防护体系。本文将对Web应用防火墙与云防火墙产品各自的主要作用进行详细介绍。
|
SQL 安全 网络安全
网络安全防御矩阵:从云防火墙流量清洗到WAF语义分析的立体化防护
在数字化浪潮中,网络安全日益重要。云防火墙依托云计算技术,提供灵活高效的网络防护,适用于公有云和私有云环境;Web应用防火墙专注于HTTP/HTTPS流量,防范SQL注入、XSS等攻击,保护Web应用安全。两者结合使用可实现优势互补,构建更强大的网络安全防线,满足不同场景下的安全需求。
560 1
|
SQL 监控 安全
网站部署Web应用防火墙(WAF)的必要性
Web应用防火墙(WAF)是专门保护Web应用的安全工具,能实时监控和过滤HTTP/HTTPS流量,防御SQL注入、XSS等攻击。它不仅是网站安全的第一道防线,也是满足《网络安全法》等合规要求的必要措施。通过阻断DDoS攻击、优化业务连续性,以及提供智能安全态势感知,WAF帮助企业在复杂网络环境中保障数据安全、维护用户信任并确保业务稳定运行。部署WAF已成为网站运营者不可或缺的安全选择。
545 0
|
SQL 安全 网络安全
Web应用防火墙(WAF)与数据库应用防火墙有什么区别?
Web应用防火墙(WAF)专注于Web应用系统和网站的应用层防护,可有效应对OWASP Top 10等常见攻击,防止SQL注入、CC攻击等。而数据库应用防火墙则位于应用服务器与数据库之间,提供数据库访问控制、攻击阻断、虚拟补丁等高级防护功能,直接保护数据库免受攻击。两者分别针对Web层和数据库层提供不同的安全保护。
508 4
|
安全 网络安全 数据安全/隐私保护
WAF防护功能的实现方案
WAF防护功能的实现方案
343 0
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介