nginx+lua构建简单waf网页防火墙
需求背景
类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求。
waf的作用:
防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
nginx 的话我选择春哥开源的:OpenResty一个伟大的项目。
OpenResty 介绍
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
好了步骤开始:
1、安装Luagit:
yum install -y readline-devel pcre-devel openssl-devel wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz tar -xzf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5 make && make install export LUAJIT_LIB=/usr/local/lib && export LUAJIT_INC=/usr/local/include/luajit-2.0 ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 #一定创建此软连接,否则会报错 如果不创建符号链接,可能出现以下异常: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
2、安装openresty:
wget https://openresty.org/download/openresty-1.11.2.2.tar.gz tar -zxf openresty-1.11.2.2.tar.gz && cd openresty-1.11.2.2 ./configure --prefix=/usr/local/openresty \ --user=www \ --group=www \ --with-luajit \ --with-http_v2_module \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-ipv6 --with-http_sub_module \ --with-pcre \ --with-pcre-jit \ --with-file-aio \ --with-http_dav_module gmake && gmake install
3、测试openresty:
vim /usr/local/openresty/nginx/conf/nginx.conf 可在server{..}段添加location规则
测试并启动nginx /usr/local/openresty/nginx/sbin/nginx -t
/usr/local/openresty/nginx/sbin/nginx 测试一下访问是否输出hello world,后面应该会有一些列的简介。
4、下载开源项目:
cd /usr/local/openresty/nginx/conf/ https://github.com/bongmu/ngx_lua_waf.git
5、然后修改nginx添加配置,支持lua脚本地址,在http段位置:
lua_package_path "/usr/local/openresty/nginx/conf/ngx_lua_waf/?.lua"; ###相关项目存放地址 lua_shared_dict limit 10m; ###存放limit表的大小 init_by_lua_file /usr/local/openresty/nginx/conf/ngx_lua_waf/init.lua; ###相应地址 access_by_lua_file /usr/local/openresty/nginx/conf/ngx_lua_waf/waf.lua; ##相应地址
6、修改ngx_lua_waf相关配置:
cd ngx_lua_waf/ && vim config.lua RulePath = "/usr/local/openresty/nginx/conf/ngx_lua_waf/wafconf" ##指定相应位置 attacklog = "on" ##开启日志 logdir = "/tmp" ##日志存放位置 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、创建日志存放目录:
mkdir /usr/local/openresty/nginx/conf/ngx_lua_waf/logs chown -R nobody:nobody /usr/local/openresty/nginx/conf/ngx_lua_waf/logs
8、重启nginx测试:
10、压力测试CC攻击:
把congfig.lua的频率改成如下:
CCDeny="on"
CCrate="50/60"
测试结果:
到处已经构建成功了一套waf防御系统,非常感谢loveshell提供这么棒的waf开源项目,还有春哥的openresty.
nginx+lua构建简单waf网页防火墙的更多相关文章
- Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙
Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...
- 使用Nginx+Lua实现自定义WAF
使用Nginx+Lua实现自定义WAF 版权声明:全部抄自赵班长的GitHub上waf项目 功能列表: 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝. 支持URL白名单,将不需要过滤的URL ...
- Nginx|构建简单的文件服务器(mac) 续-FastDFS安装(mac)|文件存储方案
目录 Nginx|构建简单的文件服务器(mac) 1 所需安装包 2 安装fastdfs-nginx-module-master 3 安装Nginx Nginx|构建简单的文件服务器(mac) 续上文 ...
- Nginx + Lua 搭建网站WAF防火墙
前言 对于项目里面只是使用代理等常用功能,在线安装即可,如需制定化模块,则推荐编译安装 PS:本文不仅仅包含Nginx相关的知识点,还包含了逆天学习方法(对待新事物的处理) 官方网站:https:// ...
- nginx+lua实现简单的waf网页防火墙功能
原文:http://www.2cto.com/net/201608/534272.html 安装LuaJIT http://luajit.org/download/LuaJIT-2.0.4.tar.g ...
- nginx + lua 构建网站防护waf(一)
最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下 ...
- nginx + Lua 实现自定义WAF
文章摘自:https://github.com/unixhot/waf wget git@github.com:unixhot/waf.git
- 使用NGINX+LUA实现WAF功能 和nginx 防盗链
使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...
- Nginx基础 - Nginx+Lua实现灰度发布与WAF
1.Nginx加载Lua环境默认情况下Nginx不支持Lua模块, 需要安装LuaJIT解释器, 并且需要重新编译Nginx, 建议使用openrestry 1)环境准备 [root@localhos ...
随机推荐
- tomcat server.xml docbase workdir
在tomcat安装好后,只要把你的web项目copy到%TOMCAT_HOME%webapp下面就可以是使用啦!!其实还有种方法就是设定虚拟目录,即把项目的目录映射到tomcat中.这样做即可以不用重 ...
- informatica中的workflow连接远程数据库
如果是远程oracle这样写 名称随便起,方便自己记住,后面用户名密码你都知道,再加上数据库的地址:端口/SID就可以了. 如10.33.2.208:1521/torcl
- (转)Linux开启mysql远程连接的设置步骤
Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下: 1.GRANT命令创建远程连接mysql授权用户itlogger mys ...
- vs中 main和_tmain的区别
用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是&l ...
- 了解 Go 1.9 的类型别名
http://colobu.com/2017/06/26/learn-go-type-aliases/
- SQLServer------如何让标识列重新开始计算
方法: DBCC CHECKIDENT (表名, RESEED, )
- mybatis由浅入深day01_9动态sql(9.5sql片段_9.6foreach)
9 动态sql 9.1 什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 9.2 需求 用户信息综合查询列表和用户信息查询列表总数这两个 ...
- MySQL<事务与存储过程>
事务与存储过程 事务管理 事务的概念 谓的事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,即事务中的语句要么都执行,要么都不执行. 事务的使用 开启事务 ...
- Effective C++ Item 35 Consider alternatives to virtual functions
考虑你正在为游戏人物设计一个继承体系, 人物有一个函数叫做 healthValue, 他会返回一个整数, 表示人物的健康程度. 由于不同的人物拥有不同的方式计算他们的健康指数, 将 healthVal ...
- 应用程序挂起、复原与终止— IOS开发
本文转载至 http://justcoding.iteye.com/blog/1473350 一.挂起 当有电话进来或者锁屏,这时你的应用程会挂起,在这时,UIApplicationDelegate委 ...