IP Behavior
Содержание |
Обзор
Модуль IP behavior используется для поведенческого анализа пользователей при доступе к серверу. Этот модуль преимущественно используется в связке с другими модулями, например limit_req по условию и Robot Mitigation, позволяя SEnginx определять и блокировать ddos атаки 7 уровня и различные сканеры контента.
В настоящее время этот модуль поддерживает только анализ доступа к чувствительным URL. Анализ других поведенческих факторов будет реализован в будущих версиях (но это не точно).
Эта функция доступна начиная с SEnginx версии 1.5.10.
Директивы
ip_behavior_zone
Синтаксис | ip_behavior_zone zone=name:size sample_base=times sample_cycle=cycle; |
По умолчанию | |
Контекст | http |
Чтобы определить зону поведенческого анализа, нужно указать 3 параметра:
- zone=name:size, name это название зоны, size обозначает сколько памяти для зоны будет использовано в m (мегабайты), k (килобайты) и т.д.;
- sample_base=times, указывает количество запросов к контенту зоны, целое число без знака;
- sample_cycle=cycle, указывает временной интервал, в течение которого производится анализ, значение может быть s (секунды) или m (минуты).
Количество запросов к контенту зоны рассчитывается пока временной интервал между текущим и предыдущим запросом меньше, чем sample_cycle.
Количество запросов начинает отсчитываться заново, если интервал между текущим и предыдущим запросом больше sample_cycle.
Пример:
ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s;
Здесь определяется зона размером 10MB, sample_cycle составляет 2 секунды, а минимальное количество запросов 10.
ip_behavior
Синтаксис | ip_behavior zone=name type=type; |
По умолчанию | |
Контекст | server |
Включает поведенческий анализ на уровне server. Эта директива принимает 2 параметра:
- name, указывает название зоны, которая будет использоваться;
- type, указывает режим. В настоящее время поддерживается только sensitive_url.
Пример:
server { ip_behavior zone=abc type=sensitive_url; }
Включить зону abc на уровне server и установить режим sensitive_url для поведенческого анализа.
ip_behavior_sensitive
Синтаксис | ip_behavior_sensitive; |
По умолчанию | |
Контекст | location |
Указывает чувствительный location. Если location определен как чувствительный, все ресурсы в этом location будут трактоваться как чувствительные.
Пример:
server { location ~* .*\.php { ip_behavior_sensitive; ... } }
Определить php файлы как чувствительные ресурсы, так как запросами к php файлам легко организовать ddos атаку 7 уровня.
Переменные
$insensitive_percent
Процент доступа к нечувствительным ресурсам от общего количества запросов. Значение рассчитывается для каждого IP адреса и может быть использовано в директивах ifany, ifall и if. Обычно значение используется для того, чтобы установить параметр condition в директиве limit_req по условию.
Примечание: $insensitive_percent равен -1 если не достигнуто минимальное значение количества запросов (sample_base), смотрите ip_behavior_zone.
Например:
ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) { set $cond 1; }
Примеры конфигураций
Работа с limit_req по условию
http { ... limit_req_zone $binary_remote_addr zone=cc:10m rate=1r/s; ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s; ... server { ... ip_behavior zone=abc type=sensitive_url; ... location ~ /.*\.php { limit_req zone=cc burst=1 condition=$cond; ip_behavior_sensitive; ifall ($insensitive_percent >= 0) ($insensitive_percent < 5) { set $cond 1; } fastcgi_pass 127.0.0.1:9000; ... } location / { root html/; } } }
Для IP адресов, с которых производятся запрсы к большому количеству чувствительных ресурсов, будет ограничена скорость обработки запросов.
Работа с модулем Robot Mitigation
http { ... ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=2s; ... server { ... ip_behavior zone=abc type=sensitive_url; ... location ~ /.*\.php { ip_behavior_sensitive; ifall ($insensitive_percent >= 0) ($insensitive_percent < 5) { return 599; } fastcgi_pass 127.0.0.1:9000; ... } location @process { ns_layer_force_run; robot_mitigation on; robot_mitigation_blacklist 10; fastcgi_pass 127.0.0.1:9000; ... } error_page 599 = @process; } }
Проверить IP адреса, которые выполняют запросы к большому количеству чувствительных ресурсов за короткое время. IP адреса будут добавлены в черный список если не пройдут проверку 10 раз.
Работа с limit_req по условию и Robot Mitigation
http { ... limit_req_zone $binary_remote_addr zone=cc:10m rate=5r/s; limit_req_zone $binary_remote_addr zone=total:10m rate=30r/s; ip_behavior_zone zone=abc:10m sample_base=10 sample_cycle=1s; server { ... ip_behavior zone=abc type=sensitive_url; location / { root html/; } ... location ~* .*\.php { limit_req zone=cc burst=1 forbid_action=@process condition=$cond; limit_req zone=total burst=5; ip_behavior_sensitive; ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) { set $cond 1; } fastcgi_pass 127.0.0.1:9000; ... } location @process { ns_layer_force_run; robot_mitigation on; robot_mitigation_mode js; fastcgi_pass 127.0.0.1:9000; ... } } }
Проверять IP адреса с использованием действия forbid_action в limit_req.