2013年08月22日 星期四 10:35
Robot Mitigation模块是基于Roboo(https://github.com/yuri-gushin/Roboo) 模块的理念,使用C语言进行了重写。
Robot Mitigation模块提供了一种防御HTTP机器人的功能,主要的目的在于防止恶意扫描和DDoS等网络威胁。Robot Mitigation模块采用了一种基于“挑战”的验证方法,即向客户端发送特定的、浏览器能解析的应答,如果客户端是真实的浏览器,则会重新触发请求,并带有一个特定的Cookie值,Robot Mitigation模块会依据此Cookie的信息来决定是否放行此请求。
Robot Mitigation模块相对于原始的Roboo主要在以下方面进行了增强:
语法 | robot_mitigation on / off |
默认值 | off |
上下文 | Location |
开启或关闭Robot Mitigation功能。
语法 | robot_mitigation_cookie_name cookie_name |
默认值 | SENGINX-ROBOT-MITIGATION |
上下文 | Location |
设置robot mitigation的cookie名称。
例如:
robot_mitigation_cookie_name robot_cookie;
语法 | robot_mitigation_mode js / swf |
默认值 | js |
上下文 | Location |
指定挑战类型,目前支持JavaScript和Flash两种。选择js时,会给客户端返回一个预先定义的javascript代码,浏览器在开启javascript的前提下,会重新触发之前的请求。选择swf时,会给客户端返回一个预先定义的flash文件,客户端浏览器在加载了Flash插件的情况下运行此flash文件,达到重新触发前次请求的目的。
语法 | robot_mitigation_blacklist failed_count |
默认值 | 5 |
上下文 | Location |
设置黑名单失败次数上限,例如:
robot_mitigation_blacklist 3;
默认累计3次挑战失败后加入黑名单。
语法 | robot_mitigation_action pass / block / blacklist notify=/path/to/a/page |
默认值 | block |
上下文 | Location |
指定动作,动作在开启session功能的时候有效,具体如下:
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 timeout |
默认值 | 60 |
上下文 | Location |
设置挑战成功后的有效时间,超过这个时间后,会重新发起挑战,单位是秒。
语法 | robot_mitigation_whitelist {...} |
默认值 | none |
上下文 | Location |
设置机器人白名单,用于指定带有特定User-Agent头的请求不进行挑战。
例如:
robot_mitigation_whitelist { "foo" "bar"; "baidu" "baiduspider"; };
白名单中,前一个字符串是白名单项的名称,后一个字符串是User-Agent中的特征,并且支持正则表达式。
语法 | 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 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 © 2024
京ICP备05028076号