Robot Mitigation模块
目录 |
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代码
- 实现了和动态黑名单模块的联动,可以将恶意IP地址进行长时间阻断而不额外耗费系统资源
- 增强了白名单的功能,实现了基于DNS反查的User-Agent白名单功能
命令
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_timeout
语法 | robot_mitigation_timeout timeout |
默认值 | 60 |
上下文 | Location |
设置挑战成功后的有效时间,超过这个时间后,会重新发起挑战,单位是秒。
robot_mitigation_challenge_ajax
语法 | robot_mitigation_challenge_ajax on/off; |
默认值 | off |
上下文 | Location |
有效版本 | 1.5.5及以后版本 |
此命令设置是否挑战ajax类型的请求,当网页无法正确处理防机器人模块的应答挑战的时候,需要确保此命令为关闭状态,使得网站可以正常访问。
robot_mitigation_global_whitelist
语法 | robot_mitigation_global_whitelist ua_var_name=UA whitlist ip_var_name=IP whitelist ip_var_value=value; |
默认值 | - |
上下文 | Location |
有效版本 | 1.5.11及以后版本 |
此命令设置引用的全局IP白名单和User-Agent白名单,其中,IP白名单是和nginx的geo模块配合使用
例如:
#定义IP白名单 geo $ip_wl { ranges; default 0; 127.0.0.1-127.0.0.1 1; 3.0.0.1-3.2.1.254 1; } #定义UA白名单 whitelist_ua $ua_wl { "autotest" ".*\.test\.com"; } server { location { robot_mitigation_global_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; } }
废弃命令
以下和白名单相关的命令将不再使用,但会在1.5系列的版本中暂时保留。新的方式是使用全局的IP和user-agent白名单,配合robot_mitigation_global_whitelist命令。
- robot_mitigation_whitelist_caseless
- robot_mitigation_whitelist
- robot_mitigation_ip_whitelist
- robot_mitigation_ip_whitelist_x_forwarded_for
- robot_mitigation_resolver
- robot_mitigation_resolver_timeout
- robot_mitigation_whitelist_any
已知问题
- 机器人缓解模块在使用ajax技术的网站中可能会出现问题,因为在此类的网站上客户端的异步请求大多会期望一些特定格式数据的返回,例如JSON。如果此时恰好触发了挑战,导致应答了一段挑战代码,则导致客户端的js代码无法识别。