nginx + lua 构建网站防护waf(一)
最近在帮朋友维护一个站点。这个站点是一个Php网站。坑爹的是用IIS做代理。出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC。最后找到了waf这样一个解决方案缓解一下。话不多说直接开始。
waf的作用:
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
nginx 的话我选择春哥开源的:OpenResty一个伟大的项目。
好了步骤开始:
1、安装Luagit:
# wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz
# tar -xvf LuaJIT-2.1.0-beta1.tar.gz
# cd LuaJIT-2.1.0-beta1
# make
# make install
#ln -sf luajit-2.1.0-beta1 /usr/local/bin/luajit
2、安装openresty:
./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module --with-http_iconv_module
gmake
gmake install
3、测试openresty:
[root@www ngx_lua_waf]# cd /opt/openresty/nginx/conf/
[root@www conf]# cat nginx.conf
http {
server {
listen 80;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("HelloWorld")
}
}
}
}
###
测试一下访问是否输出hello world,后面应该会有一些列的简介。
[root@www conf]# curl localhost
HelloWorld
4、下载开源项目:
[root@www nginx]# cd /opt/openresty/nginx/
[root@www nginx]# git clone https://github.com/loveshell/ngx_lua_waf.git
5、然后修改nginx添加配置,支持lua脚本地址,在http段位置:
lua_package_path "/opt/openresty/nginx/ngx_lua_waf/?.lua"; ###相关项目存放地址
lua_shared_dict limit 10m; ###存放limit表的大小
init_by_lua_file /opt/openresty/nginx/ngx_lua_waf/init.lua; ###相应地址
access_by_lua_file /opt/openresty/nginx/ngx_lua_waf/waf.lua; ##相应地址
6、修改ngx_lua_waf相关配置:
[root@www ngx_lua_waf]# vim config.lua
RulePath = "/opt/openresty/nginx/ngx_lua_waf/wafconf/" ##指定相应位置
attacklog = "on" ##开启日志
logdir = "/opt/openresty/nginx/logs/hack/" ##日志存放位置
UrlDeny="on" ##是否开启URL防护
Redirect="on" ##地址重定向
CookieMatch="on" ##cookie拦截
postMatch="on" ##post拦截
whiteModule="on" ##白名单
black_fileExt={"php","jsp"}
ipWhitelist={"127.0.0.1"} ##白名单IP
ipBlocklist={"1.0.0.1"} ##黑名单IP
CCDeny="on" ##开启CC防护
CCrate="100/60" ##60秒内允许同一个IP访问100次
7、创建日志存放目录:
[root@www ngx_lua_waf]#mkdir /opt/openresty/nginx/logs/hack/
[root@www ngx_lua_waf]#chown -R nobody:nobody /opt/openresty/nginx/logs/hack/
8、启动nginx测试:
[root@www logs]# /opt/openresty/nginx/sbin/nginx
9、网页访问一条测试:

10、压力测试CC攻击:
把congfig.lua的频率改成如下:
CCDeny="on"
CCrate="50/60"
测试结果:
[root@www ngx_lua_waf]# ab -c 100 -n 100 http://192.168.63.242/index.heml
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.63.242 (be patient).....done
Server Software: openresty/1.11.2.2
Server Hostname: 192.168.63.242
Server Port: 80
Document Path: /index.heml
Document Length: 2078 bytes
Concurrency Level: 100
Time taken for tests: 0.052 seconds
Complete requests: 100
Failed requests: 49 ###因为做了现在,所以这么多是失败的。
到处已经构建成功了一套waf防御系统,非常感谢loveshell提供这么棒的waf开源项目,还有春哥的openresty.
原文地址:http://www.roncoo.com/article/detail/126294
nginx + lua 构建网站防护waf(一)的更多相关文章
- nginx+lua实现灰度发布/waf防火墙
nginx+lua 实现灰度发布 waf防火墙 课程链接:[课程]Nginx 与 Lua 实现灰度发布与 WAF 防火墙(完)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 参考博客 Nginx ...
- Nginx + Lua 搭建网站WAF防火墙
前言 对于项目里面只是使用代理等常用功能,在线安装即可,如需制定化模块,则推荐编译安装 PS:本文不仅仅包含Nginx相关的知识点,还包含了逆天学习方法(对待新事物的处理) 官方网站:https:// ...
- nginx+lua构建简单waf网页防火墙
需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...
- nginx+lua实现简单的waf网页防火墙功能
原文:http://www.2cto.com/net/201608/534272.html 安装LuaJIT http://luajit.org/download/LuaJIT-2.0.4.tar.g ...
- 使用nginx lua实现网站统计中的数据收集
导读网站数据统计分析工具是各网站站长和运营人员经常使用的一种工具,常用的有 谷歌分析.百度统计和腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于ja ...
- Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...
- 使用NGINX+LUA实现WAF功能 和nginx 防盗链
使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...
- 使用Nginx+Lua实现自定义WAF
使用Nginx+Lua实现自定义WAF 版权声明:全部抄自赵班长的GitHub上waf项目 功能列表: 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝. 支持URL白名单,将不需要过滤的URL ...
- 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x0n 前言 ...
随机推荐
- asp.net中下载功能
//流方式下载 protected void ButtonButtonDownload_Click(object sender, EventArgs e) { //string fileName = ...
- Ollydbg 中断方法浅探
Ollydbg是一个新的32位的汇编层调试软件.适应于windows98.me.2000.xp和2003操作系统.由于他具有图形窗口界面,所以操作方便.直观,是cracker的好工具. 由于Ollyd ...
- How to Cracked Sublime Text 3 Build 3065 in Ubuntu (Linux)
整理自How to Cracked Sublime Text 3 Build 3065 in Ubuntu (Linux) Sublime Text 3 Build 3065 Release Date ...
- linux 和 ecos 内核线程创建/信号量/event等对比
ecos: int gx_thread_create (const char *thread_name, gx_thread_id *thread_id, void(*entry_func)(void ...
- Java Vector 类
Vector类实现了一个动态数组.和ArrayList和相似,但是两者是不同的: Vector是同步访问的. Vector包含了许多传统的方法,这些方法不属于集合框架. Vector主要用在事先不知道 ...
- USACO3.24Feed Ratios
直接枚举到100水过 /* ID: shangca2 LANG: C++ TASK: ratios */ #include <iostream> #include<cstdio> ...
- hadoop面试时可能遇到的问题
面试hadoop可能被问到的问题,你能回答出几个 ? 1.hadoop运行的原理? 2.mapreduce的原理? 3.HDFS存储的机制? 4.举一个简单的例子说明mapreduce是怎么来运行的 ...
- java常量池概念
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...
- mybatis 应用参考
1.例子中包含了 mybatis 的常用sql的写法2.动态sql 的应用3.存储过程的使用 http://takeme.iteye.com/blog/1732801
- NameValueCollection类
最近在研究HttpRequest类,发现里面的很多属性都返回一个NameValueCollection对象,今天再来了解一下这个神秘的对象. 随便写了个例子,发现跟HashTable类似.但是这个东西 ...