首页 > 技术 > 正文

#教程# Nginx lua waf 简单防御CC攻击

刚新建了个博客,怕被闲的蛋疼的无聊脑残CC攻击,整理了下春哥的Nginx_lua_waf 防CC,因春哥的版本自2016年开始就停更了,所以这几天在春哥的基础上加了封IP的时间(原版本为60/s,修改后可以自定义),还增加了不过滤搜索引擎。如果要单独安装lua可以搜索,或者以后我会写个教程。

刚新建了个博客,怕被闲的蛋疼的无聊脑残 CC 攻击,整理了下春哥的 Nginx_lua_waf 防 CC,因春哥的版本自 2016 年开始就停更了,所以这几天在春哥的基础上加了封 IP 的时间(原版本为 60/s,修改后可以自定义),还增加了不过滤搜索引擎。如果要单独安装 lua 可以搜索,或者以后我会写个教程。

更多的关于网站安全和优化,这里有:

1、 Cloudflare 自动脚本提交攻击(恶意)IP 到防火墙[修改版]

2、WordPress - 5 秒盾防 CC(PHP 通用代码)

3、Nginx 使用 CDN(CloudFlare)获取网站日志真实 IP 地址

Nginx_lua_waf 用途:

防止 sql 注入,本地包含,部分溢出,fuzzing 测试,xss,SSRF 等 web 攻击

防止 svn/备份之类文件泄漏

防止 ApacheBench 之类压力测试工具的攻击

屏蔽常见的扫描黑客工具,扫描器

屏蔽异常的网络请求

屏蔽图片附件类目录 php 执行权限

防止 webshell 上传

效果图如下:

这里为了方便直接在军哥的 lnmp 上直接安装(详见《LNMP 安装使用教程》),安装前修改 /lnmp1.5/lnmp.conf 后再安装 lnmp

Enable_Nginx_Lua='y' //把 n 修改为 y

2019/04/15 补充 luajit 安装方法:

基于 Centos7.x 系统,关闭 selinux,关闭防火墙(或自行设置规则),想要使用 ngx_lua_waf 改版,首先要编译 Nginx 增加 lua 模块;

配置方法如下:

1、安装所需依赖

yum install wget gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel

2、下载 ngx_devel_kit

cd /usr/local/src

wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.tar.gz

tar xf v0.3.1rc1.tar.gz

3、下载 lua-nginx-module

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.14.tar.gz

tar xf v0.10.14.tar.gz

4、安装 luajit

wget https://github.com/openresty/luajit2/archive/v2.1-20190329.tar.gz

cd luajit2-2.1-20190329

make

make install

5、导入环境变量

export LUAJIT_LIB=/usr/local/lib

export LUAJIT_INC=/usr/local/include/luajit-2.1

6、编译 nginx 模块

useradd -s /bin/false -M www

cd /usr/local/src

wget http://nginx.org/download/nginx-1.14.2.tar.gz

tar xf nginx-1.14.2.tar.gz

cd nginx-1.14.2

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=/usr/local/src/ngx_devel_kit-0.3.1rc1 --add-module=/usr/local/src/lua-nginx-module-0.10.14 --with-ld-opt=-Wl,-rpath,$LUAJIT_LIB

make

make install

接下来就可以直接安装 ngx_lua_waf 了;

春哥原版:https://github.com/loveshell/ngx_lua_waf/archive/master.zip

春哥修改版:https://www.7198.net/Waf/ngx_lua_waf_new.zip

使用说明:

nginx 安装路径为:/usr/local/nginx/conf/ 把 ngx_lua_waf 下载到 conf 目录下,解压命名为 waf

在 nginx.conf 的 http 段添加

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;

配置 config.lua 里的 waf 规则目录(一般在 waf/conf/目录下)

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

然后重启 nginx 即可

service nginx restart

配置文件详细说明:

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 次

DenySeconds="360"

--原来攻击被封默认 60 秒,这里修改为自定义,我这设定为 360 秒(这里是新加的)

html=[[Please go away~~]]

--警告内容,可在中括号内自定义

部署完毕可以尝试如下命令:

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

返回"WAF Block page"字样,说明规则生效。

注意:默认,本机在白名单不过滤,可自行调整 config.lua 配置

修改说明:

修改正则过滤函数改为 ngx.re.find,匹配效率会提高三倍左右;

增加封 IP 时间自定义控制;

增加不过滤搜索引擎(/usr/local/nginx/conf/waf/wafconf/white-user-agent);

网友评论

验证码 换一张
取 消
暂无评论...
为您推荐
  • 相关阅读
  • 业界资讯
  • 手机通讯
  • 电脑办公
  • 新奇数码
  • 软件游戏
  • 科学探索