|
如题
为了更好的提高M2M的稳定性和防攻击能力,对连接M2M服务的客户端做如下限制:
限制客户端同一个IP的连接数量,超过这个数量则连接不进来。(可以一定种度防止DOS攻击)
可以配置是否启用该功能
单个IP的最大连接数量为配置值,默认1000个连接/IP
客户端发送MQTT消息的频率(多少个消息每秒),超过设定值则踢客户端下线并阻塞该客户端连接,30分钟后取消阻塞(该值可配置)
可以配置是否启用
运行时,单位时间内客户端不能发送超过一定消息个数的MQTT消息,可配置,默认为300个/60秒,否则踢客户端下线并30分钟内阻塞该客户端连接(给定60秒的时间周期是由于客户端在登陆时或在网络不顺畅时服务器端会出现同时到达多个消息的情况)
当客户端离线时,统计其平均消息发送频率,频率不能超过一定的个数,配置值,默认为5个/秒,否则30分钟内阻塞该客户端连接(可以防止这样的攻击:连发299个,重连,再发299个消息,重连,再发)
客户端发送MQTT消息的速率,超过设定值则踢客户端下线并阻塞该客户端连接,30分钟后取消阻塞(该值可配置)
可以配置是否启用
运行时,单位时间内客户端不能发送超过一定总量的字节数,可配置,默认为30MB/60秒,否则踢客户端下线并30分钟内阻塞该客户端连接(给定60秒的时间周期是由于客户端在登陆时或在网络不顺畅时服务器端会出现同时到达多个消息的情况)
当客户端离线时,统计其发送速率,不能超过一定的值,配置值,默认为0.5M/秒,否则30分钟内阻塞该客户端连接(可以防止这样的攻击:连发29MB,重连,再发29MB,重连,再发)
客户端重连的频率,超过设定值则阻塞该客户端连接,30分钟后取消阻塞(该值可配置)
可以配置是否启用
当客户端离线时,统计其上线的时间,如果上线时间小于15秒(从TCP Connect成功开始计算至离线时间),计数加1。当60秒内计数超过10次,30分钟内阻塞该客户端连接。
以上默认值都设得比较保守,目的是确保不影响当前的设备与app的正常运行。代码会做一个更严格的限制参数,超出则记录日志但不断开与客户端的连接,目的是想通过一段时间的上线运行慢慢找到更严格的限制参数。
|
|