#选择使用静态模块还是动态模块

-执行如下命令
sh assets/guide.sh
-如果输出下面这行,则建议使用动态模块
It is recommended that you use dynamic modules.
-如果输出下面这行,则建议使用静态模块
It is recommended that you use static modules.


#server块中添加配置

---LTS 版本
http {
    ...
    server {
        ...
        # on/off 表示启用和关闭
        waf on;
 
        # 规则文件所在目录的绝对路径,必须以/结尾
        waf_rule_path /usr/local/src/ngx_waf/assets/rules/;
 
        # 防火墙工作模式,STD表示标准模式
        waf_mode STD;
 
        # CC防御参数
        # 1000表示每分钟请求次数上限,超出上限后封禁对应ip地址60分钟
        waf_cc_deny rate=1000r/m duration=60m;
 
        # 最多缓存50个检测目标的检测结果
        # 对除了IP黑白名单检测、CC防护和POST检测以外的所有检测生效
        waf_cache capacity=50;
        ...
    }
    ...
}
---Current 版本
http {
    # 声明一块共享内存
    waf_zone name=waf size=20m;
    ...
    server {
        ...
        # on/off 表示启用和关闭
        waf on;
 
        # 规则文件所在目录的绝对路径,必须以/结尾
        waf_rule_path /usr/local/src/ngx_waf/assets/rules/;
 
        # 防火墙工作模式,STD表示标准模式
        waf_mode STD;
 
        # CC防御参数
        # 1000表示每分钟请求次数上限,超出上限后封禁对应ip地址60分钟
        waf_cc_deny on rate=1000r/m duration=60m zone=waf:cc;
 
        # 对除了IP黑白名单检测、CC防护和POST检测以外的所有检测生效
        waf_cache on capacity=50;
        ...
    }
    ...
}

---针对路径或文件限流

---LTS
# 将静态资源的请求速率限制到10,000次/分钟
location /static/ {
    waf_cc_deny rate=10000r/m duration=1h;
}
 
# 将动态资源的请求速率限制到2,000次/分钟
location /dynamic/ {
    waf_cc_deny rate=2000r/m duration=1h;
}

---Current
http {
    waf_zone name=waf size=20m;
    server {
        # 将静态资源的请求速率限制到10,000次/分钟
        location /static/ {
            waf_cc_deny rate=10000r/m duration=1h zone=waf:cc_static;
        }
 
        # 将动态资源的请求速率限制到2,000次/分钟
        location /dynamic/ {
            waf_cc_deny rate=2000r/m duration=1h zone=waf:cc_dynamic;
        }
    }
}

---开启验证码

hCaptcha

reCAPTCHAv2

reCAPTCHAv3

-当你的站点受到 CC 攻击时开启验证码是不错的选择,因为验证码可以帮助你进行人机识别。本模块目前支持三种验证码,你应该选择一个并从其网站上申请到 Sitekey 和 Secret。配置完成之后,重启 nginx 服务。

