Nginx之WAF防火墙
1. web应用防护系统
常见的攻击
1. SQL注入
2. XSS跨站脚本攻击
3. 不安全下载
4. 隐私文件访问 .svn .git
5. 弱口令
6. 非授权访问 redis
7. CC攻击 性能CC攻击
8. DDOS攻击 CDN
2. nginx 可以实现的功能
1. CC攻击:频率限制
2. 不安全下载:判断后缀
3. 非授权访问:后缀,认证
4. 测试防护:根据UA
5. IP黑名单
3. nginx实现不了的功能或者很难实现的功能
1. IP白名单
2. URL白名单
3. 攻击日志记录
4. 真实IP做防护
4. WAF的作用
1. 解析HTTP请求,根据你设置的规则进行过滤,触发不同的动作,记录日志。
解析 规则 动作 日志模块
2. 配置模块 开启什么功能
5. Lua的安装
1. 编译安装Luajit
wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar zxf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
make
make install PREFIX=/usr/local/luajit
在/etc/profile文件中增加环境变量,并执行 source /etc/profile 使之生效(非必须):
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
注:此步骤只是在你的系统没有安装 LuaJIT 的情况下才需要自行编译安装。
2. 下载ngx_devel_kit
git clone https://github.com/simplresty/ngx_devel_kit.git
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
3. 下载
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
4. 编译nginx
./configure --user=nginxuser --group=nginxuser --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --add-module=../ngx_devel_kit/ --add-module=../lua-nginx-module-0.10.7/ 添加这两个参数
5. 安装nginx
make -j 2
6. make install
7. 报错
./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
解决方法:
ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
8. lua测试
location /test_lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
6. waf支持的功能
1. 支持IP白名单和黑名单
2. 支持URL白名单和黑名单
3. 支持User-agent
4. 支持CC防护
5. 支持Cookie过滤
6. 支持URL过滤
7. 支持URL参数过滤
8. 日志记录
7. 部署配置waf
1. 确认tenginx 初始化安装时是否编译了lua模块,没有的话可动态编译加载
/usr/local/nginx/sbin/nginx -m
ngx_http_lua_module (shared, 3.1) 动态加载的
ngx_http_copy_filter_module (static)
ngx_http_range_body_filter_module (static)
2. 下载waf文件
https://github.com/loveshell/ngx_lua_waf 去github上下载zip包
unzip ngx_lua_waf-master.zip
3. 把ngx_lua_waf-master文件的内容放到/usr/local/nginx/conf目录下
4. vi nginx.conf 添加
lua_need_request_body on; 获取请求体的数据,默认为off
lua_package_path "/usr/local/nginx/conf/?.lua"; 指定依赖的通用Lua库从哪里加载
lua_shared_dict limit 500m; 防cc使用字段,大小500M
init_by_lua_file /usr/local/nginx/conf/init.lua; 初始化脚本
access_by_lua_file "/usr/local/nginx/conf/waf.lua"; 在请求访问阶段处理,用于访问控制,适用于http、server、location、location if
5. 配置config.lua
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.conf的http段增加lua_shared_dict limit 10m;)
CCrate = "100/60"
--设置cc攻击频率,单位为秒.
--默认1分钟同一个IP只能请求同一个地址100次
html=[[Please go away~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
6. 规则目录为/usr/local/nginx/conf/wafconf/,提供了多维度的web防护策略,有以下几个文件:
user-agent 匹配拦截恶意的user-agent
url 匹配拦截恶意的网页路径
args 匹配拦截恶意的GET请求参数
post 匹配拦截恶意的post请求参数
cookie 匹配拦截恶意的cookie 请求
whitetip ip白名单
whiteurl 网页路径白名单
blockip ip黑名单
7. vi vhosts/product.conf
location 里加一条
access_by_lua_file /usr/local/nginx/conf/waf.lua;
8. /usr/local/nginx/sbin/nginx -t

浙公网安备 33010602011771号