Как заблокировать более 100 попыток подсетей в Google App Engine?

Было много попыток dos для моего приложения GAE, которые я не мог уменьшить/объединить менее чем в 100 подсетей, чтобы соответствовать ограничению. Есть ли способ заблокировать более 100 подсетей?

Если это читает команда Google App Engine, я хотел бы сказать, что мне очень нравится GAE, но способ блокировки IP-адресов сейчас неэффективен. Должны быть функции, которые помогут владельцам приложений динамически блокировать IP-адреса с точки зрения скорости запросов или чего-то более умного.


person Shih-Wen Su    schedule 09.02.2013    source источник
comment
FWIW, недавно выпущенный брандмауэр GAE не появляются ограничения по количеству правил.   -  person Dan Cornilescu    schedule 26.08.2017


Ответы (1)


Довольно просто создать собственное динамическое ограничение скорости с помощью Guice и Sitebricks. Используя перехватчики методов, вы можете подсчитать количество запросов на один 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. Но пока ваш алгоритм достаточно агрессивен, эти затраты будут минимальными, например. получить один memcache и проверить условие. Это то, что я буду делать, пока GAE не предоставит собственную динамическую защиту от DOS.

person Ingo    schedule 10.02.2013