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.