СКАТ фильтрует атакующий трафик до того, как он достигнет защищаемого сайта или IP клиента. Поддерживается защита от трёх типов атак:
| Атака | Механизм защиты | Как подключается |
|---|---|---|
| SYN flood | SYN PROXY: СКАТ сам отвечает на SYN и открывает сессию с сайтом только после подтверждения клиентом | Услуга 10, параметры syncf_* |
| UDP flood | Отбрасывание протоколов, неактуальных для защищаемого сайта или IP клиента | Фильтр протоколов (protocols.dscp) |
| HTTP flood | При превышении порога — перенаправление на страничку с CAPTCHA, прошедшие проверку попадают в белый список | Услуга 10, параметры ddos_*; белый список — услуга 8 |
Защиту от SYN flood и HTTP flood можно настроить через GUI: Инструкция, или через CLI (см. Управление услугой).
Атака SYN flood вызывает повышенный расход ресурсов атакуемой системы: на каждый входящий SYN-пакет система должна зарезервировать ресурсы в памяти либо сгенерировать SYN+ACK-ответ с криптографической cookie, выполнить поиск в таблицах сессий и т. п. Отказ в обслуживании наступает при потоке 100 000–500 000 пакетов в секунду, тогда как даже гигабитный канал позволяет направить на сайт до 1,5 млн пакетов в секунду.
СКАТ защищает от SYN flood так:
Режим защиты (по умолчанию 0):
0 — защита выключена;1 — активируется автоматически;2 — включена всегда.syncf_protection=1
Процент неподтверждённых клиентом запросов, при котором защита автоматически активируется (по умолчанию 5, можно менять online):
syncf_unconfirmed_percent=30
Порог количества SYN в секунду (без подтверждения), при котором считается, что всё нормально (по умолчанию 50):
syncf_threshold=50
Логирование срабатывания защиты (по умолчанию 0):
0 — нет;1 — логировать переключения защиты on/off.syncf_trace=1
Интервал проверки количества SYN и подтверждённых SYN, мс (по умолчанию 100):
syncf_check_tmout=100
Интервал мониторинга ответа на SYN+ACK, сформированный СКАТ, с (по умолчанию 60):
syncf_tracking_packs_time=60
Защищаемые порты указываются в /etc/dpi/fastdpi.conf (по умолчанию 80, можно менять online). Настройка общая для всех защищаемых сайтов:
syncf_ports=80:443
Атака обычно выполняется короткими/фрагментированными UDP-пакетами с высоким PPS, на сборку и анализ которых атакуемая платформа вынуждена тратить много ресурсов.
Защита осуществляется отбрасыванием неактуального набора протоколов для защищаемого сайта или IP клиента. Конфигурирование фильтра протоколов описано в опции Назначение приоритетов.
Для типового веб-сайта актуальны только HTTP и HTTPS, поэтому конфигурация выглядит так:
http cs0 https cs0 default drop
Конвертируйте подготовленный файл во внутренний формат и загрузите в DPI:
cat my_dscp.txt|lst2dscp protocols.dscp mv protocols.dscp /etc/dpi/protocols.dscp service fastdpi reload
Аналогично можно защищаться от атак типа DNS/NTP amplification, при которых входящий канал забивается трафиком сверх его ёмкости. Действие такой защиты ограничено возможностями оператора по предоставлению дополнительной канальной ёмкости. При её превышении потребуется аренда дополнительных каналов или перенаправление трафика на специализированные сервисы защиты.
При HTTP flood ботнет имитирует действия легитимных пользователей, обычно выбирая наиболее ресурсоёмкие запросы к сайту. За счёт большого числа участвующих компьютеров это приводит к отказу в обслуживании. Для отсева ботов СКАТ использует страничку с CAPTCHA.
Принцип работы:
Защита активируется при превышении одного из порогов, заданных в /etc/dpi/fastdpi.conf.
Порог по запросам в секунду:
ddos_reqsec_threshold=300 ddos_reqsec_variation=5
ddos_reqsec_threshold — количество запросов в секунду к защищаемому сайту; обычно выбирается максимальное значение, наблюдавшееся при нормальной работе сайта;ddos_reqsec_variation — допустимое отклонение от порога в процентах, при котором защита включается/выключается. Нужно для избежания «дребезга», по умолчанию 5%.Порог по пакетам в секунду:
ddos_pktsec_threshold=5000 ddos_pktsec_variation=5
ddos_pktsec_threshold — количество пакетов в секунду к защищаемому сайту; обычно выбирается максимальное значение, наблюдавшееся при нормальной работе сайта;ddos_pktsec_variation — допустимое отклонение от порога в процентах (по умолчанию 5%).
Если заданы оба порога, приоритетным считается ddos_reqsec_threshold, а ddos_pktsec_threshold не учитывается.
Страничка с CAPTCHA, на которую выполняется перенаправление, и ключ шифрования:
ddos_check_server=www.server_name.ru/path/page.html? ddos_security_key=123567890
ddos_security_key — ключ шифрования для формирования токенов, сообщающих DPI об успешном прохождении проверки.Логирование срабатывания защиты:
ddos_trace=1
Список доверенных IP можно собрать заранее — по логам веб-сервера защищаемого сайта (скрипт анализа пишется самостоятельно или службой техподдержки) или по логу, который формирует сам DPI (см. СОРМ).
Загрузка списка в DPI (белый список — услуга 8):
fdpi_ctrl load --service 8 --file ip_list.txt
Подробнее о командах fdpi_ctrl и персистентности данных — в разделе Управление абонентами. Абонентами в этом случае считаются пользователи защищаемого сайта.
Требования:
ddos_check_server и ddos_security_key. Для простоты можно использовать тот же профиль, что и для защищаемого сайта;Порядок работы:
UrlRedir с URL защищаемого сайта, куда направлялся пользователь;UrlRedir.Успешный ввод капчи означает, что на сайт пришёл человек: на его IP-адрес автоматически подключается услуга 8, и дальше он работает с сайтом без повторной проверки. Эту услугу имеет смысл периодически сбрасывать, так как ранее чистые компьютеры могут быть заражены.
Правила формирования security token и пример странички с капчей можно получить через службу техподдержки.
Защита от SYN flood и HTTP flood на уровне отдельных абонентов (защищаемых IP) управляется командой fdpi_ctrl.
Формат команды:
fdpi_ctrl команда --service 10 [список опций] [список_IP или login]
Синтаксис команд и способы задания IP-адресов описаны в разделе Команды управления.
Профиль услуги задаётся в формате JSON. Можно указать только часть параметров: например, только параметры HTTP flood — тогда защита от SYN flood будет неактивна. Неуказанные параметры принимают значения по умолчанию.
| Защита | Параметры |
|---|---|
| SYN flood | syncf_protection, syncf_trace, syncf_check_tmout, syncf_tracking_packs_time, syncf_unconfirmed_percent, syncf_threshold |
| HTTP flood | ddos_trace, ddos_reqsec_threshold, ddos_reqsec_variation, ddos_pktsec_threshold, ddos_pktsec_variation, ddos_check_server, ddos_security_key |
Создать профиль и подключить защиту с этим профилем для нескольких абонентов:
fdpi_ctrl load profile --service 10 --profile.name test_protect --profile.json '{ "ddos_trace" : 1, "ddos_reqsec_threshold" : 100, "ddos_reqsec_variation" : 5, "ddos_pktsec_threshold" : 1000, "ddos_pktsec_variation" : 5, "ddos_check_server" : "captcha.server.ru/?", "ddos_security_key" : "123", "syncf_protection" : 0 , "syncf_trace" : 0 , "syncf_check_tmout" : 0 , "syncf_tracking_packs_time" : 0 , "syncf_unconfirmed_percent" : 0 , "syncf_threshold" : 0 }' fdpi_ctrl load --service 10 --profile.name test_protect --ip 192.168.0.1 fdpi_ctrl load --service 10 --profile.name test_protect --ip 192.168.0.2
Найти абонентов с заданным профилем:
fdpi_ctrl list all --service 10 --profile.name test_protect
Изменить настройки профиля (применятся ко всем абонентам с этим профилем):
fdpi_ctrl load profile --service 10 --profile.name test_protect --profile.json '{ "ddos_reqsec_threshold" : 0, "ddos_reqsec_variation" : 5, "ddos_pktsec_threshold" : 0, "ddos_pktsec_variation" : 5, "syncf_protection" : 1 , "syncf_trace" : 1 , "syncf_check_tmout" : 500 , "syncf_tracking_packs_time" : 180 , "syncf_unconfirmed_percent" : 25 , "syncf_threshold" : 100 }'
Список профилей услуги и их настроек:
fdpi_ctrl list all profile --service 10
Удалить профиль (не должно быть абонентов, которые его используют):
fdpi_ctrl del profile --service 10 --profile.name test_protect
Отключить защиту для абонента:
fdpi_ctrl del --service 10 --ip 192.168.0.1
Просмотреть статус защиты:
fdpi_ctrl list status --service 10 --ip 192.168.0.1
Вывод:
192.168.0.1 synf=0 ddos=1
synf=0 — защита от SYN flood не активна;ddos=1 — защита от HTTP flood активна.
Задаётся в /etc/dpi/fastdpi.conf (по умолчанию 32, максимум 65535):
max_profiles_ddos=32
Это «холодный» параметр — после изменения требуется рестарт.