AWS WAF Как установить ограничение пути по IP ниже минимального 2000 запросов в минуту

У меня есть путь (например, mysite.com/myapiendpoint), который требует значительных ресурсов для обслуживания и очень подвержен злоупотреблениям со стороны ботов. Мне нужно ограничить доступ к этому конкретному пути примерно до 10 запросов в минуту на IP-адрес клиента. Как это может быть сделано?

Я размещаю инстанс EC2 с CloudFront и AWS WAF впереди. У меня включено стандартное правило на основе скорости, но его минимум 2000 запросов в минуту на IP-адрес абсолютно непригоден для моего приложения.

Я рассматривал возможность использования для этого API Gateway и использовал его в прошлом, но его ограничение скорости, насколько я понимаю, не основано на IP-адресе, поэтому боты просто использовали бы лимит, а законным пользователям постоянно было бы отказано в использовании конечная точка.

На моем сайте не используются какие-либо сеансы, поэтому я не думаю, что смогу установить какое-либо ограничение скорости на самом сервере. Также имейте в виду, что моим сайтом управляет один человек, и я новичок в AWS :)

Как я могу ограничить использование каждого IP-адреса примерно до 10 запросов в минуту, желательно в WAF?

[Редактировать]

После дополнительных исследований мне интересно, могу ли я включить пересылку заголовков в источник (запущенный узел / экспресс) и использовать пакет ограничителя скорости. Это жизнеспособное решение?


person user5071535    schedule 27.09.2018    source источник
comment
Мы также хотели бы сделать что-то подобное и могли бы пересылать и проверять IP-адрес в нашем приложении, но это значительно снизило бы преимущества использования CloudFront в качестве CDN, поскольку мы кэшируем между пользователями.   -  person Sam Collins    schedule 24.10.2018
comment
Просто чтобы следить за этим, я в конечном итоге использовал express-rate-limit, чтобы ограничить доступ к определенным конечным точкам API всего несколькими запросами в минуту на IP-адрес. Правило WAF было бы лучшим вариантом по разным причинам.   -  person user5071535    schedule 16.01.2019


Ответы (3)


AWS наконец-то выпустила обновление, которое позволяет ограничить скорость до 100 запросов каждые 5 минут.

Сообщение с объявлением: https://aws.amazon.com/about-aws/whats-new/2019/08/lower-threshold-for-aws-waf-rate-based-rules/

person Sam Collins    schedule 29.08.2019
comment
Наконец-то! Я использовал решение Люка плюс ограничение скорости на моем сервере узлов, но это хорошее улучшение. - person user5071535; 31.08.2019
comment
Уловка здесь в том, что на сегодняшний день это работает только через их веб-консоль. API и CLI и по-прежнему заблокированы на 2000 для минимального значения. - person Praveen Sastry; 02.10.2019

Я не знаю, полезно ли это для вас, но я только что получил совет от службы поддержки AWS. Если вы добавляете правило ограничения скорости несколько раз, это эффективно уменьшает количество запросов каждый раз. По сути, каждый раз, когда вы добавляете правило, учитывается дополнительный запрос для каждого IP-адреса. Скажем, IP делает один запрос. Если у вас есть 2 правила ограничения скорости, запрос учитывается дважды. Таким образом, вместо 2000 запросов, IP-адрес должен сделать только 1000, прежде чем он будет заблокирован. Если вы добавите 3 правила, он будет считать каждый запрос 3 раза, поэтому IP будет заблокирован при 667 запросах.

Еще они пояснили, что «окно» составляет 5 минут, но если общая сумма будет нарушена в любом месте этого окна, оно будет заблокировано. Я думал, что WAF будет оценивать запросы только через 5 минут. Так например. Допустим, у вас есть одно правило на 2000 запросов за 5 минут. Допустим, IP-адрес делает 2000 запросов в 1-ю минуту, а затем только 10 запросов в течение следующих 4 минут. Сначала я понял, что IP-адрес будет заблокирован только через 5 минут (потому что WAF оценивает 5-минутное окно). Но очевидно, что если IP-адрес превышает лимит где-нибудь в этом окне, он будет немедленно заблокирован. Таким образом, если этот IP-адрес сделает 2000 запросов в минуту 1, он будет фактически заблокирован со 2-й, 3-й, 4-й и 5-й минут. Но затем снова будет разрешен с 6-й минуты. Это многое прояснило для меня. Сказав это, я еще не тестировал это. Я предполагаю, что технический специалист службы поддержки AWS знает, о чем говорит, но определенно стоит сначала протестировать.

person Luke    schedule 14.01.2019
comment
Это звучит как довольно хороший компромисс, если это правда. Может ли кто-нибудь поручиться за это или указать на какую-то документацию по этому поводу? - person user5071535; 16.01.2019
comment
Я могу убедиться, что мы тоже использовали эту функцию. Это не задокументировано, и на самом деле это может быть ошибка, но я скажу, что этот стек работает для нас. - person Nicolas Webb; 03.04.2019

Использование правила дважды не сработает, потому что правило, основанное на скорости WAF, будет учитываться на основе журналов облачного наблюдения, оба правила будут подсчитывать 2000 запросов отдельно, поэтому оно не сработает для вас. Вы можете использовать шаблон облачного интерфейса автоматизации AWS-WAF и выбрать парсер лямбда / Athena, таким образом, количество запросов будет выполняться на основе журналов s3, а также вы сможете блокировать запросы SQL, XSS и плохие запросы ботов.

person Jay seen    schedule 22.08.2019