下载安装 nginx

这里采用的是 LNMP 一键安装包

cd ~
wget http://soft.vpser.net/lnmp/lnmp1.7.tar.gz -cO lnmp1.7.tar.gz && tar zxf lnmp1.7.tar.gz && cd lnmp1.7 

因为需要用到 lua 模块,所以

vim lnmp.conf

Enable_Nginx_Lua 的值改为 y
由于只用到了 nginx ,所以这边我们只安装 nginx,不安装 phpmysql

./install.sh nginx

接下来直接回车,就可以安装完 nginx


下载安装 ngx_lua_waf

wget https://github.com/loveshell/ngx_lua_waf/archive/master.zip -O ngx_lua_waf.zip
unzip ngx_lua_waf.zip
mv ngx_lua_waf-master /usr/local/nginx/conf/waf

nginx.conf 的 http 段添加 ngx_lua_waf 配置

vim /usr/local/nginx/conf/nginx.conf

lua_package_path "/usr/local/nginx/conf/waf/?.lua";
lua_shared_dict limit 10m;
init_by_lua_file  /usr/local/nginx/conf/waf/init.lua; 
access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;


开启防 CC 功能

vim /usr/local/nginx/conf/waf/config.lua

CCDeny 的值改为 on
重启 nginx

lnmp restart nginx

测试

这里我们使用 ab 进行测试

ab -c 500 -n 1000 http://192.168.0.1/

可以看到,一共1000次请求,因为触发了cc防御的功能,有900次请求是失败的

我们打开浏览器看看

本机ip已经无法访问该网站了,设置成功


注意点

  • 每次修改完 lua 文件后需要重启 nginx 才行
  • 这个防 cc 功能是 同一个ip 60秒内访问 同一个链接 超过 100 次才会触发。如果想限制同一个 ip 的访问次数(反爬),则需要自行修改 init.lua 文件的 denycc 函数

附:配置文件详细说明


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~~]]
--警告内容,可在中括号内自定义
备注:不要乱动双引号,区分大小写
×