[Документация Yandex Cloud](../../index.md) > [Практические руководства](../index.md) > [Безопасность](index.md) > Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7

# Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7

{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}

Руководство поможет остановить [DDoS-атаку](https://ru.wikipedia.org/wiki/DoS-атака), которая происходит в реальном времени.

## Условия применения руководства {#tutorial-conditions}

* Ваши сервисы находятся в Yandex Cloud или подключены к [Application Load Balancer](../../application-load-balancer/index.md) через [Cloud Interconnect](../../interconnect/index.md).
* Сервисы опубликованы в интернете через L7-балансировщик Application Load Balancer.
* DDoS-атака происходит на уровне L7 — поступает аномально большое количество HTTP-запросов (GET/POST).

{% note tip %}

Определите типовую нагрузку на ваш сервис. Это можно сделать в сервисе Application Load Balancer, в разделе **Мониторинг**. На графике **RPS** отображается общее количество входящих запросов в секунду, поступающих на балансировщик. Для анализа нормальной нагрузки выберите период до DDoS-атаки.

{% endnote %}

## Порядок настройки защиты {#setup-stages}

Защита от DDoS-атаки состоит в подключении сервиса [Smart Web Security](../../smartwebsecurity/index.md) и настройке правил, блокирующих вредоносный трафик.

1. [Создайте профиль безопасности](#setup-security-profile).
1. [Подключите профиль безопасности](#connect-profile) к виртуальному хосту.
   
   Если профиль безопасности был создан ранее и уже подключен к хосту, [проверьте его настройки](#setup-existing-profile).

1. [Проверьте работу профиля безопасности](#check-the-result).
1. [Настройте дополнительные правила защиты от DDoS](#anti-ddos).

После остановки атаки можно настроить индивидуальную защиту вашего сервиса с помощью [Smart Web Security](../../smartwebsecurity/concepts/index.md). Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Необходимые платные ресурсы {#paid-resources}

В стоимость инфраструктуры для защиты от DDoS входит плата за запросы, обработанные правилами [профиля безопасности](../../smartwebsecurity/concepts/profiles.md) ([тарифы Yandex Smart Web Security](../../smartwebsecurity/pricing.md)).

## Создайте профиль безопасности {#setup-security-profile}

_Профиль безопасности_ — основной элемент Smart Web Security. Профиль состоит из набора правил для обработки HTTP-трафика. Правила содержат условия фильтрации и действия, которые применяются к трафику, проходящему через виртуальный хост L7-балансировщика.

Для быстрого включения защиты используйте преднастроенный шаблон. В шаблоне собраны оптимальные настройки для базовой защиты веб-сервисов.

Чтобы создать профиль безопасности:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором находятся защищаемые ресурсы.
  1. Перейдите в сервис **Smart Web Security**.
  1. На панели слева выберите ![image](../../_assets/smartwebsecurity/profiles.svg) **Профили безопасности**.
  1. Нажмите **Создать профиль** и выберите **По преднастроенному шаблону**.
  1. Введите имя профиля, например `anti-ddos`.
  1. В поле **Действие для базового правила по умолчанию** выберите `Запретить`.
  1. В списке **SmartCaptcha** оставьте значение `По умолчанию`.
  1. Нажмите **Создать**.


{% endlist %}

## Подключите профиль безопасности к виртуальному хосту {#connect-profile}

Если балансировщик управляется [Ingress-контроллером](../../application-load-balancer/tools/k8s-ingress-controller/index.md) Application Load Balancer, используйте [аннотацию ресурса Ingress](../../application-load-balancer/k8s-ref/ingress.md#annot-security-profile-id).

{% note tip %}

Вместо ALB Ingress-контроллера и Gateway API рекомендуется использовать новый контроллер [Yandex Cloud Gwin](../../application-load-balancer/tools/gwin/index.md).

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором находится нужный [профиль безопасности](../../smartwebsecurity/concepts/profiles.md).
    1. Перейдите в сервис **Smart Web Security**.
    1. На панели слева выберите ![shield-check](../../_assets/console-icons/shield-check.svg) **Профили безопасности**.
    1. Выберите профиль безопасности, который вы хотите подключить к [виртуальному хосту](../../application-load-balancer/concepts/http-router.md#virtual-host) сервиса [Yandex Application Load Balancer](../../application-load-balancer/index.md).
    1. Нажмите кнопку ![plug](../../_assets/console-icons/plug-connection.svg) **Подключить к хосту**.
    1. В открывшемся окне нажмите **Добавить ресурс** и выберите **Виртуальный хост**.
    1. Последовательно установите значения в полях [**Балансировщик**](../../application-load-balancer/concepts/application-load-balancer.md), [**HTTP-роутер**](../../application-load-balancer/concepts/http-router.md) и [**Виртуальный хост**](../../application-load-balancer/concepts/http-router.md#virtual-host). Вы можете подключить профиль безопасности сразу к нескольким хостам.
  
        Чтобы подключить профиль к еще одному L7-балансировщику, нажмите кнопку **Добавить ресурс** и выберите **Виртуальный хост**.
      
    1. Нажмите кнопку **Подключить**. Если выбранные хосты уже подключены к другому профилю безопасности, подтвердите подключение.
  
        В разделе ![cubes-3-overlap](../../_assets/console-icons/cubes-3-overlap.svg) **Подключенные ресурсы** появятся подключенные виртуальные хосты.

{% endlist %}

## Настройте существующий профиль безопасности {#setup-existing-profile}

Если профиль безопасности был создан ранее, проверьте и скорректируйте его параметры:

1. **SmartCaptcha** — `По умолчанию`.

1. Проверьте наличие правила `sp-rule-1` с параметрами:
   * **Тип** — `Smart Protection`.
   * **Действие** — `Полная защита` (защита сайтов, подозрительные запросы отправляются в SmartCaptcha) или `Защита API` (подозрительные запросы блокируются).
   * **Условия** — `Весь трафик`.
   * **Приоритет** — `999900`.

1. Проверьте наличие базового правила с параметрами:
   * **Действие** — `Запретить`.
   * **Условия** — `Весь трафик`.
   * **Приоритет** — `1000000`.
   
## Проверьте работу профиля безопасности {#check-the-result}

Проверить работу профиля безопасности можно с помощью графиков мониторинга и записей в логах.

### Мониторинг {#monitoring}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Smart Web Security**.
  1. Выберите раздел **Мониторинг**.
  1. Посмотрите информацию на графиках:
     * **Denied by Security Profile RPS** — количество входящих запросов в секунду, которые были проверены и заблокированы профилем безопасности.
     * **Redirected to SmartCaptcha RPS** — количество входящих запросов в секунду, направленных в SmartCaptcha для дополнительной верификации.
     * **Denied by ARL Profile RPS** — количество входящих запросов в секунду, превысивших лимит профиля ARL и заблокированных.

{% endlist %}

Подробное описание графиков смотрите в разделе [Мониторинг в Smart Web Security](../../smartwebsecurity/operations/monitoring.md).

### Логирование {#logs}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Убедитесь, что для L7-балансировщика настроено [логирование](../../smartwebsecurity/operations/configure-logging.md).
  1. Перейдите в сервис **Application Load Balancer**.
  1. Выберите балансировщик, к которому привязан профиль безопасности.
  1. Выберите раздел **Логи**.
  1. Выберите количество сообщений на одной странице и период. Например, `1 час`.
  1. В строке **Запрос** укажите запрос на [языке фильтрующих выражений](../../logging/concepts/filter.md) и нажмите кнопку **Выполнить**.

      Примеры запросов:

      * Показать запросы, для которых сработало правило Smart Protection с отправкой на капчу:
        ```
        json_payload.smartwebsecurity.matched_rule.rule_type = SMART_PROTECTION and json_payload.smartwebsecurity.matched_rule.verdict = CAPTCHA
        ```

      * Показать запросы, заблокированные правилами профиля ARL:
        ```
        json_payload.smartwebsecurity.advanced_rate_limiter.verdict = DENY
        ```

{% endlist %}

Подробное описание работы с логами смотрите в разделе [Настроить логирование через Smart Web Security](../../smartwebsecurity/operations/configure-logging.md).

## Настройте дополнительные правила защиты от DDoS {#anti-ddos}

Чтобы ограничить нетипичную нагрузку на ваш сервис, настройте лимит запросов в профиле [ARL (Advanced Rate Limiter)](../../smartwebsecurity/concepts/arl.md).

### Настройте лимит запросов {#setup-arl}

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Smart Web Security**.
  1. На панели слева выберите ![image](../../_assets/smartwebsecurity/arl.svg) **Профили ARL**.
  1. Нажмите кнопку **Создать профиль ARL**.
  1. Введите имя профиля, например `anti-ddos-arl`.
  1. Нажмите кнопку ![plus-sign](../../_assets/console-icons/plus.svg) **Добавить правило** и укажите:
        
     * **Имя** — `arl-rps`.
     * **Приоритет** — `1000`.
     * **Трафик** — `Весь трафик`.
     * **Группировать запросы** — `Без группировки`.
     * **Лимит запросов** — укажите типовое количество запросов для вашего сервиса с небольшим запасом. Все запросы сверх лимита будут заблокированы.

  1. Нажмите кнопку **Сохранить правило**.
  1. Нажмите **Создать**.
  1. На панели слева выберите ![image](../../_assets/smartwebsecurity/profiles.svg) **Профили безопасности**.
  1. Напротив профиля `anti-ddos` нажмите ![options](../../_assets/console-icons/ellipsis.svg) и выберите **Редактировать**.
  1. В списке профилей ARL выберите `anti-ddos-arl`.
  1. Нажмите кнопку **Сохранить**.

{% endlist %}

### Настройте блокировку по спискам IP-адресов {#block-by-list}

[Списки](../../smartwebsecurity/concepts/lists.md) ненадежных адресов предустановлены в Smart Web Security и регулярно обновляются. Вы можете [составить свои списки](../../smartwebsecurity/operations/list-create.md) надежных или ненадежных адресов и добавлять их в условия фильтрации запросов.

{% list tabs group=instructions %}

- Консоль управления {#console}

   1. Перейдите в сервис **Smart Web Security**.
   1. На панели слева выберите ![image](../../_assets/smartwebsecurity/profiles.svg) **Профили безопасности**.
   1. Выберите профиль безопасности `anti-ddos`.
   1. Нажмите кнопку ![plus-sign](../../_assets/console-icons/plus.svg) **Добавить правило**.
   1. Введите **Имя**, например, `block-by-list`.
   1. Укажите параметры правила:
      * **Приоритет** — выше, чем у правила `sp-rule-1`. Например, `1000`.
      * **Тип** — `Базовое`.
      * **Действие** — `Запретить` или `Показать капчу`.
      * **Трафик** — `При условии`.
      * **Условия** — `IP`.
      * **Условия на IP** — `IP принадлежит списку`.
      * Выберите списки адресов. Запросы с этих адресов будут блокироваться:
         * `is_ddoser` — список IP-адресов, которые участвовали в DDoS-атаках.
         * Нажмите кнопку **+ или** и выберите `is_tor` — IP-адреса сети TOR, которая используется для анонимизации трафика.
         * Нажмите кнопку **+ или** и выберите `is_anonimous` — IP-адреса анонимных сетей, которые часто используются для сокрытия личности.
    1. Нажмите кнопку **Добавить**.

{% endlist %}

### Настройте блокировку по региону IP-адресов {#block-by-geo}

{% list tabs group=instructions %}

- Консоль управления {#console}

    Заблокируйте запросы из региона, откуда происходит атака. Если ваш сервис не работает в определенных регионах, можно сразу заблокировать трафик из этих регионов. Часто DDoS-атаки происходят с IP-адресов нецелевых стран.

   1. Выберите профиль безопасности `anti-ddos`.
   1. Нажмите кнопку ![plus-sign](../../_assets/console-icons/plus.svg) **Добавить правило**.
   1. Введите **Имя**, например, `block-by-geo`.
   1. Укажите параметры правила:
      * **Приоритет** — выше, чем у правила `sp-rule-1`, но ниже, чем у `block-by-list`. Например, `2000`.
      * **Тип** — `Базовое`.
      * **Действие** — `Запретить` или `Показать капчу`.
      * **Трафик** — `При условии`.
      * **Условия** — `IP`.
      * **Условия на IP** — `IP принадлежит региону`.
      * Выберите регион, из которого происходит атака. Например, `CN`, `US`, `IN`.
  
         Чтобы добавить еще регион, нажмите кнопку **+ или**.

      {% note tip %}

      Если ваш сервис работает только в некоторых регионах, выберите условие `IP не принадлежит региону`. В списке укажите целевой регион, например, `RU`. Трафик из других регионов будет блокироваться.

      Уточнить регион по IP-адресу можно на сайте [ipinfo.io](https://ipinfo.io/) или с помощью [ASN провайдера](https://ru.wikipedia.org/wiki/Автономная_система_(Интернет)).

      {% endnote %}

   1. Нажмите кнопку **Добавить**.

{% endlist %}

Проверьте работу правил с помощью графиков мониторинга и логов. При необходимости скорректируйте лимит запросов в профиле ARL.

## Как удалить созданные ресурсы {#clear-out}

Чтобы перестать платить за созданные ресурсы, воспользуйтесь одним из способов:

1. [Отключите профиль безопасности](../../smartwebsecurity/operations/host-delete.md) от виртуального хоста.
1. [Удалите профиль безопасности](../../smartwebsecurity/operations/profile-delete.md).