SEnginx认证群组  - 讨论区

标题:Robot Mitigation模块(机器人缓解)

2013年08月22日 星期四 10:35

Robot Mitigation模块(机器人缓解)

概要

Robot Mitigation模块是基于Roboo(https://github.com/yuri-gushin/Roboo) 模块的理念,使用C语言进行了重写。
Robot Mitigation模块提供了一种防御HTTP机器人的功能,主要的目的在于防止恶意扫描和DDoS等网络威胁。Robot Mitigation模块采用了一种基于“挑战”的验证方法,即向客户端发送特定的、浏览器能解析的应答,如果客户端是真实的浏览器,则会重新触发请求,并带有一个特定的Cookie值,Robot Mitigation模块会依据此Cookie的信息来决定是否放行此请求。

Robot Mitigation模块相对于原始的Roboo主要在以下方面进行了增强:

  • C语言的效率更高,并且对机器人判断的位置提到了content handler之前
  • 简化了原始Roboo的配置,更方便使用
  • 基于NetEye安全层统一进行调用顺序和动作的处理。
  • 对于javascript挑战类型,根据用户事先定义的javascript代码集合,随机返回javascript代码,而不使用单一的javascript代码
  • 基于安全会话机制,实现了动作的定义,动作包括放行、阻断、加入黑名单(需要动态黑名单模块支持)
  • 支持在阻断和加入黑名单时给客户端返回特定的html页面进行提示

 

命令

robot_mitigation

语法 robot_mitigation on / off
默认值 off
上下文 Location

开启或关闭Robot Mitigation功能。

robot_mitigation_cookie_name

语法 robot_mitigation_cookie_name cookie_name
默认值 SENGINX-ROBOT-MITIGATION
上下文 Location

设置robot mitigation的cookie名称。 
例如:

robot_mitigation_cookie_name robot_cookie;

 

robot_mitigation_mode

语法 robot_mitigation_mode js / swf
默认值 js
上下文 Location

指定挑战类型,目前支持JavaScript和Flash两种。选择js时,会给客户端返回一个预先定义的javascript代码,浏览器在开启javascript的前提下,会重新触发之前的请求。选择swf时,会给客户端返回一个预先定义的flash文件,客户端浏览器在加载了Flash插件的情况下运行此flash文件,达到重新触发前次请求的目的。

robot_mitigation_blacklist

语法 robot_mitigation_blacklist failed_count
默认值 5
上下文 Location

设置黑名单失败次数上限,例如:

robot_mitigation_blacklist 3;

默认累计3次挑战失败后加入黑名单。

robot_mitigation_action

语法 robot_mitigation_action pass / block / blacklist notify=/path/to/a/page
默认值 block
上下文 Location

指定动作,动作在开启session功能的时候有效,具体如下:

  • pass,如果第一次挑战后,客户端依然没有带特定的Cookie,则放行
  • block,如果第一次挑战后,客户端依然没有带特定的Cookie,则阻断这次请求
  • blacklist,只在编译并开启了动态黑名单功能时有效,当客户端的请求阻断达到用户设置的次数(默认为5)时,将此会话标识加入到黑名单,禁止访问一定时间(默认为60秒),例如:

robot_mitigation_action blacklist; 
默认5次挑战失败后加入黑名单,时间为60s。
notify参数制定了一个本地的html页面的路径,此路径是基于web服务器的根目录的位置,而不是文件系统中的位置,例如:

location /pages {
    root html/;
}
 
location / {
    robot_mitigation on;
    robot_mitigation_action block notify=/pages/somepage.html;
    proxy_pass http://backend;
}

这样当请求被阻断的时候,会给客户端返回somepage.html页面,一般用于提示用户需要开启浏览器的javascript支持。

robot_mitigation_timeout

语法 robot_mitigation_timeout timeout
默认值 60
上下文 Location

设置挑战成功后的有效时间,超过这个时间后,会重新发起挑战,单位是秒。

robot_mitigation_whitelist

语法 robot_mitigation_whitelist {...}
默认值 none
上下文 Location

设置机器人白名单,用于指定带有特定User-Agent头的请求不进行挑战。
例如:

robot_mitigation_whitelist {
      "foo" "bar";
      "baidu" "baiduspider";
};

白名单中,前一个字符串是白名单项的名称,后一个字符串是User-Agent中的特征,并且支持正则表达式。

robot_mitigation_ip_whitelist

语法 robot_mitigation_ip_whitelist {...}
默认值 none
上下文 Location

设置机器人的IP白名单,用于指定来自某些源IP地址的请求不进行挑战。
例如:

robot_mitigation_whitelist {
      "1.1.1.1" "1.1.1.10";
      "2.2.2.2";
};

在IP白名单中,可以配置IP地址范围,也可以只配置单一IP地址。
如果配置IP地址范围,则需要提供两个参数,分别代表IP地址范围的开始和结束地址,如上例中的1.1.1.1 ~ 1.1.1.10。
如果只配置单个IP地址,则使用一个参数的形式,如上例中的2.2.2.2。

robot_mitigation_ip_whitelist_x_forwarded_for

语法 robot_mitigation_ip_whitelist_x_forwarded_for on/off;
默认值 none
上下文 Location

设置匹配IP白名单时是否关注请求中的X-Forwarded-For头中的IP地址,on为关注,off为不关注
robot_mitigation_ip_whitelist_x_forwarded_for配置为“on”时,如果请求头中有"X-Forwarded-For"头,SEnginx会用X-Forwarded-For中的第一个IP去匹配IP白名单;
如果robot_mitigation_ip_whitelist_x_forwarded_for配置为“off”,或robot_mitigation_ip_whitelist_x_forwarded_for配置为“on”但请求中没有X-Forwarded-For头时,SEnginx会用请求包中的源IP去匹配。
例如:

robot_mitigation_ip_whitelist_x_forwarded_for on;

robot_mitigation_ip_whitelist {
      "10.5.1.78" "10.5.1.79";
}

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号