2013-02-09 4 views
2

내 GAE 앱에 많은 시도가 있었지만 제한에 적합하도록 100 개 미만의 서브넷으로 축소/결합 할 수 없었습니다. 100 개 이상의 서브넷을 차단할 수있는 방법이 있습니까?Google App Engine에서 100 개가 넘는 dos 시도 서브넷을 차단하는 방법은 무엇입니까?

Google App Engine 팀이이 글을 읽는 경우 GAE를 정말 좋아한다고 말하고 싶지만 IP 차단 방법은 비효율적입니다. 요청 비율이나 더 똑똑한 측면에서 앱 소유자가 동적으로 IP를 차단할 수있는 기능이 있어야합니다.

+0

FWIW, 새로 출시 된 [GAE 방화벽] (https://cloud.google.com/appengine/docs/standard/python/application-security#app_engine_firewall)에는 많은 규칙 제한이없는 것 같습니다. –

답변

0

GuiceSitebricks으로 동적 속도 제한을 만드는 것은 매우 간단합니다. Using method interceptors, 서블릿 당 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 보호 기능을 제공 할 때까지 내가 할 것입니다.