# 整个站点开启验证码
server {
    waf_captcha on prov=hCaptcha secret=your_secret sitekey=your_sitekey;
}
# 为某个路径开启验证码
location {
    waf_captcha on prov=hCaptcha secret=your_secret sitekey=your_sitekey;
}
# 当访问频率过高时开启验证码
http {
    waf_zone name=waf size=20m;
    server {
        waf_cc_deny on rate=1000r/m duration=1h zone=waf:cc;
        waf_captcha off prov=hCaptcha secret=your_secret sitekey=your_sitekey;
        waf_action cc_deny=CAPTCHA zone=waf:action;
    }

---拦截请求时启用验证码

当一个请求被拦截时,ngx_waf 会对该 IP 启用验证码,此时该 IP 想要继续访问就必须完成验证码。这基本可以废掉多数的自动攻击工具,因为这些工具会尝试每一个漏洞,而我们总能识别一些明显的攻击请求并启用验证码,而自动工具时难以通过验证的。对于手动攻击者,这也能提高他们的时间成本。

http {
    waf_zone name=waf size=20m;
 
    server {
        waf_captcha off prov=xxx sitekey=xxx secret=xxx;
        waf_action blacklist=CAPTCHA zone=waf:action;
    }
}

---被攻击时降低带宽占用

-当你受到 CC 攻击时,攻击者的 IP 已经被 CC 防护拉黑,但是你的上下行带宽依然很高, 这是因为 CC 防护会返回一个 503 状态码,因此占用了你的带宽,你可以使用下面的配置来降低带宽占用。

-444 状态码是 nginx定义的一个非标准的 HTTP 状态码,其作用就是直接关闭连接,不再发送任何数据。如果你使用了 444 状态码,那么在用户看来你的网站就像是不存在一样。这是因为网站出错一般都会有 HTTP 状态码用来提示错误, 如果访问一个网站连错误提示都没有,那么大概率是这个网站不存在。

---LTS
waf_http_status cc_deny=444;
---Current
waf_action cc_deny=444;

---抵御分布式 CC 攻击

-CC 攻击(HTTP 洪水)是指发送大量的 HTTP 请求来耗尽服务器的资源。如果攻击者使用的 IP 较少则防御较为简单,因为只需要限制 IP 的请求频率,但是如果攻击者使用大量的 IP 进行攻击,仅仅限制 IP 的请求频率是无济于事的。这种使用大量 IP 进行 CC 攻击的方式称为分布式 CC 攻击或分布式 HTTP 洪水。

-本模块提供了一些缓解方式,第一种开启验证码来缓解,第二种使用降低带宽占用,第三种使用五秒盾来缓解。你可能听说过 Cloudflare 的五秒盾,本模块的五秒盾和 Cloudflare 的完全不同。它的功能是检测客户端是否能够正确地支持 Cookie,比如发送 Cookie 和正确地处理 Set-Cookie 响应头。你可以从本项目的 assets/ 目录下找到 under-attack.html 并将其拷贝到某个路径下,然后通过修改 nginx 的配置文件来开启五秒盾。

# ----LTS
 
# 为整个网站开启五秒盾
server {
    waf_under_attack on file=/path/to/under_attack.html;
}
 
# 为某个路径开启五秒盾
location /path {
    waf_under_attack on file=/path/to/under_attack.html;
}

# --- Current
 
# 为整个网站开启五秒盾
server {
    waf_under_attack on;
}
 
# 为某个路径开启五秒盾
location /path {
    waf_under_attack on;
}


waf_mode

  • 配置语法: waf_mode <mode_type> ...
  • 默认配置:——
  • 配置段: http, server, location

指定防火墙的工作模式,至少指定一个模式,最多指定八个模式。

mode_type具有下列取值(不区分大小写):

  • GET: 当Http.Method=GET时启动检查。
  • HEAD: 当Http.Method=HEAD时启动检查。
  • POST: 当Http.Method=POST时启动检查。
  • PUT: 当Http.Method=PUT时启动检查。
  • DELETE: 当Http.Method=DELETE时启动检查。
  • MKCOL: 当Http.Method=MKCOL时启动检查。
  • COPY: 当Http.Method=COPY时启动检查。
  • MOVE: 当Http.Method=MOVE时启动检查。
  • OPTIONS: 当Http.Method=OPTIONS时启动检查。
  • PROPFIN: 当Http.Method=PROPFIN时启动检查。
  • PROPPATCH: 当Http.Method=PROPPATCH时启动检查。
  • LOCK: 当Http.Method=LOCK时启动检查。
  • UNLOCK: 当Http.Method=UNLOCK时启动检查。
  • PATCH: 当Http.Method=PATCH时启动检查。
  • TRAC: 当Http.Method=TRAC时启动检查。
  • CMN-METH:等价于 HEAD GET POST。
  • ALL-METH:任意的 HTTP 请求方法都会启动检查。
  • IP: 启用 IP 地址的检查规则。
  • URL: 启用 url 的检查规则。
  • RBODY: 启用 POST 请求体的检查规则。
  • ARGS: 启用 args 的检查规则。
  • UA: 启用 user-agent 的检查规则。
  • COOKIE: 启用 cookie 的检查规则。
  • REFERER: 启用 referer 的检查规则。
  • CC: 启用 CC 防御。当你启用了此模式,你必须设置 waf_cc_deny
  • ADV:启用高级规则。
  • LIB-INJECTION-SQLI:使用 libinjection(opens new window)检测 SQL 注入。
  • LIB-INJECTION-XSS:使用 libinjection(opens new window)检测 XSS 攻击。
  • LIB-INJECTION:等价于 LIB-INJECTION-SQLI LIB-INJECTION-XSS。
  • CACHE:启用缓存。启用此模式后会缓存检查的结果,下次检查相同的目标时就不需要重复检查了。不过不会缓存 POST 体的检查结果。比如一个 URL 经过检查后并没有在黑名单中,那么下次检查相同的 URL 时就无需再次检查 URL 黑名单了。当你启用了此模式,你必须设置 waf_cache
  • STD:标准工作模式,等价于 HEAD GET POST IP URL RBODY ARGS UA CC CACHE LIB-INJECTION-SQLI。
  • STATIC:适用于静态站点的工作模式,等价于 HEAD GET IP URL UA CC CACHE。
  • DYNAMIC:适用于动态站点的工作模式,等价于 HEAD GET POST IP URL ARGS UA RBODY COOKIE CC CACHE LIB-INJECTION-SQLI。
  • FULL: 启用所有的模式。
  • [数据删除]: 启用此模式会[数据删除]。

您可以通过在某个 mode_type 前增加 ! 前缀来关闭该模式,下面是一个例子。 

表示使用标准的工作模式,但是不检查 User-Agent。

waf_mode STD !UA;

注意

如果同时启用两个及以上的存在冲突的模式,则靠右的模式会覆盖它左边的模式。下面的例子表示检查 User-Agent。

waf_mode !UA STD;


waf_cc_deny

配置语法: waf_cc_deny <rate=nr/m> [duration=1h] [size=20m]

默认配置:——

配置段: http, server, location

设置 CC 防护相关的参数。

rate:表示一段时间内的请求次数的上限,如 500r/m。超出限制后会返回 503 状态码 (opens new window),并附带 Retry-After (opens new window)响应头。

duration:表示超出第一个参数 rate 的限制后拉黑 IP 的时间,如 60s、60m、60h 和 60d,如不指定则默认为 1h。

size:用于设置记录 IP 访问次数的内存的大小,如 20m、2048k,不得小于 20m,如不指定则默认为 20m。当这段内存耗尽的时候程序会按照 LRU 策略清理一部分访问记录。


waf_cache

  • 配置语法: waf_cache <capacity=n>
  • 默认配置:—
  • 配置段: http, server, location

-设置缓存规则检查结果相关的参数。

  • capacity:对于一些启用了缓存机制的检测项目,每个检测项目最多缓存多少个检测目标的检测结果。

启用了缓存机制的检测项目

启用了缓存机制的检测项目指除了 CC 防护、IP 黑白名单检测和 POST 检测之外的所有的检测项。

-性能优化建议

capacity 过小会导致频繁地淘汰缓存,增加内存碎片,降低性能。所以请根据实际应用场景合理地设置。


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回