2

私のGAEアプリに対して多くのdos試行がありましたが、制限に収まるようにそれらを100未満のサブネットに減らしたり組み合わせたりすることはできませんでした。100 を超えるサブネットをブロックする方法はありますか?

もし Google App Engine チームがこれを読んでいるなら、私は本当に GAE が好きだと言いたいのですが、今の IP をブロックする方法は非効率的です. アプリの所有者が IP を動的にブロックするのに役立つ機能が必要です。これは、リクエスト レートまたはよりスマートなものの観点からです。

4

1 に答える 1

0

GuiceSitebricksを使用して独自の動的レート制限を作成するのは非常に簡単です。メソッド インターセプターを使用すると、サーブレットごとの 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 時間に対しては、依然として料金を支払う必要があります。ただし、アルゴリズムが十分に積極的である限り、これらのコストは最小限に抑えられます。たとえば、1 回の memcache の取得と状態のチェックです。これは、GAE が独自の動的 DOS 保護を提供するまで、私が行うことです。

于 2013-02-10T15:13:59.780 に答える