SEnginx官方主页http://www.senginx.org

http {
    #nginx原有配置

    #定义一个10MB的内存用于SEnginx访问统计
    statistics_zone 10m; 
    #开启全局IP黑名单
    ip_blacklist on;
    #存储的IP数量
    ip_blacklist_size 10240;
    #IP在黑名单保留时间(秒)
    ip_blacklist_timeout 120;
    #名单保存在SEnginx内部
    ip_blacklist_mode local;
    #定义一个容量10MB的令牌空间,每个地址每秒只能请求10次(每秒补充10个令牌)
    limit_req_zone $binary_remote_addr zone=mudoom:10m rate=10r/s;
    #定义一个容量10MB的行为识别空间,最小有效请求数量是10个,采样周期是2秒
    ip_behavior_zone zone=brand:10m sample_base=10 sample_cycle=2s;

    #定义IP白名单
    geo $ip_wl {
        #使用以地址段的形式定义地址
        ranges;
        default 0;
        127.0.0.1-127.0.0.1 1;
    }
    #定义UA白名单,忽略常用网络爬虫
    whitelist_ua $ua_wl {
        #忽略大小写
        caseless;
        "Baiduspider" ".*\.baidu\.com";
        "Baidu-YunGuanCe-SLABot" ".*\.baidu\.com";
        "Googlebot" ".*\.google\.com";
        "360Spider" ".*\.360\.cn";
        "360JK" ".*\.360\.cn";
        "Sosospider" ".*\.soso\.com";
        "Sogou web spider" ".*\.sogou\.com";
        "bingbot" ".*\.bing\.com";
    }
    server{
        #原有server配置

        #定义一个虚拟server名,用于SEnginx访问统计显示
        virtual_server_name www.mudoom.cn;
        #在当前server上开启ip识别空间brand并进行敏感url访问行为识别。
        ip_behavior zone=brand type=sensitive_url;

        #开启机器人挑战
        location @process {            #将全局IP白名单和User-Agent白名单作为机器人挑战白名单
            robot_mitigation_global_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1;
            #开启Robot Mitigation模块(机器人缓解)
            robot_mitigation on;
            #机器人挑战模式(JS)
            robot_mitigation_mode js;
            #黑名单失败次数上限
            robot_mitigation_blacklist 50;
            #挑战成功后的有效时间(秒)
            robot_mitigation_timeout 600;
            #关闭挑战ajax类型的请求
            robot_mitigation_challenge_ajax off;
            
            #php-fpm等原有配置
            fastcgi_pass 127.0.0.1:9000;
            ...
        }
        #请求可查看当前黑名单,安全起见需限定为内部访问
        location /blacklist_show {            allow 127.0.0.1;
            deny all;
            ip_blacklist_show;
        }

        #请求可清空黑名单列表,安全起见需限定为内部访问
        location /blacklist_flush {
            allow 127.0.0.1;
            deny all;
            ip_blacklist_flush;
        }        #请求可显示SEnginx访问统计,安全起见需限定为内部访问 
        location /stats {
            allow 127.0.0.1;
            deny all;
            statistics;
        }        #用于阻断的location
        location /RequestDenied {
	    return 403;
        }

        #使用安全模块控制的location配置
        location /mudoom {
            #敏感资源标识
            ip_behavior_sensitive;
            #原有令牌100枚,超出则触发机器人挑战
            limit_req zone=mudoom burst=100 forbid_action=@process condition=$cond;
            #当请求非敏感资源的占比小于30%时触发机器人挑战
            ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) {
                set $cond 1;
            }

            #将全局IP白名单和User-Agent白名单作为cookie防篡改白名单 
            cookie_poisoning_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1;
            #cookie防篡改功能
            cookie_poisoning off;
            #指定发现cookie被篡改时执行的动作 block阻断、pass放行 、remove删除被篡改的cookie值 
            cookie_poisoning_action block;
            #阻断超过5次后加入黑名单
            cookie_poisoning_action blacklist,5;            #发现攻击时,是否向error log中写入log
            cookie_poisoning_log on;
 
            #将全局IP白名单和User-Agent白名单作为Naxsi白名单 
            naxsi_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1;
            #启动学习模块
	    LearningMode;
            #安全规则激活
            #SecRulesEnabled;
            #安全规则规避
	    #SecRulesDisabled;
	    #安全规则触发行为 
	    DeniedUrl "/RequestDenied";            #安全规则
	    CheckRule "$XSS >= 4" BLOCK;
	    CheckRule "$TRAVERSAL >= 4" BLOCK;
	    CheckRule "$EVADE >= 8" BLOCK;
	    CheckRule "$UPLOAD >= 8" BLOCK;
	    CheckRule "$RFI >= 8" BLOCK;
	    CheckRule "$SQL >= 8" BLOCK;

            #php-fpm等原有配置
            fastcgi_pass 127.0.0.1:9000;
            ...
        }
    }
}

SEnginx访问统计返回部分变量说明:

变量 说明
traffic 访问量统计
cur_req 当前请求数
req 总相应请求数
res_2xx 2xx请求数
res_3xx 3xx请求数
res_4xx 4xx请求数
res_5xx 5xx请求数
sent 发送数据量
recvd 接受数据量
attack 攻击统计
sql SQL注入
xss XSS
rfi 远程文件包含
dt 目录穿透
evade Evading tricks
fu 文件上传
cp cookie篡改
wd 网页篡改
rm 机器人挑战
other 其他

注意:SEnginx访问统计保存在内存中,故每次nginx关闭后统计清零