访问行为识别模块

来自SEnginx
跳转至: 导航, 搜索

目录

访问行为识别模块

概要

访问行为识别模块的作用是对用户访问网站的行为进行监控,在和其他功能模块(例如基于条件的限速功能和机器人缓解功能)配合使用的情况下,可以使得一些动作的执行更加准确,例如对CC攻击和页面扫描的判断等场景。
目前此模块只支持敏感URL访问识别一种模式,其他行为模式的支持会逐渐添加。

此功能在1.5.10之后的SEnginx中提供。

命令

ip_behavior_zone

语法 ip_behavior_zone zone=name:size sample_base=times sample_cycle=cycle;
默认值
上下文 http

定义一个IP分析zone,需要指定三个参数:

  • zone=name:size,name为zone的名称,size是占用的内存大小,可用单位有m,k等;
  • sample_base=times,指定有效采样的请求数量,times为整数值;
  • sample_cycle=cycle,指定采样的周期,单位可以为s秒和m分钟,只有在采样周期内达到sample_base次数的请求才会被计算访问行为。


举例:

ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s;

定义一个10MB大小的zone,采样周期是2秒,最小有效请求数量是10个。


ip_behavior

语法 ip_behavior zone=name type=type;
默认值
上下文 server

在server上启用一个IP分析zone,需要指定二个参数:

  • name,name为之前定义的zone的名称;
  • type:指定要进行分析的模式,目前只支持sensitive_url,即敏感url访问行为识别一种模式。


举例:

server {
    ip_behavior zone=abc type=sensitive_url;
}

在某server上开启zone abc并进行敏感url访问行为识别。

ip_behavior_sensitive

语法 ip_behavior_sensitive;
默认值
上下文 location

指定某个location下的资源为敏感资源,此命令可以出现在多个location中
举例:

server {
    location ~* .*\.php {
        ip_behavior_sensitive;
        
        ...
    }
}

没有标明成sensitive的location则视为非敏感的资源。

变量

$insensitive_percent

返回某个IP地址的非敏感url的访问占全部访问的比例,可以在ifany、ifall和if中使用,一般用于设置条件限速功能的condition。例如:

ifall ($insensitive_url >= 0) ($insensitive_url < 30) {
    set $cond 1;
}

配置示例

将访问行为识别模块其他模块组合使用,可以实现多种不同的功能。

和基于条件的限速模块组合使用

http {
    ...
    limit_req_zone $binary_remote_addr zone=cc:10m rate=1r/s;
    ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s;
    ...

    server {
         ...
         ip_behavior zone=abc type=sensitive_url;
         ...

         location ~ /.*\.php {
             limit_req zone=cc burst=1 condition=$cond;         
             ip_behavior_sensitive;

             ifall ($insensitive_percent >= 0) ($insensitive_percent < 5) {
                 set $cond 1;
             }

             fastcgi_pass 127.0.0.1:9000;
             ...
         }

         location / {
             root html/;
         }
    }
}

说明:只有大量访问敏感url的行为会被限速,否则不执行限速动作。

和机器人缓解模块组合使用

http {
    ...
    ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s;
    ...

    server {
         ...
         ip_behavior zone=abc type=sensitive_url;
         ...

         location ~ /.*\.php {
             ip_behavior_sensitive;

             ifall ($insensitive_percent >= 0) ($insensitive_percent < 5) {
                 return 599;
             }

             fastcgi_pass 127.0.0.1:9000;
             ...
         }

         location @process {
            ns_layer_force_run;

            robot_mitigation on;
            robot_mitigation_blacklist 10;

            fastcgi_pass 127.0.0.1:9000;
            ...
         }

         error_page 599 = @process;
    }
}

说明:对短时间内大量访问敏感url的IP地址进行机器人挑战,挑战失败10次会被加入到动态IP黑名单中,挑战成功的可以继续访问资源。

和基于条件的限速模块以及机器人缓解模块组合使用

http {
    ...

    limit_req_zone $binary_remote_addr zone=cc:10m rate=5r/s;
    limit_req_zone $binary_remote_addr zone=total:10m rate=30r/s;
    ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=1s;

    server {
        ...
        ip_behavior zone=abc type=sensitive_url;
        
        location / {
            root  html/;
        }


        ...


        location ~* .*\.php {
            limit_req zone=cc burst=1 forbid_action=@process condition=$cond;
            limit_req zone=total burst=5;


            ip_behavior_sensitive;


            ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) {
                set $cond 1;
            }


            fastcgi_pass  127.0.0.1:9000;
            ...
        }


        location @process {
            ns_layer_force_run;
            
            robot_mitigation on;
            robot_mitigation_mode js;

            fastcgi_pass  127.0.0.1:9000;
            ...
        }
    }
}

使用限速功能的forbid_action将阻断的请求进行机器人缓解挑战,如果挑战成功,则放行,否则继续挑战以缓解后端php-fpm和数据库的压力。

个人工具
名字空间
  • 页面
  • 讨论

变换
操作
导航
其他语言
工具箱