WAF и безопасность
Настройка управляемых наборов правил WAF, пользовательских правил межсетевого экрана, ограничения частоты запросов, режима защиты при атаке и управления доступом: защиты от хотлинкинга, списков стран и User-Agent.
У каждого домена CDN есть страница Межсетевой экран, где можно управлять политикой безопасности, применяемой пограничными узлами к этому домену. Перейдите в CDN → CDN-домены, откройте домен и выберите Межсетевой экран. URL в консоли: /cdn/domains/<domain>/firewall.
На странице межсетевого экрана четыре вкладки:
| Вкладка | Назначение |
|---|---|
| Настройка правил | Пользовательские правила межсетевого экрана, управляемые наборы правил WAF и пользовательские правила WAF с начислением баллов |
| Контроль доступа | Защита от хотлинкинга, блокировка стран/ASN, списки User-Agent, аутентификация доступа, режим защиты при атаке (UAM) и защита соединений |
| Аналитика WAF | Статистика блокировок и других событий (см. Журналы и аналитика) |
| Журнал событий | Отдельная запись для каждого заблокированного запроса или запроса, для которого назначена проверка |
При сохранении конфигурация автоматически передаётся на пограничные узлы. Изменения обычно вступают в силу за время от нескольких секунд до минуты; очищать кеш не требуется.
Управляемые наборы правил WAF
WAF (межсетевой экран веб-приложений) проверяет URI, строку запроса, User-Agent, Referer и файлы cookie каждого запроса. Также проверяются тела запросов с данными форм и JSON. Проверка выявляет признаки распространённых атак.
Откройте Межсетевой экран → Настройка правил и найдите карточку Предустановленные наборы правил WAF.
Включите основной переключатель в заголовке карточки.
Разверните категорию и включите или отключите отдельные наборы правил:
Набор правил Что обнаруживает SQL-инъекции Данные, характерные для SQL-инъекций XSS Данные, характерные для межсайтового скриптинга Обход каталогов Обход каталогов с помощью конструкций вида ../Внедрение команд Внедрение команд ОС LFI/RFI Включение локальных и удалённых файлов Атаки на протокол Некорректные или аномальные HTTP-запросы Обнаружение сканеров Распространённые сканеры уязвимостей Вредоносные роботы Известные вредоносные поисковые роботы В разделе Настройки движка CRS выберите Режим проверки:
- Блокировать: блокирует совпавший запрос с кодом
403и записывает событие в журнал. - Только журналирование: записывает событие в журнал без блокировки. Используйте этот режим для проверки ложных срабатываний перед применением новых правил.
- Блокировать: блокирует совпавший запрос с кодом
Нажмите Сохранить.
Порог оценки аномалий применяется к правилам с начислением баллов. Каждое сработавшее правило добавляет баллы к оценке запроса; когда оценка достигает порога, запрос блокируется. Значение по умолчанию — 5. Чем меньше значение, тем строже проверка.
Доступность WAF зависит от тарифа. На момент написания функция включена в тарифы CDN Professional и Enterprise и недоступна на Free и Starter. Актуальные сведения приведены на странице тарифов. Если ваш тариф не включает WAF, переключатель не влияет на работу пограничных узлов.
При первом включении WAF некоторое время используйте режим имитации. Проверьте в Журнале событий, какие легитимные запросы были бы заблокированы, затем переключитесь в активный режим.
Пользовательские правила WAF с начислением баллов
Если управляемые наборы правил не охватывают ваш сценарий, добавьте правила в карточке Пользовательские правила WAF с начислением баллов:
- Область проверки: URI (со строкой запроса), путь, параметры запроса, тело запроса, заголовок запроса, файл cookie, User-Agent или метод. Для заголовков и файлов cookie можно указать имя.
- Тип сопоставления: регулярное выражение, SQL-инъекция (libinjection) или XSS (libinjection).
- Действие:
- Блокировать: немедленно блокирует запрос. Можно задать код состояния; по умолчанию
403. - Записать в журнал (начислить баллы): добавляет баллы правила к оценке запроса. Запрос блокируется, когда его суммарная оценка достигает порога оценки аномалии.
- Блокировать: немедленно блокирует запрос. Можно задать код состояния; по умолчанию
Пользовательские правила межсетевого экрана
Пользовательское правило межсетевого экрана связывает условия с действием. Типичные сценарии — блокировка IP-адресов, разрешение трафика только из определённых стран и защита конечных точек входа в систему.
Создание правила
- На вкладке Правила нажмите Добавить правило.
- Введите имя. Приоритет может быть от 1 до 9999; значение по умолчанию — 100.
- Добавьте одно или несколько условий. Каждое условие содержит поле, необязательный ключ, оператор и значение. Запрос соответствует правилу, только если выполнены все условия.
- Выберите действие и заполните его настройки.
- Сохраните правило. В любой момент его можно включить, отключить или удалить из списка.
Поля
| Поле | Описание |
|---|---|
| IP-адрес | IP-адрес клиента. Для оператора «в списке» каждое значение может быть отдельным IP-адресом или диапазоном CIDR |
| Код страны | Код ISO 3166-1 alpha-2, например US или DE |
| ASN | Номер автономной системы, например 13335 |
| Путь URI / Путь | Путь запроса без строки запроса |
| Host | Запрашиваемое имя хоста |
| Метод | GET, POST и т. д. |
| User-Agent / Referer | Соответствующий заголовок запроса |
| Заголовок / Cookie / Параметр запроса | Укажите имя в поле ключа |
| Расширение | Расширение файла, например jpg |
Доступные операторы: равно, не равно, содержит, не содержит, начинается с, заканчивается на, в списке, не в списке, соответствует регулярному выражению, больше/меньше (или равно), существует и не существует. Для операторов со списками указывайте каждое значение на отдельной строке.
Страна и ASN определяются по IP-адресу клиента. Если определить их для IP-адреса не удалось, условия по этим полям не выполняются.
Действия
| Действие | Результат |
|---|---|
| Блокировать | Возвращает ответ с ошибкой. Можно задать код состояния от 400 до 599; по умолчанию 403 |
| Разрешить | Пропускает проверку WAF и все оставшиеся правила. Используйте для доверенных IP-адресов или конечных точек обратного вызова |
| JS-проверка / Управляемая проверка | Показывает посетителю страницу проверки браузера с тем же механизмом, что и в режиме защиты при атаке. После успешной проверки повторная не требуется до истечения срока действия допуска |
| Ограничение частоты запросов | Подсчитывает совпавшие запросы и выполняет действие при превышении лимита (см. ниже) |
Один запрос может соответствовать нескольким правилам. Не включайте пересекающиеся правила с противоречащими действиями, например разрешение и блокировку одного диапазона. Результат может оказаться неожиданным.
Пример API
Блокировка подсети:
curl -X POST "https://api.yeap.cloud/api/user/cdn/firewall-rules/create" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"domain_id": 123,
"name": "Block bad subnet",
"expression": {"op": "and", "conditions": [
{"collection": "IP", "op": "in", "var": ["203.0.113.0/24"]}
]},
"action": "block",
"action_config": {"status": 403},
"priority": 100,
"enabled": true
}'Другие конечные точки:
- Список правил:
GET /api/user/cdn/firewall-rules?domain_id=123 - Обновление правила:
POST /api/user/cdn/firewall-rules/update, сidв теле запроса - Удаление правила:
DELETE /api/user/cdn/firewall-rules/delete?id=<id>
Ограничение частоты запросов
Чтобы ограничить частоту запросов, создайте правило межсетевого экрана с действием Ограничение частоты запросов. Условия правила задают запросы, которые требуется защитить, например пути, начинающиеся с /api/login. Затем настройте:
- Лимит запросов и окно (секунды): лимит считается превышенным, когда количество запросов за указанное окно становится больше лимита.
- Ключ: IP-адрес, заголовок запроса, файл cookie, путь URI или страна. Для заголовков и файлов cookie также укажите имя, например
X-Api-Key. - Область действия: Весь домен ведёт отдельный счётчик для каждого значения ключа, например для каждого IP-адреса. Глобально использует один счётчик для всех запросов, соответствующих правилу.
- При превышении: блокировать с кодом
429, назначить проверку, только записать в журнал или замедлить ответ (tarpit). Tarpit замедляет ответ, но не отклоняет запрос.
Каждая пограничная площадка ведёт собственные счётчики. Если запросы клиента распределены между несколькими площадками, общее разрешённое количество запросов по сети может быть выше лимита для одной площадки.
Управление доступом
Вкладка Контроль доступа содержит несколько отдельных модулей. У каждого есть собственный переключатель. По завершении нажмите Сохранить правила доступа, чтобы сохранить все настройки.
Защита от хотлинкинга (список Referer)
- Разрешать пустой Referer и Разрешать тот же домен: пропускают прямые посещения и переходы с вашего сайта.
- Разрешённые домены: по одной записи на строку. Можно использовать точные имена, подстановочные знаки, например
*.example.com, или регулярные выражения, начинающиеся с~. Если список не пуст, Referer должен соответствовать одной из записей. - Заблокированные домены: совпавший запрос блокируется. Этот список имеет приоритет над списком разрешённых доменов.
- Защищаемые расширения: ограничивает защиту определёнными типами файлов, например
.jpgили.mp4. Оставьте поле пустым, чтобы защитить все пути.
Блокировка по стране / ASN
Задайте списки блокировки и разрешений для стран, административных единиц (коды ISO 3166-2) и ASN, по одной записи на строку. Совпадение со списком блокировки приводит к блокировке. Если список разрешений для какого-либо критерия не пуст, допускаются только посетители из этого списка. При использовании нескольких критериев посетитель должен пройти проверку по каждому из них.
Список User-Agent
Задайте действие по умолчанию, обработку пустого User-Agent и код состояния при блокировке, затем добавьте правила. При действии «разрешить» по умолчанию список работает как список блокировки; при действии «блокировать» — как список разрешений. Правила проверяются сверху вниз, и первое совпадение определяет результат. Доступно сопоставление по подстроке, шаблону с подстановочными знаками, регулярному выражению, точному значению, префиксу или суффиксу.
Аутентификация доступа
Можно задать списки разрешённых и запрещённых IP-адресов с поддержкой диапазонов CIDR. Также можно потребовать HTTP Basic-аутентификацию, параметр с токеном или подписанный URL (типы A, B, C или D). Если настроено несколько методов, выберите, должен ли запрос пройти все проверки или любую одну из них.
Режим защиты при атаке (UAM)
| Режим | Поведение |
|---|---|
| Отключено | Нет упреждающих проверок |
| Адаптивный | В обычных условиях проверок нет. Проверки назначаются посетителям только при обнаружении аномального трафика автоматической защитой платформы |
| Под атакой (5-секундная защита) | Каждый посетитель сначала должен пройти проверку браузера (proof of work) |
| Принудительная CAPTCHA | Каждый посетитель должен решить CAPTCHA. Поддерживается captcha.la; необходимо указать Site Key и Secret. Без них посетителям предлагается проверка браузера |
Можно настроить минимальное ожидание (секунды) (рекомендуется 5 и более), сложность (рекомендуется 15 и более) и срок действия допуска (секунды). Введите 0 для использования значения по умолчанию. IP-адреса/диапазоны CIDR из списка разрешений пропускают проверку в любом режиме. Расширения статических файлов и разрешённые ASN роботов действуют только в адаптивном режиме; режимы «Под атакой» и «Принудительная CAPTCHA» их игнорируют.
Во время атаки с массовыми запросами включите режим «Под атакой». После завершения атаки вернитесь в режим «Отключено» или «Адаптивный», чтобы не мешать клиентам API и поисковым роботам.
Защита соединений (Slowloris)
Ограничивает количество одновременных соединений с каждого IP-адреса и обнаруживает атаки с медленными запросами. Можно задать минимальную скорость передачи тела запроса, окно выборки, льготный период, максимальное время простоя и максимальное время получения тела запроса. Введите 0, чтобы отключить ограничение.