Назад | Перейти на главную страницу

Блокировать трафик за AWS ELB

Мои веб-серверы находятся за ELB, я хочу заблокировать трафик от определенного пользовательского агента, который является атакой DDOS. Apache всегда видит IP-адрес ELB как конечного пользователя, поэтому я попробовал следующие попытки:

  1. Блокировка IP-адреса на уровне ELB невозможна, потому что он имеет ограничение в 20 IP-адресов, и IP-адреса меняются при каждой атаке.
  2. Заблокируйте доступ с помощью условия перезаписи, это работает, но если поступает много совпадений, нагрузка на сервер превышает 100, и все потоки apache становятся занятыми, обслуживая тонны 403, поэтому сайт не работает для законных запросов.

    RewriteCond %{HTTP_USER_AGENT} ^SomeThing
    
    RewriteRule ^(.*)$ - [F]
    
  3. Блок с mod_sec делает то же самое, что и 403, который создает тот же эффект, что и # 2 выше.

  4. Блокировать пакеты с помощью строкового модуля iptables: блокировать пакеты с определенным пользовательским агентом. В этом сценарии iptables отправляет DROP / REJECT злоумышленнику, apache не получает сигнала о том, что соединения теперь мертвы, и ожидает тайм-аута, который вызывает таймаут для всех используемых потоков apache, поэтому этот метод здесь бесполезен.

    iptables -I INPUT -i eth0 -p tcp --dport 80 -m string --algo bm --string 'user-agent: SomeThing' -j REJECT
    

Могу ли я использовать iptables таким образом, чтобы он получал IP-адрес из первого пакета, который user-agent: SomeThing и заблокировать все следующие пакеты, X-Forwarded-For: someIP в течение 4-5 часов. Я не хочу постоянно блокировать IP-адреса, поскольку эти IP-адреса могут быть назначены некоторым законным пользователям, и они будут заблокированы.

Или есть другой способ лучше справиться с этой атакой?

В качестве альтернативы не используйте ELB, а разверните собственный балансировщик нагрузки с помощью HAProxy.

Если вы развертывали свой сайт с помощью AWS OpsWorks, вы должны знать, что AWS OpsWorks поддерживает Уровень балансировщика нагрузки на основе HAProxy.

Да, подготовка уровня балансировщика нагрузки HAProxy требует гораздо больше усилий, чем простое развертывание набора ELB, но в конечном итоге это позволяет полностью настроить параметры iptables, даже используя fail2ban.


Редактировать: Если настройка рецептов Chef не ваше блюдо (: D), у меня есть альтернатива. Я только что создал проект FOSS под названием haproxy-автомасштабирование, размещенный на bitbucket, если кто-то хочет его проверить. Почти готово. Уже можно использовать, но требуется ручная работа.

URL: https://bitbucket.org/pepoluan/haproxy-autoscaling/overview

Исходный IP-адрес клиента предоставляется ELB в X-Forwarded-For заголовок.

Вы можете использовать X-Forwarded-For в своем переписать правила.

Блокировка IP-адресов в iptables - хороший план, так как это минимизирует влияние на ваш сервер. Но правила в iptables существуют навсегда, поэтому вам нужно что-то еще, чтобы управлять истечением срока действия черного списка. fail2ban кажется простым решением этой проблемы. Другая проблема заключается в том, что исходный IP-адрес будет внутренним IP-адресом ELB, поэтому вам необходимо выполнить фильтрацию в группе безопасности перед ELB.