如何在Google App Engine中阻止100多个dos尝试子网?

时间:2013-02-09 07:24:01

标签: google-app-engine ddos

我的GAE应用程序有很多dos尝试,我无法将它们减少/合并到少于100个子网中以适应限制。有没有办法阻止超过100个子网?

如果Google App Engine团队有机会阅读此内容,我想说我真的很喜欢GAE,但现在阻止IP的方式效率很低。应该有一些功能可以帮助应用所有者动态阻止IP,无论是请求率还是更智能的东西。

1 个答案:

答案 0 :(得分:0)

使用GuiceSitebricks创建自己的动态速率限制非常简单。 Using method interceptors,您可以计算每个servlet的每个IP地址的请求数。这些计数器可以存储在memcache中,用于根据您自己的规则快速失败请求。这些可以完全针对具体应用。

@Service
class Servlet {
    @Get
    @At("/your/servlet")
    @IpRateLimited
    public Reply<?> foo(Request request) {
        return Reply.with("Hello World");
    }
}

class IpBasedRateLimiter implements MethodInterceptor {
    public Object invoke(final MethodInvocation invocation) throws Throwable {
         // Inspect the request argument on the invoked method to get the IP address
         if (isDenialOfServiceAttempt(invocation)) {
             // Fail the request
             return Reply.saying().error();
         } else {
             // Continue executing the original request
             return invocation.proceed();
         }
    }
}

...
bindInterceptor(Matchers.any(), Matchers.annotatedWith(IpRateLimited.class), 
    new IpBasedRateLimiter());
...

您仍然需要支付用于检测DOS尝试的CPU时间。但只要您的算法具有足够的积极性,那么这些成本将是最小的,例如一个memcache获取并检查条件。在GAE提供自己的动态DOS保护之前,我会这样做。