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

前言

图片[1] - #教程# Nginx lua waf 简单防御CC攻击 - 云线路

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

更多网站安全和优化

Nginx_lua_waf 用途

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

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

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

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

屏蔽异常的网络请求

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

防止 webshell 上传

防御效果图

图片[2] - #教程# Nginx lua waf 简单防御CC攻击 - 云线路

安装及使用

这里为了方便直接在军哥的 lnmp 上直接安装Nginx_Lua(详见LNMP 安装使用教程)可以省去直接 luajit 安装,安装前修改 /lnmpXX/lnmp.conf 后再安装 lnmp

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

直接 luajit 安装方法

下载打包文件里自带安装脚本,位置在:

/usr/local/nginx/conf/waf/install.sh

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

下载脚本

春哥原版

本站修改版

wget https://dl.yunloc.com/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);

补充(2023/8)

安装军哥 lnmp2.0 版需要加 2 个库,把resty文件夹拷贝在waf目录里

编辑文件“/usr/local/nginx/conf/waf/init.lua

function denycc()
    if CCDeny then
        local uri = ngx.var.uri
        CCcount = tonumber(string.match(CCrate,'(.*)/'))
        CCseconds = tonumber(string.match(CCrate,'/(.*)'))
        local token = getClientIp() .. uri
        local limit = ngx.shared.limit
        local req, _ = limit:get(token)
        local ip = getClientIp()
        local block, _ = limit:get(ip)

        if block then
            ngx.exit(444)
        end

        if req then
            if req > CCcount then
                limit:set(ip, 1, tonumber(DenySeconds)) //对比,修改这里
                ngx.exit(444)
                return true
            else
                 limit:incr(token, 1)
            end
        else
            limit:set(token, 1, CCseconds)
        end
    end

    return false
end

结语

本文随意转载,但请注明出处!

© 本站文章随意转载,但请注明出处!
THE END
点赞2.1W+ 分享
评论 共5条
头像
务必使用真实的邮箱地址评论,虚假邮箱的评论将不通过审核及无回复。
提交
头像

昵称

取消
昵称表情代码图片
    • 头像猛男0
    • 头像googis0
    • 头像miao~0