Пример конфигурации SEnginx для защиты от ddos-атак 7 уровня
Пример конфигурации SEnginx, которая использует защиту от ddos-атак и защиту от сканирования уязвимостей чувствительного URL.
Файл конфигурации
http {
# Оригинальная конфигурация nginx
...
statistics_zone 10m; # Выделить 10 MB памяти для статистики SEnginx
ip_blacklist on; # Включить черный список IP-адресов SEnginx
ip_blacklist_size 10240; # Максимальное количество адресов в черном списке
ip_blacklist_timeout 120; # Время хранения IP в черном списке (секунд)
ip_blacklist_mode local; # Режим работы черного списка
limit_req_zone $binary_remote_addr zone=mudoom:10m rate=10r/s;
ip_behavior_zone zone=brand:10m sample_base=10 sample_cycle=2s; # Зона размером 10 MB для учета доступа к чувствительным ресурсам, минимальным количеством запросов 10 и интервалом 2 секунды
# Белый список IP-адресов
geo $ip_wl {
ranges;
default 0;
127.0.0.1-127.0.0.1 1;
}
# Белый список на основе User Agent для известных поисковых ботов
whitelist_ua $ua_wl {
caseless; # Игнорировать регистр
"Baiduspider" ".*\.baidu\.com";
"Baidu-YunGuanCe-SLABot" ".*\.baidu\.com";
"Googlebot" ".*\.google\.com";
"360Spider" ".*\.360\.cn";
"360JK" ".*\.360\.cn";
"Sosospider" ".*\.soso\.com";
"Sogou web spider" ".*\.sogou\.com";
"bingbot" ".*\.bing\.com";
}
server {
virtual_server_name www.mudoom.com; # Имя виртуального сервера для учета статистики SEnginx
ip_behavior zone=brand type=sensitive_url; # Включить для server учет доступа к чувствительным URL
# location для проверки ботов
location @process {
robot_mitigation_global_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать глобальный белый список IP-адресов и белый список на основе User Agent
robot_mitigation on; # Включить модуль Robot Mitigation
robot_mitigation_mode js; # Режим проверки
robot_mitigation_blacklist 50; # Лимит неудачных проверок для попадания в черный список
robot_mitigation_timeout 600; # Таймаут до следующей проверки в случае успешной проверки (секунд)
robot_mitigation_challenge_ajax off; # Запретить проверку для ajax-запросов
#php-fpm и другие директивы оригинальной конфигурации nginx
fastcgi_pass 127.0.0.1:9000;
...
}
# Просмотр черного списка. Доступ должен быть ограничен по соображениям безопасности.
location /blacklist_show {
allow 127.0.0.1;
deny all;
ip_blacklist_show;
}
# Принудительная очистка черного списка. Доступ должен быть ограничен по соображениям безопасности.
location /blacklist_flush {
allow 127.0.0.1;
deny all;
ip_blacklist_flush;
}
# Просмотр статистики SEnginx. Доступ должен быть ограничен по соображениям безопасности.
location /stats {
allow 127.0.0.1;
deny all;
statistics;
}
# Location для запрета доступа
location /RequestDenied {
return 403;
}
location /mudoom {
ip_behavior_sensitive; # Данный location помечается как чувствительный
limit_req zone=mudoom burst=100 forbid_action=@process condition=$cond; # Определение лимита запросов, при превышении которого производится перенаправление на @process
ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) { # limit_req будет включен, если количество запросов к нечувствительным ресурсам менее 30% от общего количества запросов
set $cond 1;
}
cookie_poisoning_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать белый список IP-адресов и белый список по User Agent для модуля Сookie Poisoning
cookie_poisoning on; # Включить модуль Сookie Poisoning
cookie_poisoning_action block; # Блокировать запрос, если обнаружена подмена cookie
cookie_poisoning_log on; # Записать подмену cookie в журнал
naxsi_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать белый список IP-адресов и белый список по User Agent для Naxsi
# Параметры Naxsi
LearningMode;
SecRulesEnabled;
#SecRulesDisabled;
DeniedUrl "/RequestDenied";
CheckRule "$XSS >= 4" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 8" BLOCK;
CheckRule "$UPLOAD >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$SQL >= 8" BLOCK;
#php-fpm и другие директивы оригинальной конфигурации nginx
fastcgi_pass 127.0.0.1:9000;
...
}
}
